Route Optimization API, अनुरोध में शामिल वाहनों के लिए रास्ते दिखाता है. शिपमेंट को वाहनों को असाइन किया जाता है या अनुरोध की प्रॉपर्टी के आधार पर उन्हें स्किप किया जा सकता है.
OptimizeToursResponse मैसेज (REST, gRPC) में दो मुख्य टॉप-लेवल प्रॉपर्टी होती हैं:
- routes[]हर वाहन के लिए, असाइन किए गए शिपमेंट के हिसाब से तय किए गए रास्ते होते हैं. हर- Routeमें, उस रूट की प्रॉपर्टी दिखाने वाली मेट्रिक होती हैं.
- metrics, पूरे रिस्पॉन्स के लिए एग्रीगेट की गई मेट्रिक होती हैं. ये सभी वाहनों और रूट प्लान के लिए होती हैं. टॉप-लेवल की मेट्रिक में, रूट के हिसाब से मेट्रिक वाली प्रॉपर्टी शामिल होती हैं. हालांकि, इनकी वैल्यू सभी रूट के लिए एग्रीगेट की जाती हैं.
ऑप्टिमाइज़ेशन के नतीजों के आधार पर, हो सकता है कि कुछ प्रॉपर्टी हमेशा न भरी जाएं:
- skippedShipments[]उन शिपमेंट की जानकारी देता है जिन्हें किसी वाहन से नहीं भेजा जाता. अगर शिपिंग, तय की गई शर्तों के मुताबिक नहीं की जा सकती या शिपिंग का शुल्क, पेनल्टी के शुल्क से ज़्यादा है, तो शिपिंग को स्किप किया जा सकता है. उदाहरण के लिए, अगर किसी शिपमेंट के पिकअप या डिलीवरी के लिए- timeWindowबहुत कम है, तो हो सकता है कि वाहन के लिए तय समय में पिकअप या डिलीवरी करना मुमकिन न हो या यह किफ़ायती न हो.
- validationErrors[]उन गड़बड़ियों के बारे में बताता है जिनकी वजह से अनुरोध अमान्य हो जाता है या अनुरोध के- solvingModeको- VALIDATE_ONLYपर सेट करने के बाद, उन्हें ठीक नहीं किया जा सकता. सामान्य- DEFAULT_SOLVEमोड में, पुष्टि करने से जुड़ी गड़बड़ियां, जवाब के मुख्य हिस्से के बजाय गड़बड़ी के मैसेज में दिखेंगी. ध्यान दें कि- VALIDATE_ONLYहल करने वाले मोड में, एक साथ कई गड़बड़ियों की जानकारी दी जा सकती है. यह अनुरोधों को तुरंत डीबग करने के लिए फ़ायदेमंद है.
रास्ते की प्रॉपर्टी
हर routes[] एंट्री, ShipmentRoute मैसेज (REST, gRPC) होती है. हर ShipmentRoute, अनुरोध में शामिल किसी वाहन के लिए रूट असाइनमेंट दिखाता है. इससे जुड़ी ShipmentRoute प्रॉपर्टी की अहम जानकारी में ये शामिल हैं:Vehicle
- vehicleIndex, अनुरोध के मैसेज में मौजूद- Vehicleका ज़ीरो-आधारित इंडेक्स है. जब वैल्यू शून्य होती है, तब REST रिस्पॉन्स में इस प्रॉपर्टी को शामिल नहीं किया जाता.
- vehicleStartTimeवह समय है जब वाहन को अपना रास्ता शुरू करना होगा.
- vehicleEndTimeवह समय है जब वाहन के अपने रास्ते पर चलने की प्रोसेस पूरी होने की उम्मीद है.
जवाब में, routes इस तरह दिखेगा:
{
  "routes": [
    {
      "vehicleStartTime": "2024-02-13T00:00:00Z",
      "vehicleEndTime": "2024-02-13T00:38:42Z",
      "visits": [
        ...
      ],
      "transitions": [
        ...
      ],
      "metrics": {
        ...
      },
      ...
    }
  ],
  ...
}
हर ShipmentRoute में, visits की क्रम से लगाई गई सूची शामिल होती है. वाहन को ये visits पूरे करने होते हैं. हर Visit (REST, gRPC), अनुरोध से मिले VisitRequest
(REST, gRPC) को दिखाता है. ज़रूरी Visit
प्रॉपर्टी में ये शामिल हैं:
- shipmentIndex, शिपमेंट का ज़ीरो-आधारित इंडेक्स है. यह विज़िट, अनुरोध में शामिल शिपमेंट से जुड़ी है.
- अगर विज़िट पिकअप के लिए है, तो isPickupकी वैल्यू सही होती है. अगर विज़िट डिलीवरी के लिए है, तो इसकी वैल्यू गलत होती है. अगर वैल्यू 'गलत' है, तो REST रिस्पॉन्स में इस प्रॉपर्टी को शामिल नहीं किया जाता.
- visitRequestIndex,- VisitRequestका ज़ीरो-आधारित इंडेक्स है. यह- Shipment.pickupsया- Shipment.deliveriesसे मिलता है. यह इंडेक्स, अनुरोध में मौजूद उस- Visitको दिखाता है. अगर वैल्यू शून्य है, तो REST रिस्पॉन्स में इस प्रॉपर्टी को शामिल नहीं किया जाता.
- startTimeवह समय है जब विज़िट शुरू होने का अनुमान है.
- loadDemands,- Visitको पूरा करने के लिए, मांगी गई रकम को लोड करने के लिए मैप लोड टाइप करता है. डिलीवरी के लिए की गई विज़िट के लिए, लोड की मात्रा नेगेटिव होती है. इससे पता चलता है कि वाहन से लोड हटाया जा रहा है.
Visit का एक उदाहरण यहां दिया गया है:
{
  "routes": [
    {
      ...
      "visits": [
        {
          "isPickup": true,
          "startTime": "2024-02-13T00:00:00Z",
          "detour": "0s"
        },
        ...
      ],
    },
    ...
  ],
  ...
}
हर ShipmentRoute में, transitions की क्रम से लगाई गई सूची शामिल होती है. यह सूची, किसी वाहन के लिए visits के बीच की यात्रा को दिखाती है. अहम Transition मैसेज की प्रॉपर्टी में ये शामिल हैं:
(REST, gRPC):
- startTimeवह समय है जब वाहन, ट्रांज़िशन करना शुरू करेगा.
- travelDurationवह अवधि है जिसके दौरान वाहन को ट्रांज़िशन पूरा करने के लिए यात्रा करनी होगी.
- travelDistanceMetersमीटर वह दूरी है जो वाहन को लेन बदलने के लिए तय करनी होगी.
- trafficInfoUnavailableसे पता चलता है कि ट्रांज़िशन के लिए ट्रैफ़िक डेटा उपलब्ध है या नहीं.
- waitDurationसे पता चलता है कि वाहन को अगले- Visitको शुरू करने से पहले, कितने समय तक इंतज़ार करना पड़ा. यह शुल्क, यहां दी गई- Visitके- start_timeकी वजह से लग सकता है.
- totalDurationट्रांज़िशन की कुल अवधि है. इसमें यात्रा, इंतज़ार, ब्रेक, और देरी का समय शामिल है.
- vehicleLoadsमैप लोड टाइप, इस ट्रांज़िशन के दौरान वाहन में मौजूद लोड की जानकारी दिखाता है.
Transition का एक उदाहरण यहां दिया गया है:
{
  "routes": [
    {
      ...
      "transitions": [
        ...
        {
          "travelDuration": "1171s",
          "travelDistanceMeters": 9004,
          "waitDuration": "0s",
          "totalDuration": "1171s",
          "startTime": "2024-02-13T00:00:00Z"
        },
        ...
      ],
      ...
    }
  ],
  ...
}
vists और transitions के बीच के संबंध के बारे में ज़्यादा जानने के लिए, पिकअप और डिलीवरी स्टॉप ऑर्डर ऑप्टिमाइज़ेशन और ShipmentRoute रेफ़रंस दस्तावेज़ (REST, gRPC) देखें. Transition मैसेज की routePolyline और routeToken प्रॉपर्टी के बारे में ज़्यादा जानने के लिए, ट्रांज़िशन पॉलीलाइन और रूट टोकन देखें.
मेट्रिक प्रॉपर्टी
Metrics मैसेज (REST, gRPC) में पूरे समाधान के बारे में खास जानकारी दी गई है.
कुछ ज़रूरी Metrics प्रॉपर्टी में ये शामिल हैं:
- totalCost, रास्तों को पूरा करने में आने वाली कुल लागत है. लागत मॉडल के पैरामीटर में लागत के बारे में ज़्यादा पढ़ें.
- usedVehicleCount, इस समस्या को हल करने के लिए इस्तेमाल किए गए वाहनों की कुल संख्या है. ऑप्टिमाइज़र को लगता है कि किसी वाहन का इस्तेमाल ज़रूरी नहीं है, तो हो सकता है कि उसके रूट में कोई काम न हो.
- skippedMandatoryShipmentCount, स्किप किए गए उन शिपमेंट की संख्या है जिन्हें "ज़रूरी" के तौर पर मार्क किया गया है. ज़रूरी शिपमेंट के लिए,- penaltyCostकी जानकारी नहीं दी गई है. यह शुल्क तब लगता है, जब शिपमेंट को छोड़ दिया जाता है. अगर तय की गई शर्तों के मुताबिक, ज़रूरी शिपमेंट की परफ़ॉर्मेंस अच्छी नहीं है, तो उन्हें अब भी स्किप किया जा सकता है. लागत मॉडल के पैरामीटर में लागत के बारे में ज़्यादा पढ़ें.
अन्य मेट्रिक को AggregatedMetrics मैसेज (REST,
gRPC) के तौर पर रिपोर्ट किया जाता है. AggregatedMetrics मैसेज टाइप का इस्तेमाल Metrics.aggregatedRouteMetrics प्रॉपर्टी के लिए किया जाता है. साथ ही, ShipmentRoute.metrics प्रॉपर्टी के लिए Metrics.aggregatedRouteMetrics में मौजूद सभी ShipmentRoute से इकट्ठा की गई मेट्रिक शामिल होती हैं.OptimizeToursResponse हर ShipmentRoute.metrics प्रॉपर्टी में, उस ShipmentRoute के लिए मेट्रिक शामिल होती हैं.
AggregatedMetrics प्रॉपर्टी में ये शामिल हैं:
- performedShipmentCount, वाहनों के पूरे रूट पर किए गए शिपमेंट की संख्या है.
- travelDuration, वह कुल समय है जो वाहनों को अपने रूट पूरे करने के दौरान लगता है.
- waitDurationवह कुल समय है जब वाहन अपने रूट पूरे करते समय इंतज़ार करते हैं.
- delayDuration, वाहनों के लिए कुल देरी का समय है. आम तौर पर, यह शून्य होता है. हालांकि, अगर अनुरोध में- TransitionAttributesका इस्तेमाल किया जाता है, तो यह शून्य नहीं होता.
- breakDuration, वाहनों के ब्रेक लेने का कुल समय है. यह समय, वाहनों के रूट पूरा करने के दौरान लिया जाता है.
- visitDurationवह कुल समय है जब वाहन, अपने रूट पूरे करते समय विज़िट करते हैं. यह, लागू होने वाले वाहन को असाइन किए गए- Visitके लिए,- VisitRequestसे जुड़े सभी- VisitRequest.durationकी कुल वैल्यू होती है.
- totalDuration, वाहनों के रूट पूरे करने में लगने वाला कुल समय है.
- travelDistanceMeters, वाहनों से तय की गई कुल दूरी है. यह दूरी, वाहनों के रूट पूरे करने के दौरान तय की जाती है.
- maxLoads, वाहनों के रूट पर किसी भी समय ले जाए जा सकने वाले ज़्यादा से ज़्यादा सामान के हिसाब से, मैप पर लोड टाइप दिखाता है.
Metrics मैसेज का उदाहरण यहां दिया गया है:
{
  "routes": [
    ...
  ],
  "metrics": {
    "aggregatedRouteMetrics": {
      "performedShipmentCount": 1,
      "travelDuration": "2322s",
      "waitDuration": "0s",
      "delayDuration": "0s",
      "breakDuration": "0s",
      "visitDuration": "0s",
      "totalDuration": "2322s",
      "travelDistanceMeters": 18603
    },
    "usedVehicleCount": 1,
    "earliestVehicleStartTime": "2024-02-13T00:00:00Z",
    "latestVehicleEndTime": "2024-02-13T00:38:42Z",
    "totalCost": 18.603,
    "costs": {
      "model.vehicles.cost_per_kilometer": 18.603
    }
  }
}
पूरा उदाहरण
अनुरोध तैयार करें के लिए, जवाब का पूरा उदाहरण यहां दिया गया है:
{
  "routes": [
    {
      "vehicleStartTime": "2024-02-13T00:00:00Z",
      "vehicleEndTime": "2024-02-13T00:38:42Z",
      "visits": [
        {
          "isPickup": true,
          "startTime": "2024-02-13T00:00:00Z",
          "detour": "0s"
        },
        {
          "startTime": "2024-02-13T00:19:31Z",
          "detour": "0s"
        }
      ],
      "transitions": [
        {
          "travelDuration": "0s",
          "waitDuration": "0s",
          "totalDuration": "0s",
          "startTime": "2024-02-13T00:00:00Z"
        },
        {
          "travelDuration": "1171s",
          "travelDistanceMeters": 9004,
          "waitDuration": "0s",
          "totalDuration": "1171s",
          "startTime": "2024-02-13T00:00:00Z"
        },
        {
          "travelDuration": "1151s",
          "travelDistanceMeters": 9599,
          "waitDuration": "0s",
          "totalDuration": "1151s",
          "startTime": "2024-02-13T00:19:31Z"
        }
      ],
      "metrics": {
        "performedShipmentCount": 1,
        "travelDuration": "2322s",
        "waitDuration": "0s",
        "delayDuration": "0s",
        "breakDuration": "0s",
        "visitDuration": "0s",
        "totalDuration": "2322s",
        "travelDistanceMeters": 18603
      },
      "routeCosts": {
        "model.vehicles.cost_per_kilometer": 18.603
      },
      "routeTotalCost": 18.603
    }
  ],
  "metrics": {
    "aggregatedRouteMetrics": {
      "performedShipmentCount": 1,
      "travelDuration": "2322s",
      "waitDuration": "0s",
      "delayDuration": "0s",
      "breakDuration": "0s",
      "visitDuration": "0s",
      "totalDuration": "2322s",
      "travelDistanceMeters": 18603
    },
    "usedVehicleCount": 1,
    "earliestVehicleStartTime": "2024-02-13T00:00:00Z",
    "latestVehicleEndTime": "2024-02-13T00:38:42Z",
    "totalCost": 18.603,
    "costs": {
      "model.vehicles.cost_per_kilometer": 18.603
    }
  }
}