এই নির্দেশিকাটি 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 টাইপের ৫০টি লোড ইউনিট প্রয়োজন। লোড সহ একটি গাড়ির loadLimits :
"loadLimits": {
"weightKg": {
"maxLoad": 100
}
}
চালানটি সম্পন্ন করতে সক্ষম হতে পারে , কারণ weightKg টাইপের গাড়ির maxLoad চালানের 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]লোড সীমা ১০০weightKg।
লোড চাহিদা এবং সীমা সহ অনুরোধের প্রতিক্রিয়া দেখুন।
{ "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 খরচ হয়।
নরম লোড সীমা সীমাবদ্ধতার বেশ কয়েকটি ব্যবহার রয়েছে, যেমন:
- যখন সাশ্রয়ী মূল্যের হয়, তখন প্রয়োজনীয় ন্যূনতম সংখ্যার চেয়ে বেশি যানবাহনে চালানের ভারসাম্য বজায় রাখা
- নির্দিষ্ট রুটে কতগুলি জিনিসপত্র আরামে তুলতে এবং ডেলিভারি করতে পারবেন তার সংখ্যার উপর ড্রাইভারের পছন্দ প্রকাশ করা
- ক্ষয়ক্ষতি সীমিত করতে এবং রক্ষণাবেক্ষণ খরচ কমাতে যানবাহনগুলিকে তাদের সর্বোচ্চ শারীরিক ক্ষমতার নীচে লোড করা
হার্ড এবং নরম লোড লিমিট সীমাবদ্ধতা একসাথে ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, একটি হার্ড লোড লিমিট একটি যানবাহন নিরাপদে বহন করতে পারে এমন সর্বাধিক ওজন বা এক সময়ে একটি গাড়িতে ফিট করা যাবে এমন সর্বাধিক সংখ্যক জিনিসপত্র প্রকাশ করতে পারে, যখন একটি নরম লোড লিমিট হতে পারে সর্বোচ্চ ওজন বা জিনিসপত্রের সংখ্যা যা গাড়ির সবকিছু ফিট করার জন্য চালকের ক্ষমতার উপর নির্ভর করে।