Route Optimization API সংশ্লিষ্ট অনুরোধে থাকা গাড়ির জন্য রুট রিটার্ন করে। শিপমেন্ট, গাড়ির সাথে অ্যাসাইন করা হয় বা অনুরোধের প্রপার্টির উপর নির্ভর করে এড়িয়ে যাওয়া হতে পারে।
একটি OptimizeToursResponse মেসেজে (REST, gRPC) দুটি প্রধান টপ-লেভেল
প্রপার্টি থাকে:
routes[]হল প্রতিটি গাড়ির জন্য অ্যাসাইন করা শিপমেন্ট সহ রুট। প্রতিটিRoute-এ মেট্রিক থাকে যা সেই নির্দিষ্ট রুটের বৈশিষ্ট্য দেখায়।metricsহল সমগ্র উত্তরের জন্য একত্রিত মেট্রিক, যা সব গাড়ি ও রুট প্ল্যান জুড়ে থাকে। টপ-লেভেল মেট্রিক, পার-রুট মেট্রিকের মতো একই প্রপার্টি ধারণ করে, যার মান সব রুট জুড়ে একত্রিত করা হয়।
অপ্টিমাইজেশনের ফলাফলের উপর নির্ভর করে কিছু প্রপার্টি সবসময় পপুলেট নাও হতে পারে:
skippedShipments[]এমন শিপমেন্ট তালিকাভুক্ত করে যা কোনও ভেইকেল দ্বারা পারফর্ম করা হয় না। কোনও শিপমেন্ট নির্দিষ্ট সীমাবদ্ধতার মধ্যে করা না গেলে বা শিপমেন্ট করার খরচ তার পেনাল্টি খরচের চেয়ে বেশি হলে সেটি এড়ানো যেতে পারে। যেমন, কোনও শিপমেন্টের পিক-আপ বা ডেলিভারির জন্য খুব কম সময়timeWindowথাকলে, নির্ধারিত সময়সীমার মধ্যে কোনও গাড়ির পক্ষে সেখানে যাওয়া সম্ভব নাও হতে পারে অথবা সেটি খরচ সাপেক্ষ হতে পারে।validationErrors[]এমন সমস্যা নির্দিষ্ট করে যা অনুরোধটিকে ভুল করে দেয় অথবা অনুরোধেরsolvingModeVALIDATE_ONLYহিসেবে সেট করা থাকলে সমাধান করা অসম্ভব। সাধারণDEFAULT_SOLVEমোডে, যাচাইকরণ সংক্রান্ত সমস্যাগুলি উত্তর বডির পরিবর্তে একটি সমস্যার মেসেজে দেখানো হবে। মনে রাখবেন যেVALIDATE_ONLYসমাধানকারী মোড একসাথে একাধিক সমস্যার কথা জানাতে পারে, যা দ্রুত অনুরোধ ডিবাগ করার জন্য উপযোগী।
রুটের প্রপার্টি
প্রতিটি routes[] এন্ট্রি হল একটি ShipmentRoute মেসেজ (REST, gRPC)। প্রতিটি
ShipmentRoute অনুরোধ থেকে
কোনও নির্দিষ্ট গাড়ির জন্য রুট অ্যাসাইনমেন্ট দেখায়। গুরুত্বপূর্ণ ShipmentRoute প্রপার্টি যা এর সংশ্লিষ্ট
Vehicle অন্তর্ভুক্ত:
vehicleIndexহল সংশ্লিষ্ট অনুরোধ মেসেজেVehicle-এর জিরো-বেসড ইন্ডেক্স। ভ্যালু শূন্য হলে REST উত্তর এই প্রপার্টি বাদ দেয়।vehicleStartTimeহল সেই সময় যখন গাড়িটিকে অবশ্যই তার রুট শুরু করতে হবে।vehicleEndTimeহল সেই সময় যখন গাড়িটি তার রুট সম্পূর্ণ করবে বলে আশা করা হচ্ছে।
উত্তরে, routes এমন দেখতে হবে:
{
"routes": [
{
"vehicleStartTime": "2024-02-13T00:00:00Z",
"vehicleEndTime": "2024-02-13T00:38:42Z",
"visits": [
...
],
"transitions": [
...
],
"metrics": {
...
},
...
}
],
...
}
প্রতিটি ShipmentRoute-এ visits-এর একটি অর্ডার করা তালিকা অন্তর্ভুক্ত থাকে যা গাড়িটি
সম্পূর্ণ করবে। প্রতিটি Visit (REST, gRPC) সংশ্লিষ্ট অনুরোধ থেকে VisitRequest
(REST, gRPC) দেখায়। গুরুত্বপূর্ণ Visit
প্রপার্টির মধ্যে এগুলি অন্তর্ভুক্ত:
shipmentIndexহল সংশ্লিষ্ট অনুরোধে এই ভিজিট যে শিপমেন্টের সাথে সম্পর্কিত তার জিরো-বেসড ইন্ডেক্স।- ভিজিটটি পিক-আপ হলে
isPickup-এর মান 'true' হয় এবং ভিজিটটি ডেলিভারি হলে -এর মান 'false' হয়। ভ্যালু false হলে REST উত্তর এই প্রপার্টি বাদ দেয়। visitRequestIndexহলVisitRequest-এর শূন্য-ভিত্তিক ইনডেক্স যাShipment.pickupsবাShipment.deliveriesথেকে সংশ্লিষ্ট অনুরোধেVisitদ্বারা উপস্থাপিত হয়। ভ্যালু শূন্য হলে REST উত্তর এই প্রপার্টি বাদ দেয়।startTimeহল সেই সময় যখন ভিজিট শুরু হবে বলে আশা করা হচ্ছে।loadDemandsম্যাপ লোড করার ধরন থেকেVisitসম্পূর্ণ করার জন্য প্রয়োজনীয় পরিমাণ লোড করুন। ডেলিভারি ভিজিটের জন্য লোডের পরিমাণ নেগেটিভ হয়, এর অর্থ হল গাড়ি থেকে লোড সরিয়ে দেওয়া হচ্ছে।
Visit-এর একটি উদাহরণ:
{
"routes": [
{
...
"visits": [
{
"isPickup": true,
"startTime": "2024-02-13T00:00:00Z",
"detour": "0s"
},
...
],
},
...
],
...
}
প্রতিটি ShipmentRoute-এ transitions-এর একটি সাজানো তালিকা থাকে যা
নির্দিষ্ট কোনও গাড়ির ক্ষেত্রে visits-এর মধ্যে ভ্রমণকে বোঝায়। গুরুত্বপূর্ণ Transition মেসেজ
(REST, gRPC) প্রপার্টির মধ্যে এগুলি অন্তর্ভুক্ত:
startTimeহল সেই সময় যখন গাড়িটি ট্রানজিশন পারফর্ম করা শুরু করবে।travelDurationহল সেই সময়সীমা যার মধ্যে ট্রানজিশন সম্পূর্ণ করার জন্য গাড়িটিকে অবশ্যই চলতে হবে।travelDistanceMetersহল সেই দূরত্ব যা ট্রানজিশন সম্পূর্ণ করার জন্য গাড়িটিকে অবশ্যই অতিক্রম করতে হবে।trafficInfoUnavailableথেকে বোঝা যায় যে ট্রানজিশনের জন্য ট্রাফিক ডেটা উপলভ্য আছে কিনা।waitDurationহল সেই সময় যখন গাড়িটি পরবর্তীVisitশুরু করার আগে অপেক্ষা করে। নিম্নলিখিতVisit-এরstart_time-এর কারণে এটি হতে পারে:totalDurationহল ট্রানজিশনের মোট সময়সীমা, যার মধ্যে ভ্রমণ, অপেক্ষা, বিরতি ও বিলম্বের সময় অন্তর্ভুক্ত।- এই ট্রানজিশনের সময় ভেইকেল দ্বারা বহন করা লোডের পরিমাণ লোড করার জন্য
vehicleLoadsম্যাপ লোডের ধরন।
Transition-এর উদাহরণ হল:
{
"routes": [
{
...
"transitions": [
...
{
"travelDuration": "1171s",
"travelDistanceMeters": 9004,
"waitDuration": "0s",
"totalDuration": "1171s",
"startTime": "2024-02-13T00:00:00Z"
},
...
],
...
}
],
...
}
vists ও transitions-এর মধ্যে সম্পর্ক সম্পর্কে আরও জানতে, দেখুন
পিক-আপ ও ডেলিভারি স্টপ অর্ডার অপ্টিমাইজেশন এবং ShipmentRoute
রেফারেন্স ডকুমেন্টেশন (REST, gRPC)। Transition মেসেজের routePolyline এবং routeToken প্রপার্টি সম্পর্কে আরও তথ্যের জন্য, ট্রানজিশন পলিলাইন এবং রুট টোকেন দেখুন।
মেট্রিক প্রপার্টি
Metrics মেসেজ (REST, gRPC) সম্পূর্ণ সমাধানের সারসংক্ষেপ দেয়।
কিছু গুরুত্বপূর্ণ Metrics প্রপার্টিতে এগুলি অন্তর্ভুক্ত:
totalCostহল রুট সম্পূর্ণ করার জন্য হওয়া মোট খরচ। খরচ মডেল প্যারামিটার থেকে খরচ সম্পর্কে আরও জানুন।usedVehicleCountহল সমাধানে ব্যবহৃত মোট গাড়ির সংখ্যা। অপ্টিমাইজার যদি নির্ধারণ করে যে কোনও গাড়ির ব্যবহার অপ্রয়োজনীয়, তাহলে সেই গাড়ির রুট খালি থাকতে পারে।skippedMandatoryShipmentCountহল বাদ দেওয়া শিপমেন্টের সংখ্যা যা "বাধ্যতামূলক"। একটি বাধ্যতামূলক শিপমেন্টেpenaltyCostউল্লেখ করা নেই, যা শিপমেন্ট এড়িয়ে গেলে খরচ হয়। নির্দিষ্ট সীমাবদ্ধতার মধ্যে পারফর্ম্যান্স উপযুক্ত না হলে, বাধ্যতামূলক শিপমেন্ট এখনও এড়িয়ে যাওয়া যেতে পারে। খরচ মডেল প্যারামিটার থেকে খরচ সম্পর্কে আরও জানুন।
অতিরিক্ত মেট্রিক AggregatedMetrics মেসেজ (REST,
gRPC) হিসেবে রিপোর্ট করা হয়। AggregatedMetrics মেসেজের ধরনটি Metrics.aggregatedRouteMetrics প্রপার্টির জন্য এবং ShipmentRoute.metrics
প্রপার্টির জন্য ব্যবহার করা হয় Metrics.aggregatedRouteMetrics-এ OptimizeToursResponse-এর মধ্যে থাকা সব
ShipmentRoute জুড়ে একত্রিত করা মেট্রিক থাকে। প্রতিটি ShipmentRoute.metrics
প্রপার্টিতে সেই নির্দিষ্ট ShipmentRoute-এর জন্য মেট্রিক থাকে।
গুরুত্বপূর্ণ AggregatedMetrics প্রপার্টির মধ্যে এগুলি অন্তর্ভুক্ত:
performedShipmentCountহল যানবাহনের মাধ্যমে করা শিপমেন্টের সংখ্যা সেগুলির সম্পূর্ণ রুট জুড়ে।travelDurationহল রুট সম্পূর্ণ করার সময় ট্রানজিটে থাকা গাড়ির মোট সময়।waitDurationহল সেই মোট সময় যা গাড়িগুলি তাদের রুট সম্পূর্ণ করার সময় অপেক্ষা করে কাটায়।delayDurationহল গাড়ির মোট বিলম্বের সময়।TransitionAttributesব্যবহার না করা হলে, সাধারণত এর মান শূন্য হয়।breakDurationহল রুট সম্পূর্ণ করার সময় গাড়িগুলি বিরতিতে মোট যত সময় ব্যয় করে।visitDurationহল রুট সম্পূর্ণ করার সময় ভিজিট করার জন্য গাড়িগুলি মোট যে সময় ব্যয় করে। এটি হল প্রযোজ্য গাড়িতে অ্যাসাইন করাVisits-এর সাথে সম্পর্কিতVisitRequests-এরVisitRequest.durationভ্যালুর যোগফল।totalDurationহল গাড়ির রুট সম্পূর্ণ করার জন্য প্রয়োজনীয় মোট সময়সীমা।travelDistanceMetersহল রুট সম্পূর্ণ করার সময় গাড়ির মাধ্যমে ভ্রমণ করা মোট দূরত্ব।maxLoadsম্যাপ, রুটের যেকোনও পয়েন্টে গাড়ির মাধ্যমে বহন করা সর্বাধিক লোডের পরিমাণ অনুযায়ী লোডের ধরন দেখায়।
Metrics মেসেজের একটি উদাহরণ:
{
"routes": [
...
],
"metrics": {
"aggregatedRouteMetrics": {
"performedShipmentCount": 1,
"travelDuration": "2322s",
"waitDuration": "0s",
"delayDuration": "0s",
"breakDuration": "0s",
"visitDuration": "0s",
"totalDuration": "2322s",
"travelDistanceMeters": 18603
},
"usedVehicleCount": 1,
"earliestVehicleStartTime": "2024-02-13T00:00:00Z",
"latestVehicleEndTime": "2024-02-13T00:38:42Z",
"totalCost": 18.603,
"costs": {
"model.vehicles.cost_per_kilometer": 18.603
}
}
}
সম্পূর্ণ উদাহরণ
অনুরোধ তৈরি করুন থেকে পাওয়া অনুরোধের জন্য সম্পূর্ণ উত্তরের নমুনাটি এইরকম:
{
"routes": [
{
"vehicleStartTime": "2024-02-13T00:00:00Z",
"vehicleEndTime": "2024-02-13T00:38:42Z",
"visits": [
{
"isPickup": true,
"startTime": "2024-02-13T00:00:00Z",
"detour": "0s"
},
{
"startTime": "2024-02-13T00:19:31Z",
"detour": "0s"
}
],
"transitions": [
{
"travelDuration": "0s",
"waitDuration": "0s",
"totalDuration": "0s",
"startTime": "2024-02-13T00:00:00Z"
},
{
"travelDuration": "1171s",
"travelDistanceMeters": 9004,
"waitDuration": "0s",
"totalDuration": "1171s",
"startTime": "2024-02-13T00:00:00Z"
},
{
"travelDuration": "1151s",
"travelDistanceMeters": 9599,
"waitDuration": "0s",
"totalDuration": "1151s",
"startTime": "2024-02-13T00:19:31Z"
}
],
"metrics": {
"performedShipmentCount": 1,
"travelDuration": "2322s",
"waitDuration": "0s",
"delayDuration": "0s",
"breakDuration": "0s",
"visitDuration": "0s",
"totalDuration": "2322s",
"travelDistanceMeters": 18603
},
"routeCosts": {
"model.vehicles.cost_per_kilometer": 18.603
},
"routeTotalCost": 18.603
}
],
"metrics": {
"aggregatedRouteMetrics": {
"performedShipmentCount": 1,
"travelDuration": "2322s",
"waitDuration": "0s",
"delayDuration": "0s",
"breakDuration": "0s",
"visitDuration": "0s",
"totalDuration": "2322s",
"travelDistanceMeters": 18603
},
"usedVehicleCount": 1,
"earliestVehicleStartTime": "2024-02-13T00:00:00Z",
"latestVehicleEndTime": "2024-02-13T00:38:42Z",
"totalCost": 18.603,
"costs": {
"model.vehicles.cost_per_kilometer": 18.603
}
}
}