Pesan OptimizeToursRequest
(REST, gRPC) berisi sejumlah properti yang terkait dengan biaya. Secara bersama-sama, parameter biaya ini mewakili
model biaya permintaan. Model biaya menangkap banyak tujuan pengoptimalan tingkat tinggi permintaan, seperti:
- Memprioritaskan rute
Vehicle
yang lebih cepat daripada rute yang lebih pendek atau sebaliknya - Menentukan apakah biaya untuk mengirimkan
Shipment
sebanding dengan nilai penyelesaianShipment
- Melakukan pengambilan dan pengiriman dalam jangka waktu tertentu hanya jika hal tersebut 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, tunggu, kunjungan, dan istirahat.Vehicle.cost_per_kilometer
: mewakili biaya per kilometer yang ditempuh oleh kendaraan.Vehicle.cost_per_traveled_hour
: mewakili biaya pengoperasian kendaraan hanya saat dalam perjalanan, tidak termasuk waktu tunggu, kunjungan, dan istirahat.
Parameter biaya ini memungkinkan pengoptimal melakukan kompromi waktu versus jarak yang ditempuh. Biaya yang dikeluarkan oleh rute yang dioptimalkan muncul dalam pesan respons sebagai metrics.costs
:
Saat costPerHour
meningkat, pengoptimal akan mencoba menemukan rute yang lebih cepat, tetapi mungkin bukan rute terpendek. Dalam contoh ini, rute tercepat ternyata
juga merupakan rute terpendek, sehingga perubahan pada parameter biaya tidak banyak berpengaruh.
Properti biaya Shipment
Pesan Shipment
(REST, gRPC) juga memiliki beberapa parameter biaya:
Shipment.penalty_cost
mewakili biaya yang dikeluarkan dengan melewatkan pengiriman.Shipment.VisitRequest.cost
mewakili biaya pengambilan atau pengiriman tertentu, yang terutama digunakan untuk memungkinkan kompromi 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,
Shipment
tidak disertakan di rute Vehicle
mana pun, tetapi muncul dalam
daftar skipped_shipments
dalam pesan respons.
Properti biaya ShipmentModel
Pesan ShipmentModel
(REST, gRPC) menyertakan satu properti biaya, globalDurationCostPerHour
. Biaya ini timbul berdasarkan total
waktu yang diperlukan semua kendaraan untuk menyelesaikan ShipmentRoute
. 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 menyelesaikan 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 untuk 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 timbul 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 5 unit, yang cocok dengan kunci
model.shipments.penalty_cost
total dalam contoh respons. penaltyCost
pengiriman yang rendah dibandingkan dengan Vehicle
40,0 costPerHour
dan 10,0 costPerKilometer
membuat pengiriman lebih hemat biaya jika dilewati daripada diselesaikan.
Topik lanjutan: biaya dan batasan lunak
Beberapa properti pesan OptimizeToursRequest
(REST, gRPC) mewakili batasan lunak, yang merupakan batasan yang menimbulkan biaya saat tidak dapat dipenuhi.
Misalnya, batasan LoadLimit
kendaraan (REST, gRPC) memiliki
properti softMaxLoad
dan costPerUnitAboveSoftMax
. Bersama-sama, hal ini menimbulkan biaya yang sebanding dengan unit pemuatan yang melebihi softMaxLoad
, sehingga batas dapat terlampaui hanya 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 timbul berdasarkan seberapa awal atau terlambat peristiwa yang dibatasi terjadi sehubungan dengan TimeWindow
.
Seperti semua parameter model biaya, biaya batasan lunak dinyatakan dalam unit tanpa dimensi yang sama dengan parameter biaya lainnya.
Batasan LoadLimit
ditangani secara mendetail di
Permintaan dan Batas Beban. Batasan TimeWindow
ditangani secara mendetail
di Batasan Periode Waktu Pengambilan dan Pengiriman.