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 untuk mengirimkan
Shipment
sebanding 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 } ] } }
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 kebetulan
adalah yang terpendek, sehingga perubahan pada parameter biaya hanya memiliki sedikit pengaruh.
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 dikeluarkan berdasarkan total waktu yang diperlukan bagi 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 spesifik 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
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 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 ringan
Beberapa properti pesan OptimizeToursRequest
(REST, gRPC)
mewakili batasan sementara, yang merupakan batasan yang dikenai biaya jika
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
terkait yang terjadi berdasarkan seberapa awal atau akhir peristiwa terbatas 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.