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

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. नहीं तो, skippedMandatoryShipmentCount प्रॉपर्टी OptimizeToursResponse मैसेज (REST, gRPC) बढ़ जाता है.

अगर आप 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 में दिखता है.

सॉफ़्ट टाइम विंडो कंस्ट्रेंट

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

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

इसके बजाय, softStartTime या softEndTime का इस्तेमाल करने पर टाइम विंडो कम हो जाती हैं startTime या endTime और सेटिंग के हिसाब से 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 से कम. ऑप्टिमाइज़र ने शिपमेंट को जल्दी डिलीवर करना ज़्यादा किफ़ायती है शिपमेंट को छोड़कर आगे बढ़ें.