Pesan OptimizeToursRequest
(REST, gRPC) berisi sejumlah
properti yang terkait dengan
biaya. Bersama-sama, parameter biaya ini mewakili model biaya permintaan. Model biaya merekam banyak tujuan pengoptimalan tingkat tinggi dari permintaan, seperti:
- Memprioritaskan rute
Vehicle
yang lebih cepat daripada rute yang lebih pendek atau sebaliknya - Menentukan apakah biaya untuk mengirim
Shipment
sepadan dengan nilai penyelesaianShipment
- Melakukan pengambilan dan pengiriman dalam jangka waktu hanya saat melakukannya yang 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 } ] } }
Vehicle
properti biaya
Pesan Vehicle
(REST, gRPC) memiliki beberapa properti biaya:
Vehicle.cost_per_hour
: menunjukkan biaya pengoperasian kendaraan per jam termasuk waktu transportasi umum, waktu tunggu, kunjungan, dan waktu istirahat.Vehicle.cost_per_kilometer
: menunjukkan biaya per kilometer yang ditempuh oleh kendaraan.Vehicle.cost_per_traveled_hour
: menunjukkan biaya pengoperasian kendaraan hanya saat dalam perjalanan, tidak termasuk waktu tunggu, kunjungan, dan jeda.
Parameter biaya ini memungkinkan pengoptimal membuat konsekuensi waktu versus jarak tempuh. Biaya yang dikeluarkan oleh rute yang dioptimalkan akan muncul dalam pesan respons sebagai metrics.costs
:
Seiring peningkatan costPerHour
, pengoptimal akan mencoba menemukan rute yang lebih cepat
yang mungkin bukan rute terpendek. Dalam contoh ini, rute tercepat akan menjadi rute terpendek, sehingga perubahan parameter biaya memiliki pengaruh yang kecil.
Shipment
properti biaya
Pesan Shipment
(REST, gRPC) juga memiliki beberapa parameter
biaya:
Shipment.penalty_cost
adalah biaya yang timbul karena melewatkan pengiriman.Shipment.VisitRequest.cost
merepresentasikan biaya pengambilan atau pengantaran 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 timbul menyelesaikan Shipment
yang melebihi biaya penaltinya, Shipment
tidak disertakan dalam rute Vehicle
mana pun dan akan muncul dalam daftar skipped_shipments
di pesan respons.
ShipmentModel
properti biaya
Pesan ShipmentModel
(REST, gRPC) mencakup satu properti
biaya, globalDurationCostPerHour
. Biaya ini dikeluarkan berdasarkan total waktu yang diperlukan bagi semua kendaraan untuk menyelesaikan ShipmentRoute
. Meningkatkan
globalDurationCostPerHour
akan memprioritaskan penyelesaian lebih awal dari semua pengiriman.
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 spesifik tersebut.
Lihat respons terhadap contoh permintaan beserta biayanya
{ "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 atas 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
40.0 costPerHour
dan 10.0
costPerKilometer
membuat melewatkan pengiriman lebih hemat daripada
menyelesaikannya.
Topik lanjutan: biaya dan batasan lunak
Beberapa properti pesan OptimizeToursRequest
(REST, gRPC)
mewakili batasan terbatas, yang merupakan batasan yang menimbulkan biaya saat
tidak dapat dipenuhi.
Misalnya, batasan LoadLimit
(REST, gRPC) kendaraan memiliki
properti softMaxLoad
dan costPerUnitAboveSoftMax
. Bersama-sama, semuanya akan dikenai
biaya yang proporsional dengan unit muatan yang melebihi softMaxLoad
, sehingga
batas tersebut akan terlampaui hanya jika hal tersebut relevan 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 terjadi berdasarkan seberapa awal atau lambat peristiwa terbatas terjadi
terkait 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 di
Permintaan dan Batas Beban. Batasan TimeWindow
ditangani secara mendetail
di Batasan Periode Waktu Ambil dan Pengiriman.