این مثال نشان میدهد که چگونه تعداد وسایل نقلیه مورد استفاده در یک راهکار API بهینهسازی مسیر میتواند بسته به نحوه تعریف پارامترهای هزینه شما متفاوت باشد. با تنظیم هزینههای وسایل نقلیه، میتوانید بر این موضوع تأثیر بگذارید که آیا بهینهساز، حداقل کردن تعداد وسایل نقلیه مورد استفاده یا حداقل کردن کل زمان لازم برای تکمیل تمام محمولهها را در اولویت قرار میدهد یا خیر.
برای یک مرور کلی مفهومی، به مفهوم کلیدی مدل هزینه مراجعه کنید.
سناریوی ۱: به حداقل رساندن هزینههای عملیاتی خودرو
این سناریو نشان میدهد که چگونه بهینهساز از حداقل تعداد وسایل نقلیه لازم برای تولید مقرونبهصرفهترین راهحل، زمانی که هزینهها به وسایل نقلیه منفرد گره خوردهاند، استفاده میکند.
درخواست نمونه
این درخواست شامل اطلاعات زیر است:
- سه
shipment، هر کدام باpenaltyCost: ۱۰۰.۰، ۵.۰ و ۵۰.۰. - سه
vehicleیکسان، هر کدام باcostPerHour۵۰.۰ وcostPerKilometer۱۰.۰.
یک نمونه درخواست با چندین وسیله نقلیه را ببینید
{ "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": 50.0, "costPerKilometer": 10.0 }, { "endLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "startLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "costPerHour": 50.0, "costPerKilometer": 10.0 }, { "endLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "startLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "costPerHour": 50.0, "costPerKilometer": 10.0 } ] } }
پاسخ نمونه
اگرچه سه وسیله نقلیه در دسترس بود، بهینهساز تمام محمولهها را به یک وسیله نقلیه اختصاص میدهد و از یک محموله صرف نظر میکند. این ارزانترین راهحل است زیرا هزینه عملیاتی کردن بیش از یک وسیله نقلیه بیشتر از تحویل سه محموله با یک وسیله نقلیه و صرف نظر کردن از یک محموله با جریمه کم صرف نظر کردن است.
پاسخ به درخواست را با چندین وسیله نقلیه مشاهده کنید
{ "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": 23.638888888888889 }, "routeTotalCost": 57.168888888888887 }, { "vehicleIndex": 1 }, { "vehicleIndex": 2 } ], "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": 62.168888888888887, "costs": { "model.vehicles.cost_per_hour": 23.638888888888889, "model.shipments.penalty_cost": 5, "model.vehicles.cost_per_kilometer": 33.53 } } }
پاسخ شامل پارامترهای مرتبط زیر است:
- آرایه
routesشامل سه شیء است. اولی مسیرvehicle[0]را توصیف میکند، در حالی که دو مورد بعدی فقط حاویvehicleIndexهستند که نشان میدهدvehicle[1]وvehicle[2]استفاده نشدهاند. - آرایه
skippedShipmentsنشان میدهد که محمولهای باindex: 1که کمترینpenaltyCostیعنی ۵.۰ را داشت، نادیده گرفته شده است. - شیء
metricsتأیید میکند کهusedVehicleCountبرابر با ۱ است.
سناریو ۲: به حداقل رساندن زمان کلی حل
این سناریو نشان میدهد که چگونه میتوان استفاده از وسایل نقلیه بیشتر را برای تکمیل سریعتر تمام محمولهها تشویق کرد. این کار را با تغییر مدل هزینه از هزینههای عملیاتی تک تک وسایل نقلیه به یک هزینه کلی که کل مدت زمان کل راهحل را کاهش میدهد، انجام دهید.
درخواست نمونه
این درخواست شامل تغییرات پارامترهای زیر از سناریوی اول است:
-
costPerHourبرای هر وسیله نقلیه حذف میکند. - مقدار
globalDurationCostPerHourرا ۱۵۰.۰ اضافه میکند. این هزینه برای کل زمان از زمانی که اولین وسیله نقلیه شروع به حرکت میکند تا زمانی که آخرین وسیله نقلیه مسیر خود را تمام میکند، اعمال میشود. -
penaltyCostshipment[1]را به 75.00 افزایش دهید تا تغییرات ناشی از نادیده گرفته شدن آن کاهش یابد.
یک درخواست نمونه با استفاده از globalDurationCostPerHour را ببینید
{ "model": { "globalStartTime": "2023-01-13T16:00:00-08:00", "globalEndTime": "2023-01-14T16:00:00-08:00", "globalDurationCostPerHour": 150.0, "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": 75.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 }, "costPerKilometer": 10.0 }, { "endLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "startLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "costPerKilometer": 10.0 }, { "endLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "startLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "costPerKilometer": 10.0 } ] } }
پاسخ نمونه
با هزینه جهانی جدید، بهینهساز اکنون از هر سه وسیله نقلیه برای تکمیل هر سه محموله استفاده میکند. با اجرای موازی مسیرها، کل مدت زمان عملیات به طور قابل توجهی کاهش مییابد، حتی اگر مسافت سفر ترکیبی بیشتر باشد.
مشاهده پاسخ به درخواست با استفاده از globalDurationCostPerHour
{ "routes": [ { "vehicleStartTime": "2023-01-14T00:00:00Z", "vehicleEndTime": "2023-01-14T00:16:20Z", "visits": [ { "shipmentIndex": 2, "isPickup": true, "startTime": "2023-01-14T00:00:00Z", "detour": "0s" }, { "shipmentIndex": 2, "startTime": "2023-01-14T00:09:19Z", "detour": "0s" } ], "transitions": [ { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-14T00:00:00Z" }, { "travelDuration": "409s", "travelDistanceMeters": 1371, "waitDuration": "0s", "totalDuration": "409s", "startTime": "2023-01-14T00:02:30Z" }, { "travelDuration": "171s", "travelDistanceMeters": 665, "waitDuration": "0s", "totalDuration": "171s", "startTime": "2023-01-14T00:13:29Z" } ], "metrics": { "performedShipmentCount": 1, "travelDuration": "580s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "400s", "totalDuration": "980s", "travelDistanceMeters": 2036 }, "routeCosts": { "model.vehicles.cost_per_kilometer": 20.36 }, "routeTotalCost": 20.36 }, { "vehicleIndex": 1, "vehicleStartTime": "2023-01-14T00:00:00Z", "vehicleEndTime": "2023-01-14T00:18:54Z", "visits": [ { "shipmentIndex": 1, "isPickup": true, "startTime": "2023-01-14T00:00:00Z", "detour": "0s" }, { "shipmentIndex": 1, "startTime": "2023-01-14T00:08:24Z", "detour": "0s" } ], "transitions": [ { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-14T00:00:00Z" }, { "travelDuration": "354s", "travelDistanceMeters": 1192, "waitDuration": "0s", "totalDuration": "354s", "startTime": "2023-01-14T00:02:30Z" }, { "travelDuration": "380s", "travelDistanceMeters": 1190, "waitDuration": "0s", "totalDuration": "380s", "startTime": "2023-01-14T00:12:34Z" } ], "metrics": { "performedShipmentCount": 1, "travelDuration": "734s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "400s", "totalDuration": "1134s", "travelDistanceMeters": 2382 }, "routeCosts": { "model.vehicles.cost_per_kilometer": 23.82 }, "routeTotalCost": 23.82 }, { "vehicleIndex": 2, "vehicleStartTime": "2023-01-14T00:00:00Z", "vehicleEndTime": "2023-01-14T00:16:14Z", "visits": [ { "isPickup": true, "startTime": "2023-01-14T00:00:00Z", "detour": "0s" }, { "startTime": "2023-01-14T00:06:25Z", "detour": "0s" } ], "transitions": [ { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-14T00:00:00Z" }, { "travelDuration": "235s", "travelDistanceMeters": 795, "waitDuration": "0s", "totalDuration": "235s", "startTime": "2023-01-14T00:02:30Z" }, { "travelDuration": "339s", "travelDistanceMeters": 1276, "waitDuration": "0s", "totalDuration": "339s", "startTime": "2023-01-14T00:10:35Z" } ], "metrics": { "performedShipmentCount": 1, "travelDuration": "574s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "400s", "totalDuration": "974s", "travelDistanceMeters": 2071 }, "routeCosts": { "model.vehicles.cost_per_kilometer": 20.71 }, "routeTotalCost": 20.71 } ], "metrics": { "aggregatedRouteMetrics": { "performedShipmentCount": 3, "travelDuration": "1888s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "1200s", "totalDuration": "3088s", "travelDistanceMeters": 6489 }, "usedVehicleCount": 3, "earliestVehicleStartTime": "2023-01-14T00:00:00Z", "latestVehicleEndTime": "2023-01-14T00:18:54Z", "totalCost": 112.14, "costs": { "model.vehicles.cost_per_kilometer": 64.89, "model.global_duration_cost_per_hour": 47.25 } } }
پاسخ شامل فیلدهای مرتبط زیر است:
- آرایه
routesاکنون شامل سه مسیر کاملاً دقیق است که به هر وسیله نقلیه یک محموله اختصاص داده شده است. - مقدار
metrics.usedVehicleCountاکنون برابر با ۳ است. - زمان کلی حل (از
earliestVehicleStartTimeتاlatestVehicleEndTime) اکنون تنها ۱۸ دقیقه و ۵۴ ثانیه است، در حالی که در سناریوی قبلی ۲۸ دقیقه و ۲۲ ثانیه بود.