इस गाइड में 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
}
}
शिपमेंट पूरा किया जा सकता है, क्योंकि weightKg
टाइप में वाहन का maxLoad
, weightKg
टाइप में शिपमेंट के loadDemands
से ज़्यादा या उसके बराबर है. हालांकि, loadLimits
वाले वाहन के लिए:
"loadLimits": {
"equipmentRackStorage": {
"maxLoad": 10
}
}
weightKg
लोड की सीमा न होने की वजह से, वाहन में अनलिमिटेड weightKg
क्षमता होती है. इसलिए, वाहन पर शिपमेंट के वज़न की पाबंदी नहीं होती.
शिपमेंट और वाहनों के बीच लोड ट्रांसफ़र
शिपमेंट को वाहनों से पिक अप और डिलीवर किया जाता है. इसलिए, शिपमेंट का loadDemand
, शिपमेंट और वाहन के बीच ट्रांसफ़र होता है. किसी वाहन के लिए, OptimizeToursResponse
मैसेज (REST,
gRPC)routes.transitions
एंट्री में वाहन के लोड देखे जा सकते हैं. क्रम इस तरह से है:
- शिपमेंट के लिए, ज़रूरी लोड क्षमता को
loadDemand
के तौर पर तय किया जाता है. - शिपमेंट को उसके लिए तय किए गए वाहन से पिक अप किया जाता है. साथ ही, वाहन के
vehicleLoads
में शिपमेंट केloadDemand
की रकम जुड़ जाती है. इस ट्रांसफ़र को जवाब वाले मैसेज में positivevisits.loadDemands
के तौर पर दिखाया जाता है. - वाहन, शिपमेंट डिलीवर करता है और डिलीवर किए गए शिपमेंट के
loadDemand
की रकम के हिसाब से, वाहन काvehicleLoads
कम हो जाता है. जवाब वाले मैसेज में, इस ट्रांसफ़र को नेगेटिव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
की लागत आती है.
लोड करने की तय सीमा की पाबंदियों का कई तरह से इस्तेमाल किया जा सकता है. जैसे:
- जब लागत कम हो, तो शिपमेंट को कम से कम ज़रूरी संख्या से ज़्यादा वाहनों में बांटना
- ड्राइवर की पसंद के हिसाब से, किसी रास्ते पर आराम से कितने आइटम पिकअप और डिलीवर किए जा सकते हैं
- वाहनों को उनकी ज़्यादा से ज़्यादा क्षमता से कम लोड करना, ताकि वे कम खराब हों और रखरखाव की लागत कम हो
लोड की सीमा से जुड़ी सख्त और नरम पाबंदियों का इस्तेमाल एक साथ किया जा सकता है. उदाहरण के लिए, हार्ड लोड लिमिट से यह पता चलता है कि वाहन में एक बार में ज़्यादा से ज़्यादा कितने आइटम या कितना कार्गो सुरक्षित तरीके से ले जाया जा सकता है. वहीं, सॉफ़्ट लोड लिमिट से यह पता चलता है कि वाहन में एक बार में ज़्यादा से ज़्यादा कितने आइटम या कितना कार्गो ले जाया जा सकता है.