پیام OptimizeToursRequest ( REST ، gRPC ) شامل تعدادی ویژگی مرتبط با هزینهها است. این پارامترهای هزینه در کنار هم، مدل هزینه درخواست را نشان میدهند. مدل هزینه بسیاری از اهداف بهینهسازی سطح بالای درخواست را در بر میگیرد، مانند:
- اولویت دادن به مسیرهای سریعتر
Vehicleنسبت به مسیرهای کوتاهتر یا برعکس - تصمیمگیری در مورد اینکه آیا هزینه تحویل یک
Shipmentارزش تکمیلShipmentرا دارد یا خیر - انجام دریافت و تحویل سفارش فقط در بازههای زمانی مشخص، زمانی که انجام این کار مقرون به صرفه باشد
یک نمونه درخواست به همراه هزینهها را ببینید
{ "model": { "globalStartTime": "2023-01-13T16:00:00-08:00", "globalEndTime": "2023-01-14T16:00:00-08:00", "shipments": [ { "deliveries": [ { "arrivalLocation": { "latitude": 37.789456, "longitude": -122.390192 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 100.0 }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.789116, "longitude": -122.395080 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 5.0 }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.795242, "longitude": -122.399347 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 50.0 } ], "vehicles": [ { "endLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "startLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "costPerHour": 40.0, "costPerKilometer": 10.0 } ] } }
ویژگیهای هزینه Vehicle
پیام Vehicle ( REST ، gRPC ) چندین ویژگی هزینه دارد:
-
Vehicle.cost_per_hour: هزینه کارکرد یک وسیله نقلیه در هر ساعت شامل زمانهای حمل و نقل، انتظار، بازدید و استراحت را نشان میدهد. -
Vehicle.cost_per_kilometer: هزینه هر کیلومتر طی شده توسط وسیله نقلیه را نشان میدهد. -
Vehicle.cost_per_traveled_hour: هزینه کارکرد یک وسیله نقلیه را فقط در حین حرکت نشان میدهد، به استثنای زمانهای انتظار، بازدید و استراحت.
این پارامترهای هزینه به بهینهساز اجازه میدهند تا بین زمان و مسافت طی شده، تعادل برقرار کند. هزینههای متحمل شده توسط مسیر بهینه شده در پیام پاسخ به صورت metrics.costs ظاهر میشوند:
با افزایش costPerHour ، بهینهساز تلاش میکند مسیرهای سریعتری را پیدا کند که ممکن است کوتاهترین مسیر نباشند. در این مثال، سریعترین مسیر، کوتاهترین مسیر نیز هست، بنابراین تغییرات در پارامترهای هزینه تأثیر کمی دارند.
ویژگیهای هزینه Shipment
پیام Shipment ( REST ، gRPC ) همچنین چندین پارامتر هزینه دارد:
-
Shipment.penalty_costهزینهای را نشان میدهد که با صرف نظر کردن از ارسال متحمل میشوید. عدم تنظیم پارامترpenalty_costبرای یک ارسال، ارسال را اجباری میکند، به این معنی که ارسال فقط در صورتی که با توجه به محدودیتهای مشخص شده، نتوان آن را تکمیل کرد، رد میشود. -
Shipment.VisitRequest.costهزینه یک برداشت یا تحویل خاص را نشان میدهد که در درجه اول برای ایجاد امکان موازنه هزینه بین چندین گزینه برداشت یا تحویل برای یک محموله واحد استفاده میشود.
پارامترهای هزینه Shipment از همان واحدهای بدون بعد پارامترهای هزینه Vehicle استفاده میکنند. هزینه انجام شده برای تکمیل یک Shipment از هزینه جریمه آن بیشتر است، Shipment در مسیر هیچ Vehicle قرار نمیگیرد و در عوض در لیست skipped_shipments در پیام پاسخ ظاهر میشود.
ویژگیهای هزینه ShipmentModel
پیام ShipmentModel ( REST ، gRPC ) شامل یک ویژگی هزینه واحد، globalDurationCostPerHour است. این هزینه بر اساس کل زمان مورد نیاز برای تکمیل ShipmentRoute توسط همه وسایل نقلیه محاسبه میشود. افزایش globalDurationCostPerHour تکمیل زودتر همه محمولهها را در اولویت قرار میدهد.
ویژگیهای هزینه پاسخ بهینهسازی مسیر
پیام OptimizeToursResponse ( REST ، gRPC ) دارای ویژگیهای هزینه است که هزینههای متحمل شده در فرآیند تکمیل ShipmentRoute ها را نشان میدهد. ویژگیهای metrics.costs و metrics.totalCost تعداد واحدهای هزینه متحمل شده در تمام مسیرهای موجود در پاسخ را نشان میدهند. هر ورودی routes دارای ویژگیهای routeCosts و routeTotalCosts است که هزینههای آن مسیر خاص را نشان میدهد.
پاسخ به درخواست نمونه به همراه هزینهها را ببینید
{ "routes": [ { "vehicleStartTime": "2023-01-14T00:00:00Z", "vehicleEndTime": "2023-01-14T00:28:22Z", "visits": [ { "isPickup": true, "startTime": "2023-01-14T00:00:00Z", "detour": "0s" }, { "shipmentIndex": 2, "isPickup": true, "startTime": "2023-01-14T00:02:30Z", "detour": "150s" }, { "startTime": "2023-01-14T00:08:55Z", "detour": "150s" }, { "shipmentIndex": 2, "startTime": "2023-01-14T00:21:21Z", "detour": "572s" } ], "transitions": [ { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-14T00:00:00Z" }, { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-14T00:02:30Z" }, { "travelDuration": "235s", "travelDistanceMeters": 795, "waitDuration": "0s", "totalDuration": "235s", "startTime": "2023-01-14T00:05:00Z" }, { "travelDuration": "496s", "travelDistanceMeters": 1893, "waitDuration": "0s", "totalDuration": "496s", "startTime": "2023-01-14T00:13:05Z" }, { "travelDuration": "171s", "travelDistanceMeters": 665, "waitDuration": "0s", "totalDuration": "171s", "startTime": "2023-01-14T00:25:31Z" } ], "metrics": { "performedShipmentCount": 2, "travelDuration": "902s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "800s", "totalDuration": "1702s", "travelDistanceMeters": 3353 }, "routeCosts": { "model.vehicles.cost_per_kilometer": 33.53, "model.vehicles.cost_per_hour": 18.911111111111111 }, "routeTotalCost": 52.441111111111113 } ], "skippedShipments": [ { "index": 1 } ], "metrics": { "aggregatedRouteMetrics": { "performedShipmentCount": 2, "travelDuration": "902s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "800s", "totalDuration": "1702s", "travelDistanceMeters": 3353 }, "usedVehicleCount": 1, "earliestVehicleStartTime": "2023-01-14T00:00:00Z", "latestVehicleEndTime": "2023-01-14T00:28:22Z", "totalCost": 57.441111111111113, "costs": { "model.vehicles.cost_per_kilometer": 33.53, "model.vehicles.cost_per_hour": 18.911111111111111, "model.shipments.penalty_cost": 5 } } }
در پاسخ نمونه، metrics.costs سطح بالا عبارتند از:
{
"metrics": {
...
"costs": {
"model.vehicles.cost_per_hour": 18.911111111111111,
"model.vehicles.cost_per_kilometer": 33.53,
"model.shipments.penalty_cost": 5
}
}
}
مقدار model.shipments.penalty_cost نشان دهنده هزینه متحمل شده به دلیل ارسالهای از قلم افتاده است. ویژگی skippedShipments لیست ارسالهای از قلم افتاده را نشان میدهد.
در این مثال، فقط model.shipments[1] در درخواست نمونه رد میشود. model.shipments[1] هزینه جریمه ۵ واحد دارد که با کل کلید model.shipments.penalty_cost در پاسخ نمونه مطابقت دارد. penaltyCost پایین محموله در مقایسه با ۴۰.۰ costPerHour و ۱۰.۰ costPerKilometer مربوط به Vehicle ، رد کردن محموله را نسبت به تکمیل آن مقرون به صرفهتر میکند.
مبحث پیشرفته: هزینهها و محدودیتهای نرم
چندین ویژگی پیام OptimizeToursRequest ( REST ، gRPC ) نشاندهنده محدودیتهای نرم هستند، محدودیتهایی که در صورت عدم برآورده شدن، هزینهای را متحمل میشوند.
برای مثال، محدودیتهای LoadLimit خودرو ( REST ، gRPC ) دارای ویژگیهای softMaxLoad و costPerUnitAboveSoftMax هستند. این ویژگیها در کنار هم، هزینهای متناسب با واحدهای باری که از softMaxLoad تجاوز میکنند، ایجاد میکنند و تنها در صورتی اجازه تجاوز از حد مجاز را میدهند که از نظر هزینه منطقی باشد.
به طور مشابه، محدودیتهای TimeWindow ( REST ، gRPC ) دارای ویژگیهای soft_start_time و soft_end_time هستند، به همراه cost_per_hour_before_soft_start_time و cost_per_hour_after_soft_end_time که بر اساس زود یا دیر بودن رویداد محدود شده نسبت به TimeWindow اعمال میشوند.
همانند تمام پارامترهای مدل هزینه، هزینههای محدودیت نرم نیز در همان واحدهای بدون بعد سایر پارامترهای هزینه بیان میشوند.
محدودیتهای LoadLimit به تفصیل در بخش تقاضاها و محدودیتهای بار و محدودیتهای TimeWindow به تفصیل در بخش محدودیتهای پنجره زمانی برداشت و تحویل بررسی شدهاند.