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

रूट ऑप्टिमाइज़ेशन एपीआई, वाहनों के लिए रास्तों की जानकारी देता है अनुरोध. शिपमेंट, वाहनों को असाइन किए जाते हैं या अनुरोध की प्रॉपर्टी पर जाएं.

किसी 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 तब सही होता है, जब कोई विज़िट एक पिकअप होती है. वहीं, जब कोई विज़िट किसी डिलीवरी. वैल्यू की गलत वैल्यू होने पर, 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 शुरू करें. इस अवधि के start_time की वजह से, ऐसा हो सकता है Visit का अनुसरण कर रहा है.
  • totalDuration, ट्रांज़िशन की कुल अवधि है. इसमें यात्रा, इंतज़ार, ब्रेक, और देरी का समय.
  • vehicleLoads, इस ट्रांज़िशन के दौरान वाहन में ले जाए जाने वाले लोड की मात्रा के हिसाब से, लोड टाइप को मैप करता है.

Transition का उदाहरण कुछ ऐसा दिखता है:

{
  "routes": [
    {
      ...
      "transitions": [
        ...
        {
          "travelDuration": "1171s",
          "travelDistanceMeters": 9004,
          "waitDuration": "0s",
          "totalDuration": "1171s",
          "startTime": "2024-02-13T00:00:00Z"
        },
        ...
      ],
      ...
    }
  ],
  ...
}

vists और transitions के बीच के संबंध के बारे में इसमें बताया गया है पिकअप और डिलीवरी स्टॉप ऑर्डर ऑप्टिमाइज़ेशन. साथ ही, ShipmentRoute रेफ़रंस दस्तावेज़ (REST, gRPC).

मेट्रिक प्रॉपर्टी

Metrics मैसेज (REST, gRPC) में पूरे समाधान की खास जानकारी होती है. Metrics की कुछ ज़रूरी प्रॉपर्टी में ये शामिल हैं:

  • totalCost, रास्तों को पूरा करने में हुई कुल लागत है. ज़्यादा पढ़ें लागत मॉडल पैरामीटर में लागत के बारे में जानकारी.
  • usedVehicleCount, समाधान में इस्तेमाल की गई गाड़ियों की कुल संख्या है. जब ऑप्टिमाइज़र यह तय करता है कि वाहनों का इस्तेमाल किया जाएगा, तब वाहनों के लिए रास्ते खाली हो सकते हैं की ज़रूरत नहीं है.
  • skippedMandatoryShipmentCount स्किप किए गए उन शिपमेंट की संख्या है जो "ज़रूरी है." ज़रूरी शिपमेंट में 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
    }
  }
}