Pesan OptimizeToursRequest
(REST, gRPC) berisi sejumlah properti yang terkait dengan biaya. Bersama-sama, parameter biaya ini mewakili model biaya permintaan. Model biaya menangkap banyak tujuan pengoptimalan tingkat tinggi pada permintaan, seperti:
- Memprioritaskan rute
Vehicle
yang lebih cepat daripada rute yang lebih pendek atau sebaliknya - Menentukan apakah biaya pengiriman
Shipment
sepadan dengan nilai penyelesaianShipment
- Melakukan pengambilan dan pengiriman dalam jangka waktu hanya jika melakukannya dapat menghemat 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 } ] } }
Vehicle
properti biaya
Pesan Vehicle
(REST, gRPC) memiliki beberapa properti biaya:
Vehicle.cost_per_hour
: menunjukkan biaya pengoperasian kendaraan per jam termasuk waktu transit, waktu tunggu, kunjungan, dan waktu istirahat.Vehicle.cost_per_kilometer
: menunjukkan biaya per kilometer yang ditempuh dengan kendaraan.Vehicle.cost_per_traveled_hour
: menunjukkan biaya pengoperasian kendaraan hanya selama perjalanan, tidak termasuk waktu tunggu, kunjungan, dan waktu istirahat.
Parameter biaya ini memungkinkan pengoptimal untuk melakukan kompromi jarak waktu versus jarak tempuh. Biaya yang dikeluarkan oleh rute yang dioptimalkan muncul dalam pesan respons sebagai metrics.costs
:
Seiring meningkatnya costPerHour
, pengoptimal mencoba menemukan rute lebih cepat
yang mungkin bukan rute terpendek. Dalam contoh ini, rute tercepat kebetulan
adalah yang terpendek, sehingga perubahan pada parameter biaya hanya memiliki sedikit pengaruh.
Shipment
properti biaya
Pesan Shipment
(REST, gRPC) juga memiliki beberapa parameter biaya:
Shipment.penalty_cost
menunjukkan biaya yang timbul karena melewatkan pengiriman.Shipment.VisitRequest.cost
menunjukkan biaya pengambilan atau pengiriman tertentu, terutama yang digunakan untuk mengaktifkan kompromi biaya antara beberapa opsi pengambilan atau pengiriman untuk satu pengiriman.
Parameter biaya Shipment
menggunakan unit tanpa dimensi yang sama seperti parameter biaya Vehicle
. Biaya yang ditimbulkan untuk menyelesaikan Shipment
melebihi biaya penaltinya, Shipment
tidak disertakan pada rute Vehicle
mana pun dan muncul dalam daftar skipped_shipments
di pesan respons.
ShipmentModel
properti biaya
Pesan ShipmentModel
(REST, gRPC) menyertakan satu properti
biaya, globalDurationCostPerHour
. Biaya ini dikeluarkan berdasarkan total waktu yang diperlukan bagi semua kendaraan untuk menyelesaikan ShipmentRoute
. Meningkatkan
globalDurationCostPerHour
akan memprioritaskan penyelesaian semua pengiriman yang lebih awal.
Properti biaya respons Pengoptimalan Rute
Pesan OptimizeToursResponse
(REST, gRPC) memiliki properti biaya
yang mewakili biaya yang timbul 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 spesifik tersebut.
Lihat 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
menunjukkan biaya yang timbul karena pengiriman yang dilewati. Properti skippedShipments
mencantumkan pengiriman mana 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 total kunci model.shipments.penalty_cost
dalam contoh respons. Pengiriman yang rendah
penaltyCost
dibandingkan dengan Vehicle
sebesar 40.0 costPerHour
dan 10.0
costPerKilometer
membuatnya lebih hemat biaya untuk melewati pengiriman daripada
menyelesaikannya.
Topik lanjutan: biaya dan batasan kecil
Beberapa properti pesan OptimizeToursRequest
(REST, gRPC)
mewakili batasan ringan, yang merupakan batasan yang dikenai biaya jika
tidak dapat dipenuhi.
Misalnya, batasan LoadLimit
kendaraan (REST, gRPC) memiliki
properti softMaxLoad
dan costPerUnitAboveSoftMax
. Bersama-sama, keduanya dikenai
biaya yang sebanding dengan unit beban yang melebihi softMaxLoad
, sehingga
batas dapat dilampaui hanya jika hal tersebut wajar 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
terkait yang terjadi berdasarkan seberapa awal atau akhir peristiwa terbatas tersebut terjadi
terkait 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.