Route Optimization API, अनुरोध में शामिल वाहनों के लिए रास्ते दिखाता है. शिपमेंट को वाहनों को असाइन किया जाता है या अनुरोध की प्रॉपर्टी के आधार पर उन्हें स्किप किया जा सकता है.
OptimizeToursResponse मैसेज (REST, gRPC) में दो मुख्य टॉप-लेवल प्रॉपर्टी होती हैं:
routes[], हर वाहन के लिए तय किए गए रास्ते हैं. इनमें असाइन किए गए शिपमेंट की जानकारी भी शामिल है. हरRouteमें, उस रूट की प्रॉपर्टी दिखाने वाली मेट्रिक होती हैं.metrics, पूरे जवाब के लिए इकट्ठा की गई मेट्रिक होती हैं. ये सभी वाहनों और रूट प्लान के लिए होती हैं. टॉप-लेवल की मेट्रिक में, रूट के हिसाब से मेट्रिक वाली प्रॉपर्टी शामिल होती हैं. हालांकि, इनकी वैल्यू सभी रूट के लिए इकट्ठा की जाती हैं.
ऑप्टिमाइज़ेशन के नतीजों के आधार पर, हो सकता है कि कुछ प्रॉपर्टी हमेशा न भरी जाएं:
skippedShipments[]उन शिपमेंट को लिस्ट करता है जिन्हें किसी वाहन से नहीं किया जाता है. अगर शिपमेंट, तय की गई शर्तों के मुताबिक नहीं किया जा सकता या शिपमेंट करने का शुल्क, जुर्माने के शुल्क से ज़्यादा है, तो शिपमेंट को स्किप किया जा सकता है. उदाहरण के लिए, अगर किसी शिपमेंट के पिकअप या डिलीवरी के लिएtimeWindowबहुत कम है, तो हो सकता है कि वाहन के लिए तय समय में वहां पहुंचना मुमकिन न हो या वह ज़्यादा महंगा पड़े.validationErrors[]उन गड़बड़ियों के बारे में बताता है जिनकी वजह से अनुरोध अमान्य हो जाता है या अनुरोध केsolvingModeकोVALIDATE_ONLYपर सेट करने पर, उन्हें ठीक नहीं किया जा सकता. सामान्यDEFAULT_SOLVEमोड में, पुष्टि करने से जुड़ी गड़बड़ियां, जवाब के मुख्य हिस्से के बजाय गड़बड़ी के मैसेज में दिखेंगी. ध्यान दें किVALIDATE_ONLYसॉल्विंग मोड में, एक साथ कई गड़बड़ियों की जानकारी दी जा सकती है. इससे अनुरोधों को तुरंत डीबग करने में मदद मिलती है.
रास्ते की प्रॉपर्टी
हर routes[] एंट्री, ShipmentRoute मैसेज (REST, gRPC) होती है. हर ShipmentRoute, अनुरोध में शामिल किसी वाहन के लिए रूट असाइनमेंट दिखाता है. इससे जुड़ी ShipmentRouteVehicle प्रॉपर्टी में ये शामिल हैं:
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,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 में, 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
}
}
}