इस गाइड में loadDemands
और loadLimits
के बारे में बताया गया है. साथ ही, यह भी बताया गया है कि ये दोनों एक-दूसरे से कैसे जुड़े हैं
अन्य.
जैसा कि पिकअप और डिलीवरी में लगने वाले समय की विंडो की सीमाएं सेक्शन में बताया गया है,
OptimizeToursRequest
मैसेज (REST, gRPC) में कई
प्रॉपर्टी जो ऑप्टिमाइज़ की जा रही समस्या पर सीमाओं को तय करती हैं. कई
OptimizeToursRequest
प्रॉपर्टी, लोड कंस्ट्रेंट के बारे में बताती हैं.
वाहनों और शिपमेंट के पास फ़िज़िकल प्रॉपर्टी होती हैं. इन्हें तब ज़रूर ध्यान में रखना चाहिए और कोई रास्ता प्लान कर रहा है.
- वाहन:
loadLimits
प्रॉपर्टी यह बताती है कि वाहन संभाल सकते हैं.Vehicle
मैसेज का देखें (REST, gRPC) दस्तावेज़. - शिपमेंट:
loadDemands
प्रॉपर्टी से पता चलता है कि किसी दिए गए पैकेज में कितना लोड होगा शिपिंग में लगने वाला खर्च.Shipment
मैसेज का देखें (REST, gRPC) दस्तावेज़.
ये दोनों प्रतिबंध एक साथ मिलकर, ऑप्टिमाइज़र के लिए वाहनों को ऐसे तरीके से शिपमेंट असाइन करना जो सबसे ज़्यादा मिलते-जुलते हों शिपिंग की ज़रूरतें पूरी करने में मदद मिलती है.
इस दस्तावेज़ के बाकी हिस्से में, loadLimits
और loadDemands
के बारे में विस्तार से चर्चा की गई है.
लोड की मांग और उनकी सीमाएं: टाइप
कॉन्टेंट लोड करने की हर ज़रूरत और उसकी सीमा की सीमा को टाइप के हिसाब से बताया जाता है.
अपने हिसाब से लोड का सेट दिया जा सकता है. इसके लिए, यहां कुछ उदाहरण दिए गए हैं:
- वज़न का डेटा
- आवाज़
- लीनियर मेज़रमेंट
- ट्रांसपोर्ट किए जा रहे आइटम या उपकरणों के नाम
इस गाइड में, weightKg
का इस्तेमाल उदाहरण के तौर पर किया गया है.
Shipment.loadDemands
और Vehicle.loadLimits
, दोनों प्रोटोकॉल बफ़र का इस्तेमाल करते हैं
map
टाइप, जिसमें string
कुंजियां, लोड के टाइप के बारे में बताती हैं.
Shipment.loadDemands
वैल्यू, Load
मैसेज (REST, gRPC) का इस्तेमाल करती हैं.
Load
मैसेज में एक amount
प्रॉपर्टी है, जो दिखाती है कि कितनी क्षमता है
दिए गए टाइप में शिपमेंट पूरा करने के लिए ज़रूरी है.
Vehicle.loadLimits
वैल्यू के लिए, LoadLimit
मैसेज (REST,
gRPC). LoadLimit
मैसेज में maxLoad
की कई प्रॉपर्टी मौजूद हैं
बताए गए टाइप के हिसाब से, वाहन में लोड करने की ज़्यादा से ज़्यादा क्षमता हो.
किसी शिपमेंट का loadDemands
, असाइन किए गए वाहन के loadLimits
का इस्तेमाल सिर्फ़ तब करता है, जब
दोनों में लोड टाइप की मैच करने वाली कुंजियां हैं. उदाहरण के लिए,
इसमें से loadDemands
:
"loadDemands": {
"weightKg": {
"amount": 50
}
}
शिपिंग के लिए, weightKg
टाइप में 50 लोड यूनिट की ज़रूरत होती है
पूरा हुआ. एक वाहन, जिसमें loadLimits
हैं:
"loadLimits": {
"weightKg": {
"maxLoad": 100
}
}
शिपिंग को पूरा किया जा सकता है, क्योंकि वाहन का maxLoad
weightKg
प्रकार, शिपमेंट के loadDemands
से ज़्यादा या उसके बराबर है
weightKg
टाइप के हिसाब से. हालांकि, loadLimits
वाला एक वाहन:
"loadLimits": {
"equipmentRackStorage": {
"maxLoad": 10
}
}
इसमें साफ़ तौर पर, अनलिमिटेड weightKg
कपैसिटी है, क्योंकि
लोड सीमा weightKg
है, इसलिए वाहन पर शिपमेंट की पाबंदी नहीं है
सही वज़न हासिल करने की कोशिश करते हैं.
शिपमेंट और वाहनों के बीच ट्रांसफ़र लोड करें
जब शिपमेंट को वाहनों से ले जाया जाता है और उन्हें डिलीवर किया जाता है, तो
loadDemand
, शिपमेंट और वाहन के बीच ट्रांसफ़र होता है. यहां दी गई जानकारी देखने के लिए,
OptimizeToursResponse
मैसेज के (REST,
gRPC)routes.transitions
किसी दिए गए वाहन के लिए एंट्री. क्रम ऐसा है
अनुसरण करता है:
- शिपमेंट के लिए ज़रूरी लोड क्षमता को
loadDemand
के तौर पर बताया गया है. - शिपमेंट को उसके लिए असाइन किए गए वाहन और वाहन के पास ले जाया जाता है
vehicleLoads
, शिपमेंट केloadDemand
की मात्रा से बढ़ जाता है. यह ट्रांसफ़र के जवाब में, पॉज़िटिवvisits.loadDemands
दिखाया गया है दिखाई देगा. - वाहन, शिपमेंट को डिलीवर करता है और वाहन की
vehicleLoads
कम हो जाती है डिलीवर किए गए शिपमेंट केloadDemand
की रकम के हिसाब से. यह ट्रांसफ़र जिसे जवाब वाले मैसेज में नेगेटिवvisits.loadDemands
के तौर पर दिखाया गया है.
वाहन का vehicleLoads
, किसी भी समय अपने बताए गए loadLimits
से ज़्यादा नहीं हो सकता
अपने रास्ते पर.
लोड करने की ज़रूरतों और सीमाओं के साथ एक बेहतर उदाहरण
लोड करने की ज़रूरत के साथ उदाहरण के तौर पर दिए गए अनुरोध देखें और सीमाएं
{ "populatePolylines": false, "populateTransitionPolylines": false, "model": { "globalStartTime": "2023-01-13T16:00:00Z", "globalEndTime": "2023-01-14T16:00:00Z", "shipments": [ { "deliveries": [ { "arrivalLocation": { "latitude": 37.789456, "longitude": -122.390192 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 100.0, "loadDemands": { "weightKg": { "amount": 50 } } }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.789116, "longitude": -122.395080 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 15.0, "loadDemands": { "weightKg": { "amount": 10 } } }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.795242, "longitude": -122.399347 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 50.0, "loadDemands": { "weightKg": { "amount": 80 } } } ], "vehicles": [ { "endLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "startLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "costPerHour": 40.0, "costPerKilometer": 10.0, "loadLimits": { "weightKg": { "maxLoad": 100 } } } ] } }
उदाहरण अनुरोध में लोड से जुड़े कई पैरामीटर होते हैं:
shipments[0]
की लोड डिमांड 50weightKg
है.shipments[1]
की लोड डिमांड 10weightKg
है.shipments[2]
की लोड डिमांड 80weightKg
है.vehicles[0]
की लोड सीमा 100weightKg
है.
लोड डिमांड के साथ अनुरोध का जवाब देखें और सीमाएं
{ "routes": [ { "vehicleStartTime": "2023-01-13T16:00:00Z", "vehicleEndTime": "2023-01-13T16:43:27Z", "visits": [ { "isPickup": true, "startTime": "2023-01-13T16:00:00Z", "detour": "0s", "loadDemands": { "weightKg": { "amount": "50" } } }, { "shipmentIndex": 1, "isPickup": true, "startTime": "2023-01-13T16:02:30Z", "detour": "150s", "loadDemands": { "weightKg": { "amount": "10" } } }, { "startTime": "2023-01-13T16:08:55Z", "detour": "150s", "loadDemands": { "weightKg": { "amount": "-50" } } }, { "shipmentIndex": 1, "startTime": "2023-01-13T16:16:37Z", "detour": "343s", "loadDemands": { "weightKg": { "amount": "-10" } } }, { "shipmentIndex": 2, "isPickup": true, "startTime": "2023-01-13T16:27:07Z", "detour": "1627s", "loadDemands": { "weightKg": { "amount": "80" } } }, { "shipmentIndex": 2, "startTime": "2023-01-13T16:36:26Z", "detour": "0s", "loadDemands": { "weightKg": { "amount": "-80" } } } ], "transitions": [ { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-13T16:00:00Z", "vehicleLoads": { "weightKg": {} } }, { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-13T16:02:30Z", "vehicleLoads": { "weightKg": { "amount": "50" } } }, { "travelDuration": "235s", "travelDistanceMeters": 795, "waitDuration": "0s", "totalDuration": "235s", "startTime": "2023-01-13T16:05:00Z", "vehicleLoads": { "weightKg": { "amount": "60" } } }, { "travelDuration": "212s", "travelDistanceMeters": 791, "waitDuration": "0s", "totalDuration": "212s", "startTime": "2023-01-13T16:13:05Z", "vehicleLoads": { "weightKg": { "amount": "10" } } }, { "travelDuration": "380s", "travelDistanceMeters": 1190, "waitDuration": "0s", "totalDuration": "380s", "startTime": "2023-01-13T16:20:47Z", "vehicleLoads": { "weightKg": {} } }, { "travelDuration": "409s", "travelDistanceMeters": 1371, "waitDuration": "0s", "totalDuration": "409s", "startTime": "2023-01-13T16:29:37Z", "vehicleLoads": { "weightKg": { "amount": "80" } } }, { "travelDuration": "171s", "travelDistanceMeters": 665, "waitDuration": "0s", "totalDuration": "171s", "startTime": "2023-01-13T16:40:36Z", "vehicleLoads": { "weightKg": {} } } ], "metrics": { "performedShipmentCount": 3, "travelDuration": "1407s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "1200s", "totalDuration": "2607s", "travelDistanceMeters": 4812, "maxLoads": { "weightKg": { "amount": "80" } } }, "routeCosts": { "model.vehicles.cost_per_kilometer": 48.12, "model.vehicles.cost_per_hour": 28.966666666666665 }, "routeTotalCost": 77.086666666666659 } ], "metrics": { "aggregatedRouteMetrics": { "performedShipmentCount": 3, "travelDuration": "1407s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "1200s", "totalDuration": "2607s", "travelDistanceMeters": 4812, "maxLoads": { "weightKg": { "amount": "80" } } }, "usedVehicleCount": 1, "earliestVehicleStartTime": "2023-01-13T16:00:00Z", "latestVehicleEndTime": "2023-01-13T16:43:27Z", "totalCost": 77.086666666666659, "costs": { "model.vehicles.cost_per_hour": 28.966666666666665, "model.vehicles.cost_per_kilometer": 48.12 } } }
जोड़ी गई लोड सीमाएं visits
के क्रम को प्रभावित करती हैं:
shipment[0]
को पिक अप कर लिया गया हैshipment[1]
को पिक अप कर लिया गया हैshipment[0]
डिलीवर हो गया हैshipment[1]
डिलीवर हो गया हैshipment[2]
को पिक अप कर लिया गया हैshipment[2]
डिलीवर हो गया है
इस आदेश से पता चलता है कि वाहन से तीन शिपमेंट यहां नहीं लिए जा सकते:
उसी समय पर, क्योंकि उनका कुल loadDemands
, वाहन की
loadLimits
.
हर visits
एंट्री में, वाहन के लोड में होने वाला वह बदलाव शामिल होता है जो
Visit
को पूरा कर लिया है. पॉज़िटिव लोड वैल्यू, शिपमेंट लोड होने के समय को दिखाती हैं
नेगेटिव वैल्यू, शिपमेंट को अनलोड करने के बारे में बताती हैं.
हर transitions
एंट्री में,
Transition
. उदाहरण के लिए, transitions[2]
का weightKg
लोड 60 है,
यह shipment[0]
और shipment[1]
के मिले-जुले लोड को दिखाता है.
मेट्रिक ऑब्जेक्ट routes[0].metrics
और metrics.aggregatedRouteMetrics
में शामिल हैं
maxLoads
प्रॉपर्टी. weightKg
टाइप की वैल्यू 80 है, जो
वाहन के रास्ते का वह हिस्सा जो shipments[2]
को उसकी
डिलीवरी की जगह.
सॉफ़्ट लोड की सीमा की सीमाएं
जैसा कि पिकअप और डिलीवरी में लगने वाले समय की विंडो में बताया गया है
कंस्ट्रेंट, लोड करने की सीमा से जुड़ी पाबंदियों के लिए, हार्ड और सॉफ़्ट वैरिएंट होते हैं. कॉन्टेंट बनाने
LoadLimit
मैसेज की maxLoad
प्रॉपर्टी मुश्किल कंस्ट्रेंट दिखाती है:
वाहन में कभी भी, बताए गए समय में तय की गई maxLoad
वैल्यू से ज़्यादा लोड नहीं होना चाहिए
टाइप करें. प्रॉपर्टी softMaxLoad
और costPerUnitAboveSoftMax
धीमी रफ़्तार से जवाब देते हैं
कंस्ट्रेंट, जहां हर यूनिट softMaxLoad
से
costPerUnitAboveSoftMax
लागत.
सॉफ़्ट लोड की सीमा से जुड़ी पाबंदियों के कई फ़ायदे हैं. जैसे:
- शिपिंग के लिए तय की गई कम से कम संख्या से ज़्यादा वाहनों की शिपिंग के बीच संतुलन बनाना जब ऐसा करना किफ़ायती होता है.
- ड्राइवर की पसंद के हिसाब से यह बताना कि उपयोगकर्ता कितने आइटम चुन सकते हैं दिए गए रास्ते पर पिकअप और डिलीवरी पाएं
- पहनने की क्षमता को सीमित करने के लिए, ऐसे वाहनों को लोड करना जो अपनी तय क्षमता से कम हैं रखरखाव का खर्च कम करता है
हार्ड और सॉफ़्ट लोड लिमिट को एक साथ इस्तेमाल किया जा सकता है. उदाहरण के लिए, लोड की सीमा से पता चलता है कि वाहन सुरक्षित रूप से जितने कार्गो उठा सकता है या आइटम की ज़्यादा से ज़्यादा संख्या जो वाहन में एक बार में फ़िट हो सकते हैं, जबकि सॉफ़्ट लोड की सीमा, ज़्यादा से ज़्यादा वज़न या ऐसे सामान की संख्या हो सकती है जिन पर टैक्स लागू हो ड्राइवर की क्षमता की वजह से गाड़ी में हर चीज़ फ़िट हो सकती है.