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

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 की क्रम से लगाई गई सूची शामिल होती है, जो वाहन के लिए पूरी की जाएगी. हर Visit (REST, gRPC), उससे जुड़े अनुरोध से VisitRequest (REST, gRPC) को दिखाता है. ज़रूरी Visit प्रॉपर्टी में ये शामिल हैं:

  • shipmentIndex, उस शिपमेंट का शून्य-आधारित इंडेक्स है जिससे यह विज़िट जुड़ी है.
  • अगर विज़िट के दौरान प्रॉडक्ट पिकअप किया जाता है, तो isPickup की वैल्यू 'सही' होगी. अगर विज़िट के दौरान प्रॉडक्ट डिलीवर किया जाता है, तो isPickup की वैल्यू 'गलत' होगी. अगर वैल्यू गलत है, तो REST रिस्पॉन्स में इस प्रॉपर्टी को शामिल नहीं किया जाता.
  • visitRequestIndex, Visit के ज़रिए दिखाए गए अनुरोध में, Shipment.pickups या Shipment.deliveries से VisitRequest का शून्य-आधार वाला इंडेक्स है. अगर वैल्यू शून्य है, तो 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 की जानकारी नहीं दी जाती है. शिपमेंट न करने पर, यह penaltyCost लागू होता है. अगर तय की गई सीमाओं के तहत, ज़रूरी शिपमेंट की परफ़ॉर्मेंस अच्छी नहीं है, तो उन्हें छोड़ा जा सकता है. लागत मॉडल पैरामीटर में लागत के बारे में ज़्यादा पढ़ें.

अन्य मेट्रिक को AggregatedMetrics मैसेज (REST, gRPC) के तौर पर रिपोर्ट किया जाता है. AggregatedMetrics मैसेज टाइप का इस्तेमाल Metrics.aggregatedRouteMetrics प्रॉपर्टी के लिए किया जाता है. साथ ही, ShipmentRoute.metrics प्रॉपर्टी के लिए Metrics.aggregatedRouteMetrics में OptimizeToursResponse में मौजूद सभी ShipmentRoute से इकट्ठा की गई मेट्रिक शामिल होती हैं. हर 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
    }
  }
}