Route Optimization API menampilkan rute untuk kendaraan dalam permintaan yang sesuai. Pengiriman ditetapkan ke kendaraan, atau dapat dilewati bergantung pada properti permintaan.
Pesan OptimizeToursResponse
(REST, gRPC) memiliki dua properti tingkat teratas utama:
routes[]
adalah rute untuk setiap kendaraan dengan pengiriman yang ditetapkan. SetiapRoute
berisi metrik yang mencerminkan properti rute tersebut.metrics
adalah metrik gabungan untuk seluruh respons, di semua kendaraan dan rencana rute. Metrik tingkat teratas berisi properti yang sama dengan metrik per-Rute, dengan nilai yang digabungkan di semua Rute.
Beberapa properti mungkin tidak selalu diisi, bergantung pada hasil pengoptimalan:
skippedShipments[]
mencantumkan pengiriman yang tidak dilakukan oleh kendaraan apa pun. Pengiriman dapat dilewati jika tidak dapat dilakukan dalam batasan yang ditentukan atau jika biaya untuk melakukan pengiriman melebihi biaya penaltinya. Misalnya, jika pengambilan atau pengiriman kiriman memilikitimeWindow
yang sangat sempit, kendaraan mungkin tidak dapat atau tidak hemat biaya untuk melakukan kunjungan selama jangka waktu yang diperlukan.validationErrors[]
menentukan error yang membuat permintaan tidak valid atau tidak dapat diselesaikan saatsolvingMode
permintaan disetel keVALIDATE_ONLY
. Dalam modeDEFAULT_SOLVE
normal, error validasi akan muncul dalam pesan error, bukan isi respons. Perhatikan bahwa mode pemecahan masalahVALIDATE_ONLY
dapat melaporkan beberapa error sekaligus, yang berguna untuk men-debug permintaan dengan cepat.
Properti rute
Setiap entri routes[]
adalah pesan ShipmentRoute
(REST, gRPC). Setiap
ShipmentRoute
mewakili penetapan rute untuk kendaraan tertentu dari
permintaan. Properti ShipmentRoute
penting yang terkait dengan
Vehicle
yang sesuai meliputi:
vehicleIndex
adalah indeks berbasis nol dariVehicle
dalam pesan permintaan yang sesuai. Respons REST menghapus properti ini jika nilainya nol.vehicleStartTime
adalah waktu saat kendaraan harus memulai rutenya.vehicleEndTime
adalah waktu saat kendaraan diperkirakan akan menyelesaikan rutenya.
Dalam respons, routes
akan terlihat seperti:
{
"routes": [
{
"vehicleStartTime": "2024-02-13T00:00:00Z",
"vehicleEndTime": "2024-02-13T00:38:42Z",
"visits": [
...
],
"transitions": [
...
],
"metrics": {
...
},
...
}
],
...
}
Setiap ShipmentRoute
mencakup daftar visits
yang diurutkan yang akan diselesaikan kendaraan. Setiap Visit
(REST, gRPC) merepresentasikan VisitRequest
(REST, gRPC) dari permintaan yang sesuai. Properti Visit
penting meliputi:
shipmentIndex
adalah indeks pengiriman berbasis nol yang menjadi tujuan kunjungan ini dalam permintaan yang sesuai.isPickup
bernilai benar jika kunjungan adalah pengambilan di tempat dan salah jika kunjungan adalah pengiriman. Respons REST menghilangkan properti ini jika nilainya salah (false).visitRequestIndex
adalah indeks berbasis nol dariVisitRequest
dariShipment.pickups
atauShipment.deliveries
dalam permintaan yang sesuai yang diwakili olehVisit
. Respons REST menghapus properti ini jika nilainya nol.startTime
adalah waktu kunjungan diperkirakan akan dimulai.loadDemands
memetakan jenis pemuatan ke jumlah pemuatan yang diperlukan untuk menyelesaikanVisit
. Jumlah muatan negatif untuk kunjungan pengiriman, yang menunjukkan muatan dikeluarkan dari kendaraan.
Contoh Visit
terlihat seperti:
{
"routes": [
{
...
"visits": [
{
"isPickup": true,
"startTime": "2024-02-13T00:00:00Z",
"detour": "0s"
},
...
],
},
...
],
...
}
Setiap ShipmentRoute
mencakup daftar transitions
berurutan yang merepresentasikan
perjalanan antara visits
untuk kendaraan tertentu. Properti pesan Transition
penting
(REST, gRPC) meliputi:
startTime
adalah waktu saat kendaraan akan mulai melakukan transisi.travelDuration
adalah durasi yang diperlukan kendaraan untuk menyelesaikan transisi.travelDistanceMeters
adalah jarak dalam meter yang harus ditempuh kendaraan untuk menyelesaikan transisi.trafficInfoUnavailable
menunjukkan apakah data traffic tersedia untuk transisi.waitDuration
menunjukkan waktu idle yang dihabiskan kendaraan untuk menunggu sebelum dapat memulaiVisit
berikutnya. Biaya ini mungkin dikenakan karenastart_time
dariVisit
berikut.totalDuration
adalah durasi total transisi, termasuk waktu perjalanan, menunggu, istirahat, dan penundaan.vehicleLoads
memetakan jenis muatan ke jumlah muatan yang dibawa oleh kendaraan selama transisi ini.
Contoh Transition
terlihat seperti:
{
"routes": [
{
...
"transitions": [
...
{
"travelDuration": "1171s",
"travelDistanceMeters": 9004,
"waitDuration": "0s",
"totalDuration": "1171s",
"startTime": "2024-02-13T00:00:00Z"
},
...
],
...
}
],
...
}
Untuk mengetahui informasi selengkapnya tentang hubungan antara vists
dan transitions
, lihat
Pengoptimalan Urutan Pemberhentian Pengambilan dan Pengiriman serta dokumentasi referensi ShipmentRoute
(REST, gRPC). Untuk mengetahui informasi selengkapnya tentang properti
routePolyline
dan routeToken
dari pesan Transition
, lihat
Transisi Polyline dan Token Rute.
Properti metrik
Pesan Metrics
(REST, gRPC) merangkum seluruh solusi.
Beberapa properti Metrics
penting mencakup:
totalCost
adalah total biaya yang dikeluarkan untuk menyelesaikan rute. Baca selengkapnya tentang biaya di Parameter Model Biaya.usedVehicleCount
adalah jumlah total kendaraan yang digunakan dalam solusi. Kendaraan mungkin memiliki rute kosong saat pengoptimal menentukan bahwa penggunaannya tidak diperlukan.skippedMandatoryShipmentCount
adalah jumlah pengiriman yang dilewati yang "wajib". Pengiriman wajib tidak menentukanpenaltyCost
yang akan dikenakan jika pengiriman dilewati. Pengiriman wajib masih dapat dilewati jika performanya tidak memungkinkan dalam batasan yang ditentukan. Baca selengkapnya tentang biaya di Parameter Model Biaya.
Metrik tambahan dilaporkan sebagai pesan AggregatedMetrics
(REST,
gRPC). Jenis pesan AggregatedMetrics
digunakan untuk properti
Metrics.aggregatedRouteMetrics
dan untuk properti ShipmentRoute.metrics
Metrics.aggregatedRouteMetrics
berisi metrik yang digabungkan di semua
ShipmentRoute
dalam OptimizeToursResponse
. Setiap properti ShipmentRoute.metrics
berisi metrik untuk ShipmentRoute
tertentu tersebut.
Properti AggregatedMetrics
penting meliputi:
performedShipmentCount
adalah jumlah pengiriman yang dilakukan oleh kendaraan di seluruh rutenya.travelDuration
adalah total waktu yang dihabiskan kendaraan dalam perjalanan saat menyelesaikan rutenya.waitDuration
adalah total waktu yang dihabiskan kendaraan untuk menunggu saat menyelesaikan rutenya.delayDuration
adalah total waktu keterlambatan untuk kendaraan. Nilai ini biasanya nol kecuali jikaTransitionAttributes
digunakan dalam permintaan.breakDuration
adalah total waktu yang dihabiskan kendaraan untuk beristirahat saat menyelesaikan rutenya.visitDuration
adalah total waktu yang dihabiskan kendaraan untuk melakukan kunjungan sambil menyelesaikan rutenya. Ini secara efektif adalah jumlah semua nilaiVisitRequest.duration
untukVisitRequest
yang sesuai denganVisit
yang ditetapkan ke kendaraan yang berlaku.totalDuration
adalah total durasi yang diperlukan untuk menyelesaikan rute kendaraan.travelDistanceMeters
adalah total jarak yang ditempuh kendaraan saat menyelesaikan rutenya.maxLoads
memetakan jenis muatan ke jumlah muatan maksimum yang dibawa oleh kendaraan di setiap titik rutenya.
Contoh pesan Metrics
terlihat seperti:
{
"routes": [
...
],
"metrics": {
"aggregatedRouteMetrics": {
"performedShipmentCount": 1,
"travelDuration": "2322s",
"waitDuration": "0s",
"delayDuration": "0s",
"breakDuration": "0s",
"visitDuration": "0s",
"totalDuration": "2322s",
"travelDistanceMeters": 18603
},
"usedVehicleCount": 1,
"earliestVehicleStartTime": "2024-02-13T00:00:00Z",
"latestVehicleEndTime": "2024-02-13T00:38:42Z",
"totalCost": 18.603,
"costs": {
"model.vehicles.cost_per_kilometer": 18.603
}
}
}
Contoh lengkap
Contoh respons lengkap untuk permintaan dari Buat Permintaan terlihat seperti:
{
"routes": [
{
"vehicleStartTime": "2024-02-13T00:00:00Z",
"vehicleEndTime": "2024-02-13T00:38:42Z",
"visits": [
{
"isPickup": true,
"startTime": "2024-02-13T00:00:00Z",
"detour": "0s"
},
{
"startTime": "2024-02-13T00:19:31Z",
"detour": "0s"
}
],
"transitions": [
{
"travelDuration": "0s",
"waitDuration": "0s",
"totalDuration": "0s",
"startTime": "2024-02-13T00:00:00Z"
},
{
"travelDuration": "1171s",
"travelDistanceMeters": 9004,
"waitDuration": "0s",
"totalDuration": "1171s",
"startTime": "2024-02-13T00:00:00Z"
},
{
"travelDuration": "1151s",
"travelDistanceMeters": 9599,
"waitDuration": "0s",
"totalDuration": "1151s",
"startTime": "2024-02-13T00:19:31Z"
}
],
"metrics": {
"performedShipmentCount": 1,
"travelDuration": "2322s",
"waitDuration": "0s",
"delayDuration": "0s",
"breakDuration": "0s",
"visitDuration": "0s",
"totalDuration": "2322s",
"travelDistanceMeters": 18603
},
"routeCosts": {
"model.vehicles.cost_per_kilometer": 18.603
},
"routeTotalCost": 18.603
}
],
"metrics": {
"aggregatedRouteMetrics": {
"performedShipmentCount": 1,
"travelDuration": "2322s",
"waitDuration": "0s",
"delayDuration": "0s",
"breakDuration": "0s",
"visitDuration": "0s",
"totalDuration": "2322s",
"travelDistanceMeters": 18603
},
"usedVehicleCount": 1,
"earliestVehicleStartTime": "2024-02-13T00:00:00Z",
"latestVehicleEndTime": "2024-02-13T00:38:42Z",
"totalCost": 18.603,
"costs": {
"model.vehicles.cost_per_kilometer": 18.603
}
}
}