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 atas utama:
routes[]adalah rute untuk setiap kendaraan dengan pengiriman yang ditetapkan. SetiapRouteberisi metrik yang mencerminkan properti rute individual tersebut.metricsadalah metrik gabungan untuk seluruh respons, di semua kendaraan dan rencana rute. Metrik tingkat atas 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 mana 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 pengiriman memilikitimeWindowyang 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 saatsolvingModepermintaan ditetapkan keVALIDATE_ONLY. Dalam modeDEFAULT_SOLVEnormal, error validasi akan muncul dalam pesan error, bukan isi respons. Perhatikan bahwa mode penyelesaianVALIDATE_ONLYdapat melaporkan beberapa error sekaligus, yang berguna untuk men-debug permintaan dengan cepat.
Properti rute
Setiap routes[] entri adalah pesan ShipmentRoute (REST, gRPC). Setiap ShipmentRoute mewakili penetapan rute untuk kendaraan tertentu dari permintaan. Properti ShipmentRoute penting yang terkait dengan Vehicle yang sesuai mencakup:
vehicleIndexadalah indeks berbasis nol dariVehicledalam pesan permintaan yang sesuai. Respons REST menghilangkan properti ini jika nilainya nol.vehicleStartTimeadalah waktu saat kendaraan harus memulai rutenya.vehicleEndTimeadalah 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 menyertakan daftar visits yang diurutkan yang akan diselesaikan oleh kendaraan. Setiap Visit (REST, gRPC) mewakili VisitRequest
(REST, gRPC) dari permintaan yang sesuai. Properti Visit penting mencakup:
shipmentIndexadalah indeks berbasis nol dari pengiriman yang menjadi tujuan kunjungan ini dalam permintaan yang sesuai.isPickupbernilai benar jika kunjungan adalah pengambilan dan salah jika kunjungan adalah pengiriman. Respons REST menghilangkan properti ini jika nilainya salah.visitRequestIndexadalah indeks berbasis nol dariVisitRequestdariShipment.pickupsatauShipment.deliveriesdalam permintaan yang sesuai yang diwakili olehVisit. Respons REST menghilangkan properti ini jika nilainya nol.startTimeadalah waktu kunjungan diperkirakan akan dimulai.loadDemandsmemetakan jenis muatan ke jumlah muatan yang diminta untuk menyelesaikanVisit. Jumlah muatan negatif untuk kunjungan pengiriman, yang menunjukkan muatan yang dihapus dari kendaraan.
Contoh Visit terlihat seperti:
{
"routes": [
{
...
"visits": [
{
"isPickup": true,
"startTime": "2024-02-13T00:00:00Z",
"detour": "0s"
},
...
],
},
...
],
...
}
Setiap ShipmentRoute menyertakan daftar transitions yang diurutkan yang mewakili perjalanan antar-visits untuk kendaraan tertentu. Properti pesan Transition
(REST, gRPC) penting mencakup:
startTimeadalah waktu saat kendaraan akan mulai melakukan transisi.travelDurationadalah durasi kendaraan harus melakukan perjalanan untuk menyelesaikan transisi.travelDistanceMetersadalah jarak dalam meter yang harus ditempuh kendaraan untuk menyelesaikan transisi.trafficInfoUnavailablemenunjukkan apakah data traffic tersedia untuk transisi.waitDurationmewakili waktu idle yang dihabiskan kendaraan untuk menunggu sebelum dapat memulaiVisitberikutnya. Hal ini dapat terjadi karenastart_timedariVisitberikut.totalDurationadalah total durasi transisi, termasuk waktu perjalanan, tunggu, istirahat, dan penundaan.vehicleLoadsmemetakan 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 ShipmentRoute
dokumentasi referensi (REST, gRPC Untuk mengetahui informasi selengkapnya tentang properti
routePolyline dan routeToken dari pesan Transition, lihat
Poliline Transisi dan Token Rute.
Properti metrik
Pesan Metrics (REST, gRPC) merangkum seluruh solusi.
Beberapa properti Metrics penting mencakup:
totalCostadalah total biaya yang dikeluarkan untuk menyelesaikan rute. Baca lebih lanjut tentang biaya di Parameter Model Biaya.usedVehicleCountadalah jumlah total kendaraan yang digunakan dalam solusi. Kendaraan mungkin memiliki rute kosong jika pengoptimal menentukan bahwa penggunaannya tidak diperlukan.skippedMandatoryShipmentCountadalah jumlah pengiriman yang dilewati yang bersifat "wajib". Pengiriman wajib tidak menentukanpenaltyCostyang dikenakan jika pengiriman dilewati. Pengiriman wajib masih dapat dilewati jika performanya tidak memungkinkan dalam batasan yang ditentukan. Baca lebih lanjut 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 ShipmentRoute.metrics
properti berisi metrik untuk ShipmentRoute tertentu.
Properti AggregatedMetrics penting mencakup:
performedShipmentCountadalah jumlah pengiriman yang dilakukan oleh kendaraan di seluruh rutenya.travelDurationadalah total waktu yang dihabiskan kendaraan dalam perjalanan saat menyelesaikan rutenya.waitDurationadalah total waktu yang dihabiskan kendaraan untuk menunggu saat menyelesaikan rutenya.delayDurationadalah total waktu penundaan untuk kendaraan. Biasanya nol kecuali jikaTransitionAttributesdigunakan dalam permintaan.breakDurationadalah total waktu yang dihabiskan kendaraan untuk istirahat saat menyelesaikan rutenya.visitDurationadalah total waktu yang dihabiskan kendaraan untuk melakukan kunjungan saat menyelesaikan rutenya. Ini secara efektif adalah jumlah semuaVisitRequest.durationnilai untukVisitRequestyang sesuai denganVisits yang ditetapkan ke kendaraan yang berlaku.totalDurationadalah total durasi yang diperlukan untuk menyelesaikan rute kendaraan.travelDistanceMetersadalah total jarak yang ditempuh kendaraan saat menyelesaikan rutenya.maxLoadsmemetakan jenis muatan ke jumlah muatan maksimum yang dibawa oleh kendaraan di titik mana pun di 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 Membuat 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
}
}
}