जवाब को समझने का तरीका

यूरोपियन इकनॉमिक एरिया (ईईए) के डेवलपर

Route Optimization API, अनुरोध के हिसाब से वाहनों के लिए रास्ते दिखाता है. शिपमेंट को वाहनों को असाइन किया जाता है या अनुरोध की प्रॉपर्टी के आधार पर उन्हें स्किप किया जा सकता है.

OptimizeToursResponse मैसेज (REST, gRPC) में दो मुख्य टॉप-लेवल प्रॉपर्टी होती हैं:

  • routes[] हर वाहन के लिए, असाइन किए गए शिपमेंट के हिसाब से तय किए गए रास्ते होते हैं. हर Route में, उस रूट की प्रॉपर्टी दिखाने वाली मेट्रिक होती हैं.
  • metrics, पूरे रिस्पॉन्स के लिए एग्रीगेट की गई मेट्रिक होती हैं. ये सभी वाहनों और रूट प्लान के लिए होती हैं. टॉप-लेवल की मेट्रिक में, रूट के हिसाब से मेट्रिक वाली प्रॉपर्टी शामिल होती हैं. हालांकि, इनकी वैल्यू सभी रूट के लिए एग्रीगेट की जाती हैं.

ऑप्टिमाइज़ेशन के नतीजों के आधार पर, हो सकता है कि कुछ प्रॉपर्टी हमेशा न भरी जाएं:

  1. skippedShipments[] उन शिपमेंट की जानकारी देता है जिन्हें किसी वाहन से नहीं भेजा जाता. अगर शिपिंग, तय की गई शर्तों के मुताबिक नहीं की जा सकती या शिपिंग का शुल्क, पेनल्टी के शुल्क से ज़्यादा है, तो शिपिंग को स्किप किया जा सकता है. उदाहरण के लिए, अगर किसी शिपमेंट के पिकअप या डिलीवरी के लिए timeWindow बहुत कम है, तो हो सकता है कि वाहन के लिए तय समय में पिकअप या डिलीवरी करना मुमकिन न हो या यह फ़ायदेमंद न हो.
  2. 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
    }
  }
}