API بهینهسازی مسیر، مسیرهای مربوط به وسایل نقلیه را در درخواست مربوطه برمیگرداند. محمولهها به وسایل نقلیه اختصاص داده میشوند یا بسته به ویژگیهای درخواست، ممکن است از آنها صرف نظر شود.
یک پیام OptimizeToursResponse ( REST ، gRPC ) دارای دو ویژگی اصلی سطح بالا است:
-
routes[]مسیرهایی برای هر وسیله نقلیه با محمولههای اختصاص داده شده به آن هستند. هرRouteشامل معیارهایی است که ویژگیهای آن مسیر خاص را منعکس میکند. -
metricsمعیارهای تجمیعی برای کل پاسخ، در بین تمام وسایل نقلیه و برنامههای مسیر هستند. معیارهای سطح بالا شامل همان ویژگیهای معیارهای هر مسیر هستند، با مقادیر تجمیعی در تمام مسیرها.
بسته به نتایج بهینهسازی، ممکن است برخی از ویژگیها همیشه پر نشوند:
-
skippedShipments[]محمولههایی را فهرست میکند که توسط هیچ وسیله نقلیهای انجام نمیشوند. اگر نتوان یک محموله را در محدودیتهای مشخصشده انجام داد یا اگر هزینه انجام آن از هزینه جریمهاش بیشتر شود، میتوان از آن صرفنظر کرد. به عنوان مثال، اگر بارگیری یا تحویل یک محموله دارایtimeWindowبسیار محدودی باشد، ممکن است انجام بازدید توسط یک وسیله نقلیه در بازه زمانی مورد نیاز امکانپذیر یا مقرون به صرفه نباشد. -
validationErrors[]خطاهایی را مشخص میکند که باعث میشوند درخواست نامعتبر یا حل آن غیرممکن شود، زمانی کهsolvingModeدرخواست رویVALIDATE_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 دارد. پاسخهای REST وقتی مقدار false باشد، این ویژگی را حذف میکنند. -
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بعدی خود صرف میکند. این ممکن است به دلیلstart_timeVisitبعدی ایجاد شود. -
totalDurationکل مدت زمان انتقال، شامل زمانهای سفر، انتظار، استراحت و تأخیر است. -
vehicleLoadsنوع بار را به مقدار بار حمل شده توسط وسیله نقلیه در طول این انتقال نگاشت میکند.
یک مثال از Transition به شکل زیر است:
{
"routes": [
{
...
"transitions": [
...
{
"travelDuration": "1171s",
"travelDistanceMeters": 9004,
"waitDuration": "0s",
"totalDuration": "1171s",
"startTime": "2024-02-13T00:00:00Z"
},
...
],
...
}
],
...
}
برای اطلاعات بیشتر در مورد رابطه بین vists و transitions ، به بهینهسازی سفارش توقف برداشت و تحویل و مستندات مرجع ShipmentRoute ( REST ، gRPC ) مراجعه کنید. برای اطلاعات بیشتر در مورد ویژگیهای routePolyline و routeToken یک پیام Transition ، به Transition Polylines و Route Tokens مراجعه کنید.
ویژگیهای معیارها
پیام Metrics ( REST ، gRPC ) کل راهکار را خلاصه میکند. برخی از ویژگیهای مهم Metrics عبارتند از:
-
totalCostکل هزینهای است که برای تکمیل مسیرها متحمل شدهایم. برای اطلاعات بیشتر در مورد هزینهها به پارامترهای مدل هزینه مراجعه کنید. -
usedVehicleCountتعداد کل وسایل نقلیه استفاده شده در راهحل است. وسایل نقلیه ممکن است مسیرهای خالی داشته باشند، زمانی که بهینهساز تشخیص دهد که استفاده از آنها غیرضروری است. -
skippedMandatoryShipmentCountتعداد محمولههای نادیده گرفته شدهای است که "اجباری" هستند. یک محموله اجباری،penaltyCostکه در صورت نادیده گرفتن محموله متحمل میشود، مشخص نمیکند. اگر عملکرد محمولههای اجباری تحت محدودیتهای مشخص شده امکانپذیر نباشد، همچنان میتوان از آنها صرف نظر کرد. برای اطلاعات بیشتر در مورد هزینهها به پارامترهای مدل هزینه مراجعه کنید.
معیارهای اضافی به عنوان پیامهای AggregatedMetrics ( REST ، gRPC ) گزارش میشوند. نوع پیام AggregatedMetrics برای ویژگی Metrics.aggregatedRouteMetrics و برای ویژگی ShipmentRoute.metrics استفاده میشود. Metrics.aggregatedRouteMetrics شامل معیارهای تجمیع شده در تمام ShipmentRoute های موجود در OptimizeToursResponse است. هر ویژگی ShipmentRoute.metrics شامل معیارهایی برای آن ShipmentRoute خاص است.
ویژگیهای مهم AggregatedMetrics عبارتند از:
-
performedShipmentCountتعداد محمولههای انجام شده توسط وسایل نقلیه در کل مسیرهایشان است. -
travelDuration، کل زمانی است که وسایل نقلیه در حین طی کردن مسیرهای خود، در حال عبور هستند. -
waitDuration، کل زمانی است که وسایل نقلیه برای تکمیل مسیرهای خود منتظر میمانند. -
delayDurationکل زمان تأخیر برای وسایل نقلیه است. این مقدار معمولاً صفر است مگر اینکهTransitionAttributesدر درخواست استفاده شود. -
breakDuration، کل زمانی است که وسایل نقلیه هنگام تکمیل مسیرهای خود در استراحت میگذرانند. - مدت زمان
visitDurationکل زمانی است که وسایل نقلیه صرف بازدیدها در حین تکمیل مسیرهای خود میکنند. این در واقع مجموع تمام مقادیرVisitRequest.durationبرایVisitRequestهای مربوط بهVisitهای اختصاص داده شده به وسیله نقلیه مربوطه است. -
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
}
}
}