রুট অপ্টিমাইজেশন API সংশ্লিষ্ট অনুরোধে যানবাহনের জন্য রুট ফেরত দেয়। শিপমেন্টগুলি যানবাহনের জন্য নির্ধারিত হয়, অথবা অনুরোধের বৈশিষ্ট্যের উপর নির্ভর করে এড়িয়ে যেতে পারে।
একটি OptimizeToursResponse মেসেজ ( REST , gRPC ) এর দুটি প্রধান শীর্ষ-স্তরের বৈশিষ্ট্য রয়েছে:
-
routes[]হল প্রতিটি যানবাহনের জন্য নির্ধারিত শিপমেন্ট সহ রুট। প্রতিটিRouteসেই পৃথক রুটের বৈশিষ্ট্য প্রতিফলিত করে এমন মেট্রিক্স থাকে। -
metricsহল সমস্ত যানবাহন এবং রুট প্ল্যানের সমগ্র প্রতিক্রিয়ার জন্য সমষ্টিগত মেট্রিক্স। শীর্ষ-স্তরের মেট্রিক্সে প্রতি-রুট মেট্রিক্সের মতো একই বৈশিষ্ট্য থাকে, সমস্ত রুট জুড়ে মান একত্রিত করা হয়।
অপ্টিমাইজেশনের ফলাফলের উপর নির্ভর করে কিছু বৈশিষ্ট্য সবসময় পূরণ নাও হতে পারে:
-
skippedShipments[]এমন শিপমেন্ট তালিকাভুক্ত করে যা কোনও যানবাহন দ্বারা সম্পাদিত হয় না। একটি শিপমেন্ট যদি নির্দিষ্ট সীমাবদ্ধতার মধ্যে সম্পন্ন করা না যায় অথবা শিপমেন্ট সম্পাদনের খরচ তার জরিমানা খরচের চেয়ে বেশি হয় তবে তা এড়িয়ে যেতে পারে। উদাহরণস্বরূপ, যদি একটি শিপমেন্টের পিকআপ বা ডেলিভারিরtimeWindowখুব কম থাকে, তাহলে প্রয়োজনীয় সময়সীমার মধ্যে একটি গাড়ির জন্য পরিদর্শন করা সম্ভব বা ব্যয়বহুল নাও হতে পারে। -
validationErrors[]এমন ত্রুটিগুলি নির্দিষ্ট করে যা অনুরোধেরsolvingModeVALIDATE_ONLYতে সেট করা থাকলে অনুরোধটিকে অবৈধ বা সমাধান করা অসম্ভব করে তোলে। স্বাভাবিকDEFAULT_SOLVEমোডে, যাচাইকরণ ত্রুটিগুলি প্রতিক্রিয়ার মূল অংশের পরিবর্তে একটি ত্রুটি বার্তায় প্রদর্শিত হবে। মনে রাখবেন যেVALIDATE_ONLYসমাধান মোড একসাথে একাধিক ত্রুটি রিপোর্ট করতে পারে, যা দ্রুত অনুরোধ ডিবাগ করার জন্য কার্যকর।
রুটের বৈশিষ্ট্য
প্রতিটি routes[] এন্ট্রি একটি ShipmentRoute বার্তা ( REST , gRPC )। প্রতিটি ShipmentRoute অনুরোধ থেকে একটি নির্দিষ্ট গাড়ির জন্য রুট অ্যাসাইনমেন্ট প্রতিনিধিত্ব করে। সংশ্লিষ্ট Vehicle সাথে সম্পর্কিত গুরুত্বপূর্ণ ShipmentRoute বৈশিষ্ট্যগুলির মধ্যে রয়েছে:
-
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সত্য হয় এবং যখন ভিজিট ডেলিভারি হয় তখন মিথ্যা হয়। যখন মান মিথ্যা হয় তখন REST প্রতিক্রিয়াগুলি এই বৈশিষ্ট্যটি বাদ দেয়। -
visitRequestIndexহলVisitRequestfromShipment.pickupsঅথবাShipment.deliveriesএর শূন্য-ভিত্তিক সূচক যাVisitপ্রতিনিধিত্ব করে। মান শূন্য হলে REST প্রতিক্রিয়াগুলি এই বৈশিষ্ট্যটি বাদ দেয়। -
startTimeহলো সেই সময় যখন পরিদর্শন শুরু হওয়ার সম্ভাবনা থাকে। -
loadDemandsVisitসম্পন্ন করার জন্য চাহিদাকৃত লোডের ধরণ থেকে লোডের পরিমাণ ম্যাপ করে। ডেলিভারি ভিজিটের জন্য লোডের পরিমাণ নেতিবাচক, যা গাড়ি থেকে লোড সরানো হচ্ছে তা নির্দেশ করে।
একটি উদাহরণ 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খরচ হবে তা নির্দিষ্ট করে না। নির্দিষ্ট সীমাবদ্ধতার অধীনে যদি তাদের কর্মক্ষমতা সম্ভব না হয় তবে বাধ্যতামূলক শিপমেন্ট এখনও বাদ দেওয়া যেতে পারে। খরচ সম্পর্কে আরও পড়ুন Cost Model Parameters -এ।
অতিরিক্ত মেট্রিক্স AggregatedMetrics বার্তা ( REST , gRPC ) হিসাবে রিপোর্ট করা হয়। AggregatedMetrics বার্তার ধরণটি Metrics.aggregatedRouteMetrics সম্পত্তির জন্য এবং ShipmentRoute.metrics সম্পত্তির জন্য Metrics.aggregatedRouteMetrics এ OptimizeToursResponse এ সমস্ত ShipmentRoute এর জন্য একত্রিত মেট্রিক্স থাকে। প্রতিটি ShipmentRoute.metrics সম্পত্তিতে সেই নির্দিষ্ট ShipmentRoute জন্য মেট্রিক্স থাকে।
গুরুত্বপূর্ণ AggregatedMetrics বৈশিষ্ট্যগুলির মধ্যে রয়েছে:
-
performedShipmentCountহল যানবাহন দ্বারা তাদের সমগ্র রুটে সম্পাদিত চালানের সংখ্যা। -
travelDurationহলো যানবাহনগুলি তাদের রুটগুলি সম্পূর্ণ করার সময় পরিবহনে ব্যয় করা মোট সময়। -
waitDurationহলো যানবাহনগুলি তাদের রুট সম্পূর্ণ করার সময় অপেক্ষা করার জন্য মোট সময় ব্যয় করে। -
delayDurationহলো যানবাহনের মোট বিলম্বের সময়। অনুরোধেTransitionAttributesব্যবহার না করা হলে এটি সাধারণত শূন্য হয়। -
breakDurationহলো যানবাহনগুলি তাদের রুট সম্পূর্ণ করার সময় বিরতিতে ব্যয় করা মোট সময়। -
visitDurationহলো যানবাহনগুলি তাদের রুটগুলি সম্পূর্ণ করার সময় পরিদর্শন করতে ব্যয় করা মোট সময়। এটি কার্যকরভাবে প্রযোজ্যVisitজন্য নির্ধারিতVisitRequestএর জন্য সমস্ত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
}
}
}
সম্পূর্ণ উদাহরণ
Construct a Request থেকে অনুরোধের জন্য একটি সম্পূর্ণ উদাহরণ প্রতিক্রিয়া দেখতে এরকম দেখাচ্ছে:
{
"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
}
}
}