ShipmentRoute

Rute kendaraan dapat diuraikan, sepanjang sumbu waktu, seperti ini (kita asumsikan 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 membedakan antara:

  • "peristiwa tepat waktu", seperti awal dan akhir perjalanan 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 memiliki durasi nol, yaitu dimulai dan diakhiri pada detik yang sama, interval waktu sering kali memiliki durasi positif.

Invarian:

  • Jika ada n kunjungan, ada n+1 transisi.
  • Kunjungan selalu diawali dengan transisi sebelumnya (indeks yang sama) dan transisi setelahnya (indeks + 1).
  • Kendaraan selalu dimulai dengan transisi #0.
  • Akhir kendaraan selalu didahului oleh transisi #n.

Saat diperbesar, berikut 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 TRAVEL, BREAKS, DELAY, dan WAIT selama transisi.

  • Keduanya tidak tumpang-tindih.
  • PENUNDAAN bersifat unik dan harus merupakan periode waktu yang berdekatan tepat sebelum kunjungan berikutnya (atau akhir kendaraan). Jadi, Anda cukup mengetahui durasi penundaan untuk mengetahui waktu mulai dan berakhirnya.
  • BREAKS adalah periode waktu yang berurutan dan tidak tumpang-tindih. Respons menentukan waktu mulai dan durasi setiap jeda.
  • TRAVEL dan WAIT dapat "diinterupsi": keduanya dapat diinterupsi beberapa kali selama transisi ini. Klien dapat mengasumsikan bahwa perjalanan terjadi "sesegera mungkin" dan "tunggu" mengisi sisa waktu.

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 (Visit)
    }
  ],
  "transitions": [
    {
      object (Transition)
    }
  ],
  "hasTrafficInfeasibilities": boolean,
  "routePolyline": {
    object (EncodedPolyline)
  },
  "breaks": [
    {
      object (Break)
    }
  ],
  "metrics": {
    object (AggregatedMetrics)
  },
  "vehicleFullness": {
    object (VehicleFullness)
  },
  "routeCosts": {
    string: number,
    ...
  },
  "routeTotalCost": number
}
Kolom
vehicleIndex

integer

Kendaraan yang melakukan rute, diidentifikasi berdasarkan indeksnya dalam ShipmentModel sumber.

vehicleLabel

string

Label kendaraan yang melakukan rute ini, sama dengan ShipmentModel.vehicles(vehicleIndex).label, jika ditentukan.

vehicleStartTime

string (Timestamp format)

Waktu saat kendaraan memulai rutenya.

Menggunakan RFC 3339 yang outputnya akan selalu dinormalisasi Z dan menggunakan 0, 3, 6, atau 9 digit pecahan. Offset selain "Z" juga diterima. Contoh: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z", atau "2014-10-02T15:01:23+05:30".

vehicleEndTime

string (Timestamp format)

Waktu saat kendaraan menyelesaikan rutenya.

Menggunakan RFC 3339 yang outputnya akan selalu dinormalisasi Z dan menggunakan 0, 3, 6, atau 9 digit pecahan. Offset selain "Z" juga diterima. Contoh: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z", atau "2014-10-02T15:01:23+05:30".

visits[]

object (Visit)

Urutan kunjungan yang teratur yang merepresentasikan rute. visits[i] adalah kunjungan ke-i dalam rute. Jika kolom ini kosong, kendaraan dianggap tidak digunakan.

transitions[]

object (Transition)

Daftar transisi yang diurutkan untuk rute.

hasTrafficInfeasibilities

boolean

Jika OptimizeToursRequest.consider_road_traffic disetel ke benar (true), kolom ini menunjukkan bahwa inkonsistensi dalam waktu tempuh rute diprediksi menggunakan perkiraan durasi perjalanan berbasis lalu lintas. Mungkin tidak ada cukup waktu untuk menyelesaikan perjalanan yang disesuaikan dengan lalu lintas, keterlambatan, dan jeda di antara kunjungan, sebelum kunjungan pertama, atau setelah kunjungan terakhir, sambil tetap memenuhi jendela waktu kunjungan dan kendaraan. Misalnya,

  startTime(previous_visit) + duration(previous_visit) +
  travelDuration(previous_visit, next_visit) > startTime(next_visit)

Kedatangan di next_visit kemungkinan akan terjadi lebih lambat daripada rentang waktu saat ini karena perkiraan waktu perjalanan yang meningkat travelDuration(previous_visit, next_visit) karena lalu lintas. Selain itu, istirahat mungkin dipaksa untuk tumpang-tindih dengan kunjungan karena peningkatan perkiraan waktu perjalanan dan batasan rentang waktu istirahat atau kunjungan.

routePolyline

object (EncodedPolyline)

Representasi polyline yang dienkode untuk rute. Kolom ini hanya diisi jika OptimizeToursRequest.populate_polylines disetel ke benar (true).

breaks[]

object (Break)

Istirahat yang dijadwalkan untuk kendaraan yang melakukan rute ini. Urutan breaks mewakili interval waktu, yang masing-masing dimulai pada startTime yang sesuai dan berlangsung selama duration detik.

metrics

object (AggregatedMetrics)

Metrik durasi, jarak, dan pemuatan untuk rute ini. Kolom AggregatedMetrics dijumlahkan di semua ShipmentRoute.transitions atau ShipmentRoute.visits, bergantung pada konteksnya.

vehicleFullness

object (VehicleFullness)

Kolom VehicleFullness untuk menghitung seberapa dekat metrik yang dibatasi dengan batas kendaraan masing-masing. Kolomnya adalah rasio antara kolom metrik yang dibatasi (mis. AggregatedMetrics.travel_distance_meters) dan batas kendaraan terkait (mis. Vehicle.route_distance_limit).

Eksperimental: Perilaku atau keberadaan kolom ini dapat berubah di masa mendatang.

routeCosts

map (key: string, value: number)

Biaya rute, yang dikelompokkan berdasarkan kolom permintaan terkait biaya. Kuncinya adalah jalur proto, 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, costs["model.shipments.pickups.cost"] adalah jumlah semua biaya pengambilan di sepanjang rute. 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

number

Total biaya rute. Jumlah semua biaya dalam peta biaya.

Kunjungi

Kunjungan yang dilakukan selama rute. Kunjungan ini sesuai dengan pengambilan atau pengiriman Shipment.

Representasi JSON
{
  "shipmentIndex": integer,
  "isPickup": boolean,
  "visitRequestIndex": integer,
  "startTime": string,
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "detour": string,
  "shipmentLabel": string,
  "visitLabel": string,
  "visitType": enum (VisitType),
  "injectedSolutionLocationToken": integer
}
Kolom
shipmentIndex

integer

Indeks kolom shipments di ShipmentModel sumber.

isPickup

boolean

Jika benar, kunjungan sesuai dengan pengambilan Shipment. Jika tidak, kunjungan sesuai dengan pengiriman.

visitRequestIndex

integer

Indeks VisitRequest di kolom pengambilan atau pengiriman Shipment (lihat isPickup).

startTime

string (Timestamp format)

Waktu saat kunjungan dimulai. Perhatikan bahwa kendaraan dapat tiba lebih awal dari waktu ini di lokasi kunjungan. Waktu konsisten dengan ShipmentModel.

Menggunakan RFC 3339 yang outputnya akan selalu dinormalisasi Z dan menggunakan 0, 3, 6, atau 9 digit pecahan. Offset selain "Z" juga diterima. Contoh: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z", atau "2014-10-02T15:01:23+05:30".

loadDemands

map (key: string, value: object (Load))

Total permintaan pemuatan kunjungan sebagai jumlah pengiriman dan permintaan kunjungan loadDemands. Nilainya negatif jika kunjungan adalah pengiriman. Permintaan dilaporkan untuk jenis yang sama dengan Transition.loads (lihat kolom ini).

detour

string (Duration format)

Waktu perjalanan tambahan karena pengiriman yang dikunjungi di rute sebelum kunjungan dan potensi waktu tunggu yang disebabkan oleh rentang waktu. Jika kunjungan adalah pengiriman, perjalanan dihitung dari kunjungan pengambilan yang sesuai dan sama dengan:

startTime(delivery) - startTime(pickup)
- (duration(pickup) + travel duration from the pickup location
to the delivery location).

Jika tidak, nilai ini dihitung dari startLocation kendaraan dan sama dengan:

startTime - vehicleStartTime - travel duration from
the vehicle's `startLocation` to the visit.

Durasi dalam detik dengan maksimal sembilan digit pecahan, yang diakhiri dengan 's'. Contoh: "3.5s".

shipmentLabel

string

Salinan Shipment.label yang sesuai, jika ditentukan dalam Shipment.

visitLabel

string

Salinan VisitRequest.label yang sesuai, jika ditentukan dalam VisitRequest.

visitType

enum (VisitType)

Opsional. Menentukan jenis kunjungan. Menggantikan kolom Visit.is_pickup.

injectedSolutionLocationToken

integer

Token buram yang merepresentasikan informasi tentang lokasi kunjungan.

Kolom ini dapat diisi dalam kunjungan rute hasil jika VisitRequest.avoid_u_turns disetel ke benar untuk kunjungan ini atau jika ShipmentModel.avoid_u_turns disetel ke benar dalam permintaan OptimizeToursRequest.

Eksperimental: Lihat https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request untuk mengetahui detail selengkapnya.

VisitType

Menunjukkan apakah kunjungan adalah pengambilan, pengiriman, atau kunjungan ke Stop. Kunjungan ke Stop hanya digunakan jika pengoptimalan multimodal diaktifkan.

Enum
VISIT_TYPE_UNSPECIFIED Jenis kunjungan tidak ditentukan.
PICKUP_SHIPMENT Kunjungan sesuai dengan pengambilan pengiriman.
DELIVER_SHIPMENT Kunjungan sesuai dengan pengiriman.

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 (EncodedPolyline)
  },
  "routeToken": string,
  "vehicleLoads": {
    string: {
      object (VehicleLoad)
    },
    ...
  }
}
Kolom
travelDuration

string (Duration format)

Durasi perjalanan selama transisi ini.

Durasi dalam detik dengan maksimal sembilan digit pecahan, yang diakhiri dengan 's'. Contoh: "3.5s".

travelDistanceMeters

number

Jarak yang ditempuh selama transisi.

trafficInfoUnavailable

boolean

Jika traffic diminta melalui OptimizeToursRequest.consider_road_traffic, dan info traffic tidak dapat diambil untuk Transition, boolean ini disetel ke benar (true). Hal ini mungkin bersifat sementara (gangguan langka di server lalu lintas real-time) atau permanen (tidak ada data untuk lokasi ini).

delayDuration

string (Duration format)

Jumlah durasi penundaan yang diterapkan pada transisi ini. Jika ada, penundaan dimulai tepat delayDuration detik sebelum peristiwa berikutnya (akhir kunjungan atau akhir perjalanan). Lihat TransitionAttributes.delay.

Durasi dalam detik dengan maksimal sembilan digit pecahan, yang diakhiri dengan 's'. Contoh: "3.5s".

breakDuration

string (Duration format)

Jumlah durasi jeda yang terjadi selama transisi ini, jika ada. Detail tentang waktu mulai dan durasi setiap istirahat disimpan di ShipmentRoute.breaks.

Durasi dalam detik dengan maksimal sembilan digit pecahan, yang diakhiri dengan 's'. Contoh: "3.5s".

waitDuration

string (Duration format)

Waktu yang dihabiskan untuk menunggu selama transisi ini. Durasi menunggu 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 's'. Contoh: "3.5s".

totalDuration

string (Duration format)

Total durasi transisi, disediakan untuk kemudahan. Nilainya sama dengan:

  • kunjungan berikutnya startTime (atau vehicleEndTime jika ini adalah transisi terakhir) - startTime transisi ini;
  • jika ShipmentRoute.has_traffic_infeasibilities salah (false), maka berlaku juga hal berikut: `totalDuration = travelDuration + delayDuration
  • breakDuration + waitDuration`.

Durasi dalam detik dengan maksimal sembilan digit pecahan, yang diakhiri dengan 's'. Contoh: "3.5s".

startTime

string (Timestamp format)

Waktu mulai transisi ini.

Menggunakan RFC 3339 yang outputnya akan selalu dinormalisasi Z dan menggunakan 0, 3, 6, atau 9 digit pecahan. Offset selain "Z" juga diterima. Contoh: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z", atau "2014-10-02T15:01:23+05:30".

routePolyline

object (EncodedPolyline)

Representasi polyline yang dienkode dari rute yang diikuti selama transisi. Kolom ini hanya diisi jika populateTransitionPolylines ditetapkan ke benar (true).

routeToken

string

Hanya output. Token buram yang dapat diteruskan ke Navigation SDK untuk merekonstruksi rute selama navigasi, dan, jika terjadi pengalihan rute, menghormati niat 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 populateTransitionPolylines ditetapkan ke benar (true).

vehicleLoads

map (key: string, value: object (VehicleLoad))

Muatan kendaraan selama transisi ini, untuk setiap jenis yang muncul di Vehicle.load_limits kendaraan ini, atau yang memiliki Shipment.load_demands tidak nol pada beberapa pengiriman yang dilakukan di rute ini.

Muatan selama transisi pertama adalah muatan awal rute kendaraan. Kemudian, setelah setiap kunjungan, loadDemands kunjungan ditambahkan atau dikurangi untuk mendapatkan pemuatan transisi berikutnya, bergantung pada apakah kunjungan tersebut berupa pengambilan atau pengiriman.

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

String yang merepresentasikan titik-titik polyline yang dienkode.

Istirahat

Data yang mewakili eksekusi istirahat.

Representasi JSON
{
  "startTime": string,
  "duration": string
}
Kolom
startTime

string (Timestamp format)

Waktu mulai istirahat.

Menggunakan RFC 3339 yang outputnya akan selalu dinormalisasi Z dan menggunakan 0, 3, 6, atau 9 digit pecahan. Offset selain "Z" juga diterima. Contoh: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z", atau "2014-10-02T15:01:23+05:30".

duration

string (Duration format)

Durasi istirahat.

Durasi dalam detik dengan maksimal sembilan digit pecahan, yang diakhiri dengan 's'. Contoh: "3.5s".

VehicleFullness

VehicleFullness adalah metrik yang menghitung seberapa penuh kendaraan. Setiap kolom VehicleFullness berada di antara 0 dan 1, yang dihitung sebagai rasio antara kolom metrik yang dibatasi (misalnya, AggregatedMetrics.travel_distance_meters) dan batas kendaraan terkait (misalnya, Vehicle.route_distance_limit), jika ada. Jika tidak, rasio kelengkapan akan tetap tidak disetel. Jika batasnya adalah 0, kolom akan disetel ke 1. Catatan: jika rute mengalami masalah karena lalu lintas, beberapa rasio keterisian mentah mungkin melebihi 1,0, misalnya, kendaraan mungkin melebihi batas jaraknya. Dalam kasus ini, kami membatasi nilai kecukupan pada 1,0.

Representasi JSON
{
  "maxFullness": number,
  "distance": number,
  "travelDuration": number,
  "activeDuration": number,
  "maxLoad": number,
  "activeSpan": number
}
Kolom
maxFullness

number

Maksimum semua kolom lainnya dalam pesan ini.

distance

number

Rasio antara AggregatedMetrics.travel_distance_meters dan Vehicle.route_distance_limit. Jika Vehicle.route_distance_limit tidak disetel, kolom ini juga tidak akan disetel.

travelDuration

number

Rasio antara [AggregatedMetrics.travel_duration_seconds][] dan Vehicle.travel_duration_limit. Jika Vehicle.travel_duration_limit tidak disetel, kolom ini juga tidak akan disetel.

activeDuration

number

Rasio antara [AggregatedMetrics.total_duration_seconds][] dan Vehicle.route_duration_limit. Jika Vehicle.route_duration_limit tidak disetel, kolom ini juga tidak akan disetel.

maxLoad

number

Rasio maksimum di antara semua jenis [AggregatedMetrics.max_load][] dan Vehicle.load_limits masing-masing. Jika semua kolom Vehicle.load_limits tidak ditetapkan, kolom ini juga tidak akan ditetapkan.

activeSpan

number

Rasio (vehicleEndTime - vehicleStartTime) / (latestVehicleEndTime - earliestVehicleStartTime) untuk kendaraan tertentu. Jika penyebut tidak ada, (ShipmentModel.global_end_time - ShipmentModel.global_start_time) akan digunakan sebagai gantinya.