Pesan OptimizeToursRequest
(REST, gRPC) berisi sejumlah
properti yang terkait dengan
biaya. Bersama-sama, parameter biaya ini mewakili
model biaya. Model biaya menangkap banyak tujuan pengoptimalan tingkat tinggi permintaan, seperti:
- Memprioritaskan rute
Vehicle
yang lebih cepat daripada rute yang lebih pendek atau cara lain sekitar - Menentukan apakah biaya pengiriman
Shipment
sepadan dengan nilai PenyelesaianShipment
- Melakukan pengambilan dan pengiriman dalam jangka waktu 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 } ] } }
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 istirahat..Vehicle.cost_per_kilometer
: menunjukkan biaya per kilometer yang ditempuh oleh yang digunakan untuk kendaraan.Vehicle.cost_per_traveled_hour
: menunjukkan biaya pengoperasian kendaraan hanya selama transit, kecuali waktu tunggu, kunjungan, dan waktu istirahat.
Parameter biaya ini memungkinkan pengoptimal melakukan kompromi waktu versus jarak yang ditempuh. Biaya yang dikeluarkan oleh rute yang dioptimalkan akan muncul dalam respons
pesan sebagai metrics.costs
:
Seiring meningkatnya costPerHour
, pengoptimal mencoba menemukan rute yang lebih cepat
yang mungkin bukan rute terpendek. Dalam contoh ini rute tercepat terjadi
menjadi yang terpendek, jadi 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
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 biaya Vehicle
parameter. 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.
ShipmentModel
properti biaya
Pesan ShipmentModel
(REST, gRPC) mencakup satu biaya
, globalDurationCostPerHour
. Biaya ini dikeluarkan berdasarkan total
waktu yang dibutuhkan semua kendaraan untuk menyelesaikan ShipmentRoute
. Meningkat
globalDurationCostPerHour
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 properti tersebut
rute tertentu.
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
menunjukkan biaya yang timbul akibat
pengiriman yang terlewat. 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 sama dengan total
model.shipments.penalty_cost
dalam contoh respons. Pengiriman rendah
penaltyCost
dibandingkan dengan 40.0 costPerHour
dan 10.0 Vehicle
costPerKilometer
membuat melewati pengiriman lebih hemat biaya daripada melakukannya
menyelesaikannya.
Topik lanjutan: biaya dan batasan kecil
Beberapa properti pesan OptimizeToursRequest
(REST, gRPC) mewakili batasan lunak, yang merupakan batasan yang menimbulkan biaya saat tidak dapat dipenuhi.
Misalnya, batasan kendaraan LoadLimit
(REST, gRPC) memiliki
softMaxLoad
dan costPerUnitAboveSoftMax
. Bersama-sama, kedua hal tersebut menimbulkan
biaya sebanding dengan unit beban yang melebihi softMaxLoad
, sehingga memungkinkan
untuk dilampaui 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 kolom yang sesuai
cost_per_hour_before_soft_start_time
dan cost_per_hour_after_soft_end_time
yang timbul berdasarkan seberapa awal atau akhir peristiwa terbatas itu terjadi dengan
terhadap TimeWindow
.
Seperti semua parameter model biaya, biaya kendala lunak dinyatakan dalam unit tanpa dimensi yang sama dengan parameter biaya lainnya.
LoadLimit
batasan dibahas secara mendetail di
Muat Permintaan dan Batas. Batasan TimeWindow
ditangani secara mendetail
di Batasan Periode Waktu Pengambilan dan Pengiriman.