Rute kendaraan dapat diuraikan, di sepanjang sumbu waktu, seperti ini (kita mengasumsikan ada n kunjungan):
| | | | | T[2], | | |
| Transition | Visit #0 | | | V[2], | | |
| #0 | aka | T[1] | V[1] | ... | V[n-1] | T[n] |
| aka T[0] | V[0] | | | V[n-2],| | |
| | | | | T[n-1] | | |
^ ^ ^ ^ ^ ^ ^ ^
vehicle V[0].start V[0].end V[1]. V[1]. V[n]. V[n]. vehicle
start (arrival) (departure) start end start end end
Perhatikan bahwa kami membuat perbedaan antara:
- "peristiwa tepat waktu", seperti awal dan akhir kendaraan serta awal dan akhir setiap kunjungan (alias kedatangan dan keberangkatan). Peristiwa ini terjadi pada detik tertentu.
- "interval waktu", seperti kunjungan itu sendiri, dan transisi antar-kunjungan. Meskipun interval waktu terkadang dapat memiliki durasi nol, yaitu dimulai dan berakhir pada detik yang sama, interval waktu sering kali memiliki durasi positif.
Invarian:
- Jika ada n kunjungan, maka ada transisi n+1.
- Kunjungan selalu diapit oleh transisi sebelumnya (indeks yang sama) dan transisi setelahnya (indeks + 1).
- Awal kendaraan selalu diikuti dengan transisi #0.
- Akhir kendaraan selalu didahului dengan transisi #n.
Mari kita lihat lebih dekat, berikut hal yang terjadi selama Transition
dan Visit
:
---+-------------------------------------+-----------------------------+-->
| TRANSITION[i] | VISIT[i] |
| | |
| * TRAVEL: the vehicle moves from | PERFORM the visit: |
| VISIT[i-1].departure_location to | |
| VISIT[i].arrival_location, which | * Spend some time: |
| takes a given travel duration | the "visit duration". |
| and distance | |
| | * Load or unload |
| * BREAKS: the driver may have | some quantities from the |
| breaks (e.g. lunch break). | vehicle: the "demand". |
| | |
| * WAIT: the driver/vehicle does | |
| nothing. This can happen for | |
| many reasons, for example when | |
| the vehicle reaches the next | |
| event's destination before the | |
| start of its time window | |
| | |
| * DELAY: *right before* the next | |
| arrival. E.g. the vehicle and/or | |
| driver spends time unloading. | |
| | |
---+-------------------------------------+-----------------------------+-->
^ ^ ^
V[i-1].end V[i].start V[i].end
Terakhir, berikut cara mengatur PERJALANAN, BREAKS, TUNDA, dan TUNGGU selama transisi.
- Keduanya tidak tumpang-tindih.
- DELAY bersifat unik dan harus berupa jangka waktu yang berurutan tepat sebelum kunjungan berikutnya (atau akhir kendaraan). Dengan demikian, cukup mengetahui durasi penundaan untuk mengetahui waktu mulai dan berakhir.
- BREAKS adalah periode waktu yang berdekatan dan tidak tumpang-tindih. Respons menentukan waktu mulai dan durasi setiap jeda.
- TRAVEL dan WAIT dapat "dapat di-preempt": dapat diinterupsi beberapa kali selama transisi ini. Klien dapat berasumsi bahwa perjalanan terjadi "sesegera mungkin" dan bahwa "wait" mengisi waktu yang tersisa.
Contoh (kompleks):
TRANSITION[i]
--++-----+-----------------------------------------------------------++-->
|| | | | | | | ||
|| T | B | T | | B | | D ||
|| r | r | r | W | r | W | e ||
|| a | e | a | a | e | a | l ||
|| v | a | v | i | a | i | a ||
|| e | k | e | t | k | t | y ||
|| l | | l | | | | ||
|| | | | | | | ||
--++-----------------------------------------------------------------++-->
Representasi JSON |
---|
{ "vehicleIndex": integer, "vehicleLabel": string, "vehicleStartTime": string, "vehicleEndTime": string, "visits": [ { object ( |
Kolom | |
---|---|
vehicleIndex |
Kendaraan yang melakukan rute, yang diidentifikasi berdasarkan indeksnya di |
vehicleLabel |
Label kendaraan yang melakukan rute ini, sama dengan |
vehicleStartTime |
Waktu saat kendaraan memulai rutenya. Stempel waktu dalam format RFC3339 UTC "Zulu", dengan resolusi nanodetik dan hingga sembilan digit pecahan. Contoh: |
vehicleEndTime |
Waktu saat kendaraan menyelesaikan rutenya. Stempel waktu dalam format RFC3339 UTC "Zulu", dengan resolusi nanodetik dan hingga sembilan digit pecahan. Contoh: |
visits[] |
Urutan kunjungan yang diurutkan yang mewakili sebuah rute. Kunjungan[i] adalah kunjungan ke-i dalam rute. Jika kolom ini kosong, kendaraan dianggap tidak digunakan. |
transitions[] |
Daftar urutan transisi untuk rute. |
hasTrafficInfeasibilities |
Jika
Kedatangan di next_visit kemungkinan akan terjadi lebih lambat dari periode waktu saat ini karena peningkatan estimasi waktu perjalanan |
routePolyline |
Representasi polyline yang dienkode dari rute. Kolom ini hanya diisi jika |
breaks[] |
Waktu istirahat dijadwalkan untuk kendaraan yang melakukan rute ini. Urutan |
metrics |
Metrik durasi, jarak, dan beban untuk rute ini. Kolom |
routeCosts |
Biaya rute, yang dikelompokkan berdasarkan kolom permintaan terkait biaya. Kuncinya adalah jalur proto, yang relatif terhadap input OptimizeToursRequest, misalnya "model.shipments.pickups.cost", dan nilainya adalah total biaya yang dihasilkan oleh kolom biaya yang sesuai, yang digabungkan di seluruh rute. Dengan kata lain, biaya["model.shipments.pickups.cost"] adalah jumlah semua biaya pengambilan selama rute tersebut. Semua biaya yang ditentukan dalam model dilaporkan secara mendetail di sini, kecuali biaya yang terkait dengan TransitionAttributes yang hanya dilaporkan secara gabungan mulai 01/2022. |
routeTotalCost |
Total biaya rute. Jumlah semua biaya di peta biaya. |
Kunjungi
Kunjungan yang dilakukan selama rute. Kunjungan ini berkaitan dengan pengambilan atau pengantaran Shipment
.
Representasi JSON |
---|
{
"shipmentIndex": integer,
"isPickup": boolean,
"visitRequestIndex": integer,
"startTime": string,
"loadDemands": {
string: {
object ( |
Kolom | |
---|---|
shipmentIndex |
Indeks kolom |
isPickup |
Jika benar, kunjungan sesuai dengan pengambilan |
visitRequestIndex |
Indeks |
startTime |
Waktu kunjungan dimulai. Perhatikan bahwa kendaraan mungkin tiba lebih awal dari waktu ini di lokasi kunjungan. Waktu konsisten dengan Stempel waktu dalam format RFC3339 UTC "Zulu", dengan resolusi nanodetik dan maksimal sembilan digit pecahan. Contoh: |
loadDemands |
Total permintaan beban kunjungan sebagai jumlah pengiriman dan permintaan kunjungan |
detour |
Waktu pengalihan tambahan karena pengiriman yang dikunjungi di rute sebelum kunjungan dan potensi waktu tunggu yang disebabkan oleh periode waktu. Jika kunjungan adalah pengiriman, pengalihan dihitung dari kunjungan pengambilan yang sesuai dan sama dengan:
Jika tidak, nilai ini dihitung dari
Durasi dalam detik dengan maksimal sembilan digit pecahan, yang diakhiri dengan ' |
shipmentLabel |
Salinan |
visitLabel |
Salinan |
Transisi
Transisi antara dua peristiwa di rute. Lihat deskripsi ShipmentRoute
.
Jika kendaraan tidak memiliki startLocation
dan/atau endLocation
, metrik perjalanan yang sesuai adalah 0.
Representasi JSON |
---|
{ "travelDuration": string, "travelDistanceMeters": number, "trafficInfoUnavailable": boolean, "delayDuration": string, "breakDuration": string, "waitDuration": string, "totalDuration": string, "startTime": string, "routePolyline": { object ( |
Kolom | |
---|---|
travelDuration |
Durasi perjalanan selama transisi ini. Durasi dalam detik dengan maksimal sembilan digit pecahan, yang diakhiri dengan ' |
travelDistanceMeters |
Jarak yang ditempuh selama transisi. |
trafficInfoUnavailable |
Jika traffic diminta melalui |
delayDuration |
Jumlah durasi penundaan yang diterapkan pada transisi ini. Jika ada, penundaan dimulai tepat Durasi dalam detik dengan maksimal sembilan digit pecahan, yang diakhiri dengan ' |
breakDuration |
Jumlah durasi jeda yang terjadi selama transisi ini, jika ada. Detail tentang waktu mulai dan durasi setiap jeda disimpan di Durasi dalam detik dengan maksimal sembilan digit pecahan, yang diakhiri dengan ' |
waitDuration |
Waktu tunggu selama transisi ini. Durasi tunggu sesuai dengan waktu tidak ada aktivitas dan tidak termasuk waktu istirahat. Perhatikan juga bahwa waktu tunggu ini dapat dibagi menjadi beberapa interval yang tidak berdekatan. Durasi dalam detik dengan maksimal sembilan digit pecahan, yang diakhiri dengan ' |
totalDuration |
Total durasi transisi, disediakan untuk memudahkan. Nilainya sama dengan:
Durasi dalam detik dengan maksimal sembilan digit pecahan, yang diakhiri dengan ' |
startTime |
Waktu mulai transisi ini. Stempel waktu dalam format RFC3339 UTC "Zulu", dengan resolusi nanodetik dan hingga sembilan digit pecahan. Contoh: |
routePolyline |
Representasi polyline yang dienkode dari rute yang diikuti selama transisi. Kolom ini hanya diisi jika |
routeToken |
Hanya output. Token buram yang dapat diteruskan ke Navigation SDK untuk merekonstruksi rute selama navigasi, dan, jika terjadi perubahan rute, memenuhi maksud awal saat rute dibuat. Perlakukan token ini sebagai blob buram. Jangan bandingkan nilainya di seluruh permintaan karena nilainya dapat berubah meskipun layanan menampilkan rute yang sama persis. Kolom ini hanya diisi jika |
vehicleLoads |
Kendaraan dimuat selama transisi ini, untuk setiap jenis yang muncul di Beban selama transisi pertama adalah beban awal rute kendaraan. Kemudian, setelah setiap kunjungan, |
EncodedPolyline
Representasi polyline yang dienkode. Informasi selengkapnya tentang encoding polyline dapat ditemukan di sini: https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding.
Representasi JSON |
---|
{ "points": string } |
Kolom | |
---|---|
points |
String yang mewakili titik yang dienkode dari polyline. |
Istirahat
Data yang mewakili eksekusi jeda.
Representasi JSON |
---|
{ "startTime": string, "duration": string } |
Kolom | |
---|---|
startTime |
Waktu mulai istirahat. Stempel waktu dalam format RFC3339 UTC "Zulu", dengan resolusi nanodetik dan maksimal sembilan digit pecahan. Contoh: |
duration |
Durasi jeda. Durasi dalam detik dengan maksimal sembilan digit pecahan, yang diakhiri dengan ' |