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