इस गाइड में 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
जितनी बढ़ जाती है. जवाब वाले मैसेज में इस ट्रांसफ़र को पॉज़िटिव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
है.
सॉफ़्ट लोड सीमा वाले कंस्ट्रेंट के कई इस्तेमाल हैं, जैसे:
- कम से कम ज़रूरी संख्या से ज़्यादा वाहनों में शिपमेंट को संतुलित करना, जब ऐसा करना किफ़ायती हो
- ड्राइवर को प्राथमिकता देकर बताएं कि वे कितने सामान को आसानी से पिक अप कर सकते हैं और दिए गए रास्ते पर डिलीवर कर सकते हैं
- वाहनों को उनकी तय क्षमता से कम पर लोड करना. इससे, वाहनों के रखरखाव में लगने वाला खर्च कम हो जाता है
हार्ड और सॉफ़्ट लोड की सीमाओं की सीमा का एक साथ इस्तेमाल किया जा सकता है. उदाहरण के लिए, हार्ड लोड सीमा से यह पता चल सकता है कि वाहन सुरक्षित तरीके से कितना कार्गो ले जा सकता है. इसके अलावा, इससे यह भी पता चलता है कि एक बार में वाहन में कितने आइटम फ़िट हो सकते हैं. वहीं, सॉफ़्ट लोड सीमा में यह बताया जा सकता है कि वाहन में हर चीज़ को फ़िट करने के लिए, ड्राइवर की क्षमता पर कितना असर पड़ेगा.