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
}
}
}