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

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] को 17:50 बजे डिलीवर किया गया
  2. shipments[1] को 18:00 बजे डिलीवर किया गया
  3. shipments[0] को 18:07 बजे डिलीवर किया गया

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

अगर shipment[1] की विंडो को कई घंटे बाद (18:00 से 21: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 प्रॉपर्टी में एक नई कुंजी भी शामिल की गई है. इससे, प्रॉडक्ट की समस्या और डिलीवरी विंडो में हुई देरी के आधार पर, असल लागत का पता चलता है. यानी:

  • 2.0 में से costPerHourBeforeSoftStartTime और
  • डिलीवरी के असल समय और समयसीमा के शुरू होने के बीच का समय: 2.83583 घंटे

नतीजा:

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

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