पिकअप और डिलीवरी में लगने वाले समय की सीमाएं

OptimizeToursRequest इन पर पाबंदियां लागू करता है:

  • शिपमेंट, जिससे शिपमेंट पर असर पड़ता है
  • वाहन, जिससे वाहन के रास्तों का हिसाब लगाने पर असर पड़ता है
  • दुनिया भर में, वाहनों और शिपमेंट दोनों पर असर डालता है.

इस गाइड में, शिपिंग से जुड़ी एक ज़रूरी शर्त पर फ़ोकस किया गया है: समयसीमा.

टाइम विंडो, एक तरह की पाबंदी होती है. इसे OptimizeToursRequest मैसेज (REST, gRPC) में दिया जाता है. इससे शिपमेंट की गतिविधियों के लिए, समयसीमा तय की जाती है. इस तरह की पाबंदी से, शिपमेंट कब और कैसे किया जा सकता है, इस पर असर पड़ता है. साथ ही, शिपमेंट के लिए वाहन असाइन करने पर भी असर पड़ता है. इन पाबंदियों के साथ, ऑप्टिमाइज़र उन वाहनों को प्राथमिकता देता है जो शिपमेंट के समय से जुड़ी पाबंदियों को सबसे अच्छी तरह से पूरा कर सकते हैं.

शिपमेंट से जुड़ी पाबंदियां: डिलीवरी के लिए चुना गया समय (डिलीवरी विंडो)

Shipment.VisitRequest मैसेज में, पिकअप या डिलीवरी का समय इस तरह बताया जा सकता है:

  • मैसेज में timeWindows प्रॉपर्टी का इस्तेमाल करना (REST, gRPC)
  • TimeWindow मैसेज (REST, gRPC) में, शुरू और खत्म होने का समय बताएं.

समयसीमा से जुड़ी पाबंदियों के साथ अनुरोध का उदाहरण

यहां दिए गए उदाहरण में, तीन अलग-अलग शिपमेंट दिखाए गए हैं. हर शिपमेंट के लिए, डिलीवरी का समय अलग-अलग है. आसानी के लिए, इस उदाहरण में सिर्फ़ deliveries पर समयसीमाएं सेट की गई हैं. हालांकि, पिकअप पर भी समयसीमाएं लागू की जा सकती हैं. एक से ज़्यादा टाइम विंडो तय की जा सकती हैं. हालांकि, इस उदाहरण में हर डिलीवरी VisitRequest के लिए सिर्फ़ एक टाइम विंडो का इस्तेमाल किया गया है.

टाइम विंडो के साथ अनुरोध का उदाहरण देखें

{
  "populatePolylines": false,
  "populateTransitionPolylines": false,
  "model": {
    "globalStartTime": "2023-01-13T16:00:00Z",
    "globalEndTime": "2023-01-14T16:00:00Z",
    "shipments": [
      {
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.789456,
              "longitude": -122.390192
            },
            "duration": "250s",
            "timeWindows": [
              {
                "startTime": "2023-01-13T18:00:00Z",
                "endTime": "2023-01-13T19:00:00Z"
              }
            ]
          }
        ],
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "duration": "150s"
          }
        ],
        "penaltyCost": 100.0
      },
      {
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.789116,
              "longitude": -122.395080
            },
            "duration": "250s",
            "timeWindows": [
              {
                "startTime": "2023-01-13T18:00:00Z",
                "endTime": "2023-01-13T18:30:00Z"
              }
            ]
          }
        ],
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "duration": "150s"
          }
        ],
        "penaltyCost": 20.0
      },
      {
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.795242,
              "longitude": -122.399347
            },
            "duration": "250s",
            "timeWindows": [
              {
                "startTime": "2023-01-13T17:30:00Z",
                "endTime": "2023-01-13T18:00:00Z"
              }
            ]
          }
        ],
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "duration": "150s"
          }
        ],
        "penaltyCost": 50.0
      }
    ],
    "vehicles": [
      {
        "endLocation": {
          "latitude": 37.794465,
          "longitude": -122.394839
        },
        "startLocation": {
          "latitude": 37.794465,
          "longitude": -122.394839
        },
        "costPerHour": 40.0,
        "costPerKilometer": 10.0
      }
    ]
  }
}
    

समयसीमा से जुड़ी पाबंदियों के साथ जवाब का उदाहरण

जवाब के उदाहरण में, वाहन के शुरू और खत्म होने का समय क्रमशः 17:35:50 और 18:17:24 है. इन समय से पता चलता है कि ऑप्टिमाइज़र ने अनुरोध में बताए गए वाहन को costPerHour के तौर पर चलाने में लगने वाले समय को कम कर दिया है. साथ ही, समयसीमा से जुड़ी सभी शर्तों को पूरा किया है. शुरू होने का समय 17:35:50 के तौर पर इस्तेमाल करने से, वाहन को विज़िट की जगह पर तब तक इंतज़ार नहीं करना पड़ता, जब तक विज़िट की टाइम विंडो शुरू नहीं हो जाती. यह जवाब में शून्य waitDuration वैल्यू के तौर पर दिखता है.

समयसीमाओं के साथ अनुरोध के उदाहरण का जवाब देखें

{
  "routes": [
    {
      "vehicleStartTime": "2023-01-13T17:35:50Z",
      "vehicleEndTime": "2023-01-13T18:17:24Z",
      "visits": [
        {
          "isPickup": true,
          "startTime": "2023-01-13T17:35:50Z",
          "detour": "0s"
        },
        {
          "shipmentIndex": 1,
          "isPickup": true,
          "startTime": "2023-01-13T17:38:20Z",
          "detour": "150s"
        },
        {
          "shipmentIndex": 2,
          "isPickup": true,
          "startTime": "2023-01-13T17:40:50Z",
          "detour": "300s"
        },
        {
          "shipmentIndex": 2,
          "startTime": "2023-01-13T17:50:09Z",
          "detour": "0s"
        },
        {
          "shipmentIndex": 1,
          "startTime": "2023-01-13T18:00:00Z",
          "detour": "796s"
        },
        {
          "startTime": "2023-01-13T18:07:35Z",
          "detour": "1520s"
        }
      ],
      "transitions": [
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2023-01-13T17:35:50Z"
        },
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2023-01-13T17:38:20Z"
        },
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2023-01-13T17:40:50Z"
        },
        {
          "travelDuration": "409s",
          "travelDistanceMeters": 1371,
          "waitDuration": "0s",
          "totalDuration": "409s",
          "startTime": "2023-01-13T17:43:20Z"
        },
        {
          "travelDuration": "341s",
          "travelDistanceMeters": 1312,
          "waitDuration": "0s",
          "totalDuration": "341s",
          "startTime": "2023-01-13T17:54:19Z"
        },
        {
          "travelDuration": "205s",
          "travelDistanceMeters": 636,
          "waitDuration": "0s",
          "totalDuration": "205s",
          "startTime": "2023-01-13T18:04:10Z"
        },
        {
          "travelDuration": "339s",
          "travelDistanceMeters": 1276,
          "waitDuration": "0s",
          "totalDuration": "339s",
          "startTime": "2023-01-13T18:11:45Z"
        }
      ],
      "metrics": {
        "performedShipmentCount": 3,
        "travelDuration": "1294s",
        "waitDuration": "0s",
        "delayDuration": "0s",
        "breakDuration": "0s",
        "visitDuration": "1200s",
        "totalDuration": "2494s",
        "travelDistanceMeters": 4595
      },
      "routeCosts": {
        "model.vehicles.cost_per_hour": 27.711111111111112,
        "model.vehicles.cost_per_kilometer": 45.95
      },
      "routeTotalCost": 73.661111111111111
    }
  ],
  "metrics": {
    "aggregatedRouteMetrics": {
      "performedShipmentCount": 3,
      "travelDuration": "1294s",
      "waitDuration": "0s",
      "delayDuration": "0s",
      "breakDuration": "0s",
      "visitDuration": "1200s",
      "totalDuration": "2494s",
      "travelDistanceMeters": 4595
    },
    "usedVehicleCount": 1,
    "earliestVehicleStartTime": "2023-01-13T17:35:50Z",
    "latestVehicleEndTime": "2023-01-13T18:17:24Z",
    "totalCost": 73.661111111111111,
    "costs": {
      "model.vehicles.cost_per_hour": 27.711111111111112,
      "model.vehicles.cost_per_kilometer": 45.95
    }
  }
}
    

टाइम विंडो के हिसाब से, वाहन के visits को क्रम से लगाया गया है, ताकि सबसे कम टाइम विंडो वाले शिपमेंट को सबसे पहले डिलीवर किया जा सके.

  1. shipments[2] को 5:50 बजे डिलीवर किया गया
  2. shipments[1] को शाम 6 बजे डिलीवर किया गया
  3. shipments[0] को 18:07 पर डिलीवर किया गया

अनुरोध के इस उदाहरण में, समयसीमा से जुड़ी सख्त शर्तें दी गई हैं. इसके मुताबिक, डिलीवरी को तय समयसीमा के अंदर पूरा करना ज़रूरी है. अगर किसी शिपमेंट के VisitRequests को किसी भी समयसीमा में पूरा करना मुमकिन नहीं है या यह किफ़ायती नहीं है, तो ऑप्टिमाइज़र उस शिपमेंट को छोड़ देता है. अगर शिपमेंट में penaltyCost है, तो ऑप्टिमाइज़र इसे जवाब में बताई गई लागत में जोड़ देता है metrics. ऐसा न करने पर, OptimizeToursResponse मैसेज (REST, gRPC) की skippedMandatoryShipmentCount प्रॉपर्टी बढ़ जाती है.

अगर shipment[1] की विंडो को कई घंटे बाद (शाम 6:00 बजे से बदलकर रात 9:00 बजे) कर दिया जाता है, तो नतीजे अलग-अलग होंगे. इन्हें यहां दिए गए उदाहरणों में दिखाया गया है.

समय की ऐसी विंडो के साथ अनुरोध का उदाहरण देखें जिसे पूरा नहीं किया जा सकता

{
  "populatePolylines": false,
  "populateTransitionPolylines": false,
  "model": {
    "globalStartTime": "2023-01-13T16:00:00Z",
    "globalEndTime": "2023-01-14T16:00:00Z",
    "shipments": [
      {
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.789456,
              "longitude": -122.390192
            },
            "duration": "250s",
            "timeWindows": [
              {
                "startTime": "2023-01-13T18:00:00Z",
                "endTime": "2023-01-13T19:00:00Z"
              }
            ]
          }
        ],
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "duration": "150s"
          }
        ],
        "penaltyCost": 100.0
      },
      {
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.789116,
              "longitude": -122.395080
            },
            "duration": "250s",
            "timeWindows": [
              {
                "startTime": "2023-01-13T21:00:00Z",
                "endTime": "2023-01-13T21:30:00Z"
              }
            ]
          }
        ],
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "duration": "150s"
          }
        ],
        "penaltyCost": 20.0
      },
      {
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.795242,
              "longitude": -122.399347
            },
            "duration": "250s",
            "timeWindows": [
              {
                "startTime": "2023-01-13T17:30:00Z",
                "endTime": "2023-01-13T18:00:00Z"
              }
            ]
          }
        ],
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "duration": "150s"
          }
        ],
        "penaltyCost": 50.0
      }
    ],
    "vehicles": [
      {
        "endLocation": {
          "latitude": 37.794465,
          "longitude": -122.394839
        },
        "startLocation": {
          "latitude": 37.794465,
          "longitude": -122.394839
        },
        "costPerHour": 40.0,
        "costPerKilometer": 10.0
      }
    ]
  }
}
    

समयसीमाओं के साथ, दूसरे उदाहरण के अनुरोध का जवाब देखें. इसमें शिपमेंट को स्किप किया गया है

{
  "routes": [
    {
      "vehicleStartTime": "2023-01-13T17:37:49Z",
      "vehicleEndTime": "2023-01-13T18:09:49Z",
      "visits": [
        {
          "isPickup": true,
          "startTime": "2023-01-13T17:37:49Z",
          "detour": "0s"
        },
        {
          "shipmentIndex": 2,
          "isPickup": true,
          "startTime": "2023-01-13T17:40:19Z",
          "detour": "150s"
        },
        {
          "shipmentIndex": 2,
          "startTime": "2023-01-13T17:49:38Z",
          "detour": "0s"
        },
        {
          "startTime": "2023-01-13T18:00:00Z",
          "detour": "946s"
        }
      ],
      "transitions": [
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2023-01-13T17:37:49Z"
        },
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2023-01-13T17:40:19Z"
        },
        {
          "travelDuration": "409s",
          "travelDistanceMeters": 1371,
          "waitDuration": "0s",
          "totalDuration": "409s",
          "startTime": "2023-01-13T17:42:49Z"
        },
        {
          "travelDuration": "372s",
          "travelDistanceMeters": 1348,
          "waitDuration": "0s",
          "totalDuration": "372s",
          "startTime": "2023-01-13T17:53:48Z"
        },
        {
          "travelDuration": "339s",
          "travelDistanceMeters": 1276,
          "waitDuration": "0s",
          "totalDuration": "339s",
          "startTime": "2023-01-13T18:04:10Z"
        }
      ],
      "metrics": {
        "performedShipmentCount": 2,
        "travelDuration": "1120s",
        "waitDuration": "0s",
        "delayDuration": "0s",
        "breakDuration": "0s",
        "visitDuration": "800s",
        "totalDuration": "1920s",
        "travelDistanceMeters": 3995
      },
      "routeCosts": {
        "model.vehicles.cost_per_kilometer": 39.95,
        "model.vehicles.cost_per_hour": 21.333333333333332
      },
      "routeTotalCost": 61.283333333333331
    }
  ],
  "skippedShipments": [
    {
      "index": 1
    }
  ],
  "metrics": {
    "aggregatedRouteMetrics": {
      "performedShipmentCount": 2,
      "travelDuration": "1120s",
      "waitDuration": "0s",
      "delayDuration": "0s",
      "breakDuration": "0s",
      "visitDuration": "800s",
      "totalDuration": "1920s",
      "travelDistanceMeters": 3995
    },
    "usedVehicleCount": 1,
    "earliestVehicleStartTime": "2023-01-13T17:37:49Z",
    "latestVehicleEndTime": "2023-01-13T18:09:49Z",
    "totalCost": 81.283333333333331,
    "costs": {
      "model.shipments.penalty_cost": 20,
      "model.vehicles.cost_per_hour": 21.333333333333332,
      "model.vehicles.cost_per_kilometer": 39.95
    }
  }
}
    

इस उदाहरण में, बाद की समयसीमा की वजह से shipment[1] को छोड़ दिया गया है, क्योंकि शिपमेंट की डिलीवरी को तय समयसीमा के अंदर पूरा करने के लिए, वाहन के ज़्यादा समय तक चलने की ज़रूरत थी. यह समय, शिपमेंट के लिए लगने वाले जुर्माने की लागत से ज़्यादा था. shipment[1] के लिए पेनल्टी की लागत metrics.costs में दिखती है. साथ ही, इसका इंडेक्स skippedShipments में दिखता है.

टाइम विंडो से जुड़ी सामान्य पाबंदियां

लागत मॉडल के पैरामीटर में बताए गए समय के मुताबिक, टाइम विंडो को सॉफ़्ट कंस्ट्रेंट के तौर पर लागू किया जा सकता है. सॉफ़्ट कंस्ट्रेंट, हार्ड कंस्ट्रेंट से इस तरह अलग होते हैं:

  • सख्त शर्तें: इनका उल्लंघन नहीं किया जा सकता. ऑप्टिमाइज़र ऐसा कोई समाधान नहीं देता है जो इन शर्तों का उल्लंघन करता हो. भले ही, इसका मतलब शिपमेंट को छोड़ना हो.
  • सॉफ़्ट कंस्ट्रेंट: इनका उल्लंघन किया जा सकता है. इसका मतलब है कि ऑप्टिमाइज़र ऐसा समाधान दे सकता है जो सॉफ़्ट कंस्ट्रेंट का उल्लंघन करता हो. हालांकि, ऑप्टिमाइज़र किसी भी उल्लंघन पर लागत भी लागू करता है. इस लागत को, समयसीमा के दौरान अतिरिक्त प्रॉपर्टी के तौर पर उपलब्ध कराएं. आम तौर पर, इसे गतिविधि होने से पहले या बाद के हर घंटे के लिए, प्रति घंटे की लागत के तौर पर उपलब्ध कराया जाता है.

startTime या endTime के बजाय softStartTime या softEndTime का इस्तेमाल करके, टाइम विंडो को कम किया जाता है. साथ ही, costPerHourBeforeSoftStartTime या costPerHourAfterSoftEndTime सेट करके भी टाइम विंडो को कम किया जाता है.

पिकअप या डिलीवरी के लिए, समयसीमा से जुड़ी सामान्य शर्तों का इस्तेमाल तब करें, जब पिकअप या डिलीवरी किसी तय समयसीमा के अंदर होनी चाहिए. हालांकि, उस समयसीमा के अंदर पिकअप या डिलीवरी करना ज़रूरी नहीं है. कारोबार के लक्ष्यों को पूरा करने के लिए, टाइम विंडो की हार्ड और सॉफ़्ट पाबंदियों का एक साथ इस्तेमाल किया जा सकता है. उदाहरण के लिए:

  • टाइम विंडो: इससे ग्राहक के कारोबार के खुले रहने का समय पता चलता है. जैसे, सुबह 9 बजे से शाम 5 बजे तक.
  • डिलीवरी या पिकअप के लिए तय की गई समयावधि: इससे डिलीवरी या पिकअप के लिए तय की गई समयावधि का पता चलता है. यह समयावधि, खरीदार को भेजी गई सूचना में दी गई समयावधि से मेल खाती है. जैसे, सुबह 9 बजे से दोपहर 1 बजे तक.

इस उदाहरण में, उस शिपमेंट के लिए शुरू होने के समय की पाबंदी को कम कर दिया गया है जिसे पहले इसलिए स्किप कर दिया गया था, क्योंकि उसके लिए समयसीमा बहुत देर से शुरू हुई थी. अन्य शिपमेंट के लिए भी, समयसीमा के खत्म होने के समय को कम कर दिया गया है.

हार्ड और सॉफ़्ट टाइम विंडो के साथ अनुरोध का उदाहरण देखें

{
  "populatePolylines": false,
  "populateTransitionPolylines": false,
  "model": {
    "globalStartTime": "2023-01-13T16:00:00Z",
    "globalEndTime": "2023-01-14T16:00:00Z",
    "shipments": [
      {
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.789456,
              "longitude": -122.390192
            },
            "duration": "250s",
            "timeWindows": [
              {
                "startTime": "2023-01-13T18:00:00Z",
                "softEndTime": "2023-01-13T19:00:00Z",
                "costPerHourAfterSoftEndTime": 2.0
              }
            ]
          }
        ],
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "duration": "150s"
          }
        ],
        "penaltyCost": 100.0
      },
      {
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.789116,
              "longitude": -122.395080
            },
            "duration": "250s",
            "timeWindows": [
              {
                "softStartTime": "2023-01-13T21:00:00Z",
                "endTime": "2023-01-13T21:30:00Z",
                "costPerHourBeforeSoftStartTime": 2.0
              }
            ]
          }
        ],
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "duration": "150s"
          }
        ],
        "penaltyCost": 20.0
      },
      {
        "deliveries": [
          {
            "arrivalLocation": {
              "latitude": 37.795242,
              "longitude": -122.399347
            },
            "duration": "250s",
            "timeWindows": [
              {
                "startTime": "2023-01-13T17:30:00Z",
                "softEndTime": "2023-01-13T18:00:00Z",
                "costPerHourAfterSoftEndTime": 2.0
              }
            ]
          }
        ],
        "pickups": [
          {
            "arrivalLocation": {
              "latitude": 37.794465,
              "longitude": -122.394839
            },
            "duration": "150s"
          }
        ],
        "penaltyCost": 50.0
      }
    ],
    "vehicles": [
      {
        "endLocation": {
          "latitude": 37.794465,
          "longitude": -122.394839
        },
        "startLocation": {
          "latitude": 37.794465,
          "longitude": -122.394839
        },
        "costPerHour": 40.0,
        "costPerKilometer": 10.0
      }
    ]
  }
}
    

उदाहरण के तौर पर किए गए अनुरोध का जवाब देखें. इसमें हार्ड और सॉफ़्ट टाइम विंडो शामिल हैं

{
  "routes": [
    {
      "vehicleStartTime": "2023-01-13T17:48:35Z",
      "vehicleEndTime": "2023-01-13T18:24:28Z",
      "visits": [
        {
          "isPickup": true,
          "startTime": "2023-01-13T17:48:35Z",
          "detour": "0s"
        },
        {
          "shipmentIndex": 1,
          "isPickup": true,
          "startTime": "2023-01-13T17:51:05Z",
          "detour": "150s"
        },
        {
          "shipmentIndex": 2,
          "isPickup": true,
          "startTime": "2023-01-13T17:53:35Z",
          "detour": "300s"
        },
        {
          "startTime": "2023-01-13T18:00:00Z",
          "detour": "300s"
        },
        {
          "shipmentIndex": 1,
          "startTime": "2023-01-13T18:07:42Z",
          "detour": "493s"
        },
        {
          "shipmentIndex": 2,
          "startTime": "2023-01-13T18:17:27Z",
          "detour": "873s"
        }
      ],
      "transitions": [
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2023-01-13T17:48:35Z"
        },
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2023-01-13T17:51:05Z"
        },
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2023-01-13T17:53:35Z"
        },
        {
          "travelDuration": "235s",
          "travelDistanceMeters": 795,
          "waitDuration": "0s",
          "totalDuration": "235s",
          "startTime": "2023-01-13T17:56:05Z"
        },
        {
          "travelDuration": "212s",
          "travelDistanceMeters": 791,
          "waitDuration": "0s",
          "totalDuration": "212s",
          "startTime": "2023-01-13T18:04:10Z"
        },
        {
          "travelDuration": "335s",
          "travelDistanceMeters": 1204,
          "waitDuration": "0s",
          "totalDuration": "335s",
          "startTime": "2023-01-13T18:11:52Z"
        },
        {
          "travelDuration": "171s",
          "travelDistanceMeters": 665,
          "waitDuration": "0s",
          "totalDuration": "171s",
          "startTime": "2023-01-13T18:21:37Z"
        }
      ],
      "metrics": {
        "performedShipmentCount": 3,
        "travelDuration": "953s",
        "waitDuration": "0s",
        "delayDuration": "0s",
        "breakDuration": "0s",
        "visitDuration": "1200s",
        "totalDuration": "2153s",
        "travelDistanceMeters": 3455
      },
      "routeCosts": {
        "model.shipments.deliveries.time_windows.cost_per_hour_after_soft_end_time": 0.58166666666666667,
        "model.shipments.deliveries.time_windows.cost_per_hour_before_soft_start_time": 5.7433333333333332,
        "model.vehicles.cost_per_hour": 23.922222222222221,
        "model.vehicles.cost_per_kilometer": 34.55
      },
      "routeTotalCost": 64.797222222222217
    }
  ],
  "metrics": {
    "aggregatedRouteMetrics": {
      "performedShipmentCount": 3,
      "travelDuration": "953s",
      "waitDuration": "0s",
      "delayDuration": "0s",
      "breakDuration": "0s",
      "visitDuration": "1200s",
      "totalDuration": "2153s",
      "travelDistanceMeters": 3455
    },
    "usedVehicleCount": 1,
    "earliestVehicleStartTime": "2023-01-13T17:48:35Z",
    "latestVehicleEndTime": "2023-01-13T18:24:28Z",
    "totalCost": 64.797222222222217,
    "costs": {
      "model.vehicles.cost_per_kilometer": 34.55,
      "model.shipments.deliveries.time_windows.cost_per_hour_before_soft_start_time": 5.7433333333333332,
      "model.shipments.deliveries.time_windows.cost_per_hour_after_soft_end_time": 0.58166666666666667,
      "model.vehicles.cost_per_hour": 23.922222222222221
    }
  }
}
    

इस उदाहरण में, डिलीवरी के लिए सिर्फ़ सख्त समयसीमा की शर्त होने की वजह से, डिलीवरी को पूरी तरह से छोड़ दिया गया है shipment[1]. हालांकि, डिलीवरी के लिए समयसीमा की शर्त को आसान बनाने पर, डिलीवरी को समयसीमा शुरू होने से पहले डिलीवर किया गया है. इसी तरह, अन्य शिपमेंट के लिए डिलीवरी में लगने वाले समय को थोड़ा बढ़ाने से, shipment[2] को डिलीवरी के लिए तय की गई समयावधि के बाद भी डिलीवर किया जा सकता है.

साथ ही, लागत और कुल शिपमेंट, दोनों में बदलाव हुआ है:

  • totalCost: 81.283 से घटकर 64.797 हो गया
  • कुल शिपमेंट पूरे हुए: 2 से बढ़कर 3 हो गए

ऑप्टिमाइज़र को कम खर्चीला समाधान मिला है, क्योंकि पिछले उदाहरण की तुलना में, समयसीमा की पाबंदियों में ढील दी गई थी.

आखिर में, metrics.costs प्रॉपर्टी में एक नई कुंजी भी शामिल है. इससे, पाबंदी के प्रॉडक्ट और डिलीवरी विंडो के हिसाब से, खरीदार को चुकाई गई असल कीमत के बारे में पता चलता है. यानी:

  • costPerHourBeforeSoftStartTime of 2.0 and
  • डिलीवरी की असल तारीख और समय और डिलीवरी के लिए तय की गई समयावधि के बीच का अंतर: 2.83583 घंटे

नतीजा:

model.shipments.deliveries.time_windows.cost_per_hour_before_soft_start_time: 5.6716666666666669.

इन मेट्रिक की मदद से, लागत का विश्लेषण किया जा सकता है. इससे आपको यह पता चलता है कि ज़रूरी शर्तों और सामान्य शर्तों के बीच क्या समझौता किया गया है. इसका इस्तेमाल करके, अपनी शर्तों को इस तरह से सेट किया जा सकता है कि वे आपके कारोबार के नियमों के मुताबिक हों. इस मामले में, कुल लागत 20.0 के shipment[1].penalty_cost से कम है. ऑप्टिमाइज़र ने यह पता लगाया है कि शिपमेंट को स्किप करने के बजाय, उसे जल्दी डिलीवर करना ज़्यादा किफ़ायती है.