Pesan OptimizeToursRequest (REST, gRPC) berisi sejumlah properti yang terkait dengan biaya. Bersama-sama, parameter biaya ini merepresentasikan model biaya permintaan. Model biaya mencakup banyak tujuan pengoptimalan tingkat tinggi permintaan, seperti:
- Memprioritaskan rute
Vehicleyang lebih cepat daripada rute yang lebih pendek atau sebaliknya - Memutuskan apakah biaya untuk menyelesaikan
Shipmentsepadan dengan nilai penyelesaianShipment - Melakukan pengambilan dan pengiriman dalam jangka waktu tertentu hanya jika melakukannya hemat biaya
Lihat contoh permintaan dengan biaya
{ "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 } ] } }
Properti biaya Vehicle
Pesan Vehicle (REST, gRPC) memiliki beberapa properti biaya:
Vehicle.cost_per_hour: mewakili biaya pengoperasian kendaraan per jam, termasuk waktu transit, menunggu, berkunjung, dan istirahat.Vehicle.cost_per_kilometer: menunjukkan biaya per kilometer yang ditempuh oleh kendaraan.Vehicle.cost_per_traveled_hour: mewakili biaya pengoperasian kendaraan hanya saat dalam perjalanan, tidak termasuk waktu menunggu, berkunjung, dan istirahat.
Parameter biaya ini memungkinkan pengoptimal membuat pertukaran waktu versus jarak yang ditempuh. Biaya yang dikeluarkan oleh rute yang dioptimalkan muncul dalam pesan respons sebagai metrics.costs:
Seiring bertambahnya costPerHour, pengoptimal berupaya menemukan rute yang lebih cepat yang mungkin bukan rute terpendek. Dalam contoh ini, rute tercepat ternyata juga merupakan rute terpendek, sehingga perubahan pada parameter biaya hanya memberikan sedikit pengaruh.
Properti biaya Shipment
Pesan Shipment (REST, gRPC) juga memiliki beberapa parameter biaya:
Shipment.penalty_costmenunjukkan biaya yang dikeluarkan karena melewati pengiriman. Tidak menyetel parameterpenalty_costpengiriman akan membuat pengiriman menjadi wajib, yang berarti pengiriman hanya akan dilewati jika tidak dapat diselesaikan mengingat batasan yang ditentukan.Shipment.VisitRequest.costmewakili biaya pengambilan atau pengiriman tertentu, yang terutama digunakan untuk memungkinkan pertukaran biaya antara beberapa opsi pengambilan atau pengiriman untuk satu pengiriman.
Parameter biaya Shipment menggunakan unit tanpa dimensi yang sama dengan parameter biaya Vehicle. Biaya yang dikeluarkan untuk menyelesaikan Shipment melebihi biaya penaltinya, maka
Shipment tidak disertakan dalam rute Vehicle mana pun dan akan muncul dalam daftar
skipped_shipments dalam pesan respons.
Properti biaya ShipmentModel
Pesan ShipmentModel (REST, gRPC) mencakup satu properti biaya, globalDurationCostPerHour. Biaya ini dikeluarkan berdasarkan total
waktu yang diperlukan semua kendaraan untuk menyelesaikan ShipmentRoutes. Meningkatkan
globalDurationCostPerHour akan memprioritaskan penyelesaian semua pengiriman lebih awal.
Properti biaya respons Pengoptimalan Rute
Pesan OptimizeToursResponse (REST, gRPC) memiliki properti biaya
yang mewakili biaya yang dikeluarkan dalam proses penyelesaian ShipmentRoute.
Properti metrics.costs dan metrics.totalCost mewakili jumlah
unit biaya yang dikeluarkan di semua rute dalam respons. Setiap entri routes memiliki properti
routeCosts dan routeTotalCosts yang mewakili biaya untuk rute
tertentu tersebut.
Melihat respons terhadap contoh permintaan dengan biaya
{ "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 } } }
Dalam contoh respons, metrics.costs tingkat teratas adalah:
{
"metrics": {
...
"costs": {
"model.vehicles.cost_per_hour": 18.911111111111111,
"model.vehicles.cost_per_kilometer": 33.53,
"model.shipments.penalty_cost": 5
}
}
}
Nilai model.shipments.penalty_cost mewakili biaya yang dikeluarkan karena pengiriman yang dilewati. Properti skippedShipments mencantumkan pengiriman yang dilewati.
Dalam contoh ini, hanya model.shipments[1] dalam contoh permintaan yang dilewati.
model.shipments[1] memiliki biaya penalti sebesar 5 unit, yang cocok dengan kunci
model.shipments.penalty_cost total dalam contoh respons. penaltyCost pengiriman yang rendah dibandingkan dengan costPerHour 40,0 dan costPerKilometer 10,0 Vehicle membuat pengiriman lebih hemat biaya untuk dilewati daripada diselesaikan.
Topik lanjutan: biaya dan batasan ringan
Beberapa properti pesan OptimizeToursRequest (REST, gRPC)
merepresentasikan batasan ringan, yaitu batasan yang menimbulkan biaya jika tidak dapat dipenuhi.
Misalnya, batasan kendaraan LoadLimit (REST, gRPC) memiliki properti
softMaxLoad dan costPerUnitAboveSoftMax. Bersama-sama, hal ini menimbulkan
biaya yang sebanding dengan unit pemuatan yang melebihi softMaxLoad, sehingga
batas hanya dapat dilampaui jika hal itu masuk akal dari sudut pandang biaya.
Demikian pula, batasan TimeWindow (REST, gRPC) memiliki properti soft_start_time dan soft_end_time, dengan cost_per_hour_before_soft_start_time dan cost_per_hour_after_soft_end_time yang sesuai yang dikenakan berdasarkan seberapa awal atau terlambat peristiwa yang dibatasi terjadi sehubungan dengan TimeWindow.
Seperti semua parameter model biaya, biaya batasan ringan dinyatakan dalam unit tanpa dimensi yang sama dengan parameter biaya lainnya.
Batasan LoadLimit dibahas secara mendetail dalam
Permintaan dan Batas Beban. Batasan TimeWindow dibahas secara mendetail
dalam Batasan Jendela Waktu Pengambilan dan Pengiriman.