এই নির্দেশিকা 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]
, উদাহরণস্বরূপ, 60 weightKg
লোড রয়েছে, যা shipment[0]
এবং shipment[1]
।
মেট্রিক্স অবজেক্টের routes[0].metrics
এবং metrics.aggregatedRouteMetrics
একটি maxLoads
বৈশিষ্ট্য অন্তর্ভুক্ত করে। টাইপ weightKg
এর মান হল 80, যা যানবাহনের রুটের অংশের প্রতিনিধিত্ব করে যেটি shipments[2]
তার ডেলিভারি লোকেশনে পরিবহণ করে।
নরম লোড সীমা সীমাবদ্ধতা
পিকআপ এবং ডেলিভারি টাইম উইন্ডো সীমাবদ্ধতায় বর্ণিত টাইম উইন্ডোগুলির মতো, লোড সীমা সীমাবদ্ধতার কঠোর এবং নরম রূপ রয়েছে। LoadLimit
বার্তার maxLoad
বৈশিষ্ট্য একটি কঠিন সীমাবদ্ধতা প্রকাশ করে: যানবাহনকে কখনই নির্দিষ্ট প্রকারে maxLoad
মানের বেশি লোড বহন করা উচিত নয়। বৈশিষ্ট্য softMaxLoad
এবং costPerUnitAboveSoftMax
একটি নরম সীমাবদ্ধতা প্রকাশ করে, প্রতিটি ইউনিট softMaxLoad
অতিক্রম করে একটি costPerUnitAboveSoftMax
খরচ বহন করে।
নরম লোড সীমা সীমাবদ্ধতার বিভিন্ন ব্যবহার রয়েছে, যেমন:
- ন্যূনতম সংখ্যার চেয়ে বেশি যানবাহন জুড়ে চালানের ভারসাম্য বজায় রাখা যখন এটি করা সাশ্রয়ী হয়
- আইটেম সংখ্যার জন্য ড্রাইভার পছন্দ প্রকাশ করে তারা আরামে একটি নির্দিষ্ট রুটে পিকআপ এবং বিতরণ করতে পারে
- পরিধান সীমিত করতে এবং রক্ষণাবেক্ষণের খরচ কমাতে তাদের সর্বোচ্চ শারীরিক ক্ষমতার নিচে যানবাহন লোড করা
হার্ড এবং নরম লোড সীমাবদ্ধতা একসাথে ব্যবহার করা যেতে পারে। উদাহরণ স্বরূপ, একটি হার্ড লোড সীমা একটি যানবাহন নিরাপদে বহন করতে পারে এমন কার্গোর সর্বোচ্চ ওজন বা এক সময়ে একটি গাড়িতে ফিট করা আইটেমের সর্বাধিক সংখ্যা প্রকাশ করতে পারে, যখন একটি নরম লোড সীমা হতে পারে সর্বাধিক ওজন বা আইটেমের সংখ্যা গাড়ির মধ্যে সবকিছু ফিট করার জন্য ড্রাইভারের ক্ষমতার উপর ট্যাক্স করবে।