Pesan OptimizeToursRequest
(REST, gRPC) berisi sejumlah properti yang terkait dengan biaya. Bersama-sama, parameter biaya ini merepresentasikan model biaya permintaan. Model biaya mencakup banyak tujuan pengoptimalan tingkat tinggi permintaan, seperti:
- Memprioritaskan rute
Vehicle
yang lebih cepat daripada rute yang lebih pendek atau sebaliknya - Memutuskan apakah biaya untuk menyelesaikan
Shipment
sepadan 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, menunggu, berkunjung, dan istirahat.Vehicle.cost_per_kilometer
: menunjukkan biaya per kilometer yang ditempuh oleh kendaraan.Vehicle.cost_per_traveled_hour
: mewakili biaya pengoperasian kendaraan hanya saat dalam perjalanan, tidak termasuk waktu menunggu, berkunjung, dan istirahat.
Parameter biaya ini memungkinkan pengoptimal membuat pertukaran waktu versus jarak yang ditempuh. Biaya yang dikeluarkan oleh rute yang dioptimalkan muncul dalam pesan respons sebagai metrics.costs
:
Seiring bertambahnya costPerHour
, pengoptimal berupaya menemukan rute yang lebih cepat yang mungkin bukan rute terpendek. Dalam contoh ini, rute tercepat ternyata juga merupakan rute terpendek, sehingga perubahan pada parameter biaya hanya memberikan sedikit efek.
Properti biaya Shipment
Pesan Shipment
(REST, gRPC) juga memiliki beberapa parameter biaya:
Shipment.penalty_cost
menunjukkan biaya yang dikeluarkan karena melewati pengiriman. Tidak menyetel parameterpenalty_cost
pengiriman akan membuat pengiriman menjadi wajib, yang berarti pengiriman hanya akan dilewati jika tidak dapat diselesaikan mengingat batasan yang ditentukan.Shipment.VisitRequest.cost
mewakili biaya pengambilan atau pengiriman tertentu, yang terutama digunakan untuk memungkinkan pertukaran 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, maka
Shipment
tidak disertakan dalam rute Vehicle
mana pun dan akan muncul dalam daftar
skipped_shipments
di pesan respons.
Properti biaya ShipmentModel
Pesan ShipmentModel
(REST, gRPC) mencakup satu properti biaya, globalDurationCostPerHour
. Biaya ini dikeluarkan berdasarkan total
waktu yang diperlukan semua kendaraan untuk menyelesaikan ShipmentRoute
s. 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 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
tertentu tersebut.
Melihat 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
mewakili biaya yang dikeluarkan 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 sebesar 5 unit, yang cocok dengan kunci
model.shipments.penalty_cost
total dalam contoh respons. penaltyCost
pengiriman yang rendah dibandingkan dengan costPerHour
40,0 dan costPerKilometer
10,0 Vehicle
membuat pengiriman lebih hemat biaya untuk dilewati daripada diselesaikan.
Topik lanjutan: biaya dan batasan ringan
Beberapa properti pesan OptimizeToursRequest
(REST, gRPC)
merepresentasikan batasan ringan, yaitu batasan yang menimbulkan biaya jika tidak dapat dipenuhi.
Misalnya, batasan kendaraan LoadLimit
(REST, gRPC) memiliki properti
softMaxLoad
dan costPerUnitAboveSoftMax
. Bersama-sama, hal ini menimbulkan
biaya yang sebanding dengan unit pemuatan yang melebihi softMaxLoad
, sehingga
batas hanya dapat dilampaui 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 dikenakan berdasarkan seberapa awal atau terlambat peristiwa yang dibatasi terjadi sehubungan 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 dalam
Permintaan dan Batas Beban. Batasan TimeWindow
dibahas secara mendetail
dalam Batasan Jendela Waktu Pengambilan dan Pengiriman.