ShipmentRoute

Rute kendaraan dapat diuraikan, di sepanjang sumbu waktu, seperti ini (kami berasumsi 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). 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, berarti terdapat transisi n+1.
  • Kunjungan selalu dikelilingi oleh transisi sebelum (indeks yang sama) dan transisi setelahnya (indeks + 1).
  • Awal kendaraan selalu diikuti dengan transisi #0.
  • Bagian akhir kendaraan selalu didahului oleh transisi #n.

Memperbesar, berikut adalah 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 ini cara PERJALANAN, JEDA, TUNDA, dan WAIT dapat diatur selama transisi.

  • Mereka tidak tumpang tindih.
  • Currents bersifat unik dan harus berupa jangka waktu yang berurutan tepat sebelum kunjungan berikutnya (atau waktu berakhir kendaraan). Dengan demikian, Anda cukup mengetahui durasi keterlambatan untuk mengetahui waktu mulai dan waktu berakhirnya.
  • BREAKS adalah periode waktu yang berurutan dan tidak tumpang-tindih. Respons menentukan waktu mulai dan durasi setiap jeda.
  • PERJALANAN dan WAIT "dapat di-preempt": keduanya dapat terganggu beberapa kali selama transisi ini. Klien dapat berasumsi bahwa perjalanan terjadi "sesegera mungkin" dan "menunggu" 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)
  },
  "routeCosts": {
    string: number,
    ...
  },
  "routeTotalCost": number
}
Kolom
vehicleIndex

integer

Kendaraan yang melakukan rute, yang diidentifikasi dengan indeksnya di sumber ShipmentModel.

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.

Stempel waktu dalam format RFC3339 UTC "Zulu", dengan resolusi nanodetik dan maksimal sembilan digit fraksional. Contoh: "2014-10-02T15:01:23Z" dan "2014-10-02T15:01:23.045123456Z".

vehicleEndTime

string (Timestamp format)

Waktu saat kendaraan menyelesaikan rutenya.

Stempel waktu dalam format RFC3339 UTC "Zulu", dengan resolusi nanodetik dan maksimal sembilan digit fraksional. Contoh: "2014-10-02T15:01:23Z" dan "2014-10-02T15:01:23.045123456Z".

visits[]

object (Visit)

Urutan kunjungan yang diurutkan mewakili rute. kunjungan[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 rute diprediksi menggunakan perkiraan durasi perjalanan berbasis lalu lintas. Waktu untuk menyelesaikan perjalanan yang disesuaikan lalu lintas, keterlambatan, dan jeda antar kunjungan mungkin tidak cukup, sebelum kunjungan pertama, atau setelah kunjungan terakhir, sambil tetap memenuhi periode kunjungan dan waktu kendaraan. Misalnya,

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

Kedatangan pada next_visit kemungkinan akan terjadi lebih lambat dari periode waktu saat ini karena estimasi waktu perjalanan travelDuration(previous_visit, next_visit) ditingkatkan karena lalu lintas. Selain itu, jeda mungkin terpaksa tumpang-tindih dengan kunjungan karena peningkatan perkiraan waktu perjalanan dan pembatasan periode kunjungan atau jeda.

routePolyline

object (EncodedPolyline)

Representasi polyline rute yang dienkode. Kolom ini hanya diisi jika OptimizeToursRequest.populate_polylines ditetapkan ke true.

breaks[]

object (Break)

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

metrics

object (AggregatedMetrics)

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

routeCosts

map (key: string, value: number)

Biaya rute, 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, biaya["model.shipments.pickups.cost"] adalah jumlah semua biaya pengambilan selama perjalanan tersebut. Semua biaya yang ditentukan dalam model dilaporkan secara mendetail di sini, kecuali biaya yang terkait dengan TransitionAttributes yang hanya dilaporkan secara agregat mulai 2022/01.

Objek yang berisi daftar pasangan "key": value. Contoh: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

routeTotalCost

number

Total biaya rute. Jumlah semua biaya di peta biaya.

Kunjungi

Kunjungan yang dilakukan selama rute. Kunjungan ini berkaitan 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
}
Kolom
shipmentIndex

integer

Indeks kolom shipments di ShipmentModel sumber.

isPickup

boolean

Jika benar, kunjungan tersebut sesuai dengan pengambilan Shipment. Jika tidak, ini sesuai dengan penayangan.

visitRequestIndex

integer

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

startTime

string (Timestamp format)

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

Stempel waktu dalam format RFC3339 UTC "Zulu", dengan resolusi nanodetik dan maksimal sembilan digit fraksional. Contoh: "2014-10-02T15:01:23Z" dan "2014-10-02T15:01:23.045123456Z".

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 seperti Transition.loads (lihat kolom ini).

Objek yang berisi daftar pasangan "key": value. Contoh: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

detour

string (Duration format)

Waktu putar balik tambahan karena pengiriman yang dikunjungi di rute sebelum kunjungan dan potensi waktu tunggu yang disebabkan oleh rentang waktu. Jika kunjungan adalah pengiriman, putar balik 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, data ini akan 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, diakhiri dengan 's'. Contoh: "3.5s".

shipmentLabel

string

Salinan Shipment.label terkait, jika ditentukan dalam Shipment.

visitLabel

string

Salinan VisitRequest.label terkait, jika ditentukan dalam VisitRequest.

Transisi

Transisi antara dua peristiwa pada 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)
  },
  "vehicleLoads": {
    string: {
      object (VehicleLoad)
    },
    ...
  }
}
Kolom
travelDuration

string (Duration format)

Durasi perjalanan selama transisi ini.

Durasi dalam detik dengan maksimal sembilan digit pecahan, 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 ditetapkan ke true. Hal ini mungkin bersifat sementara (gangguan yang jarang terjadi di server traffic realtime) atau permanen (tidak ada data untuk lokasi ini).

delayDuration

string (Duration format)

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

Durasi dalam detik dengan maksimal sembilan digit pecahan, 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 jeda disimpan di ShipmentRoute.breaks.

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

waitDuration

string (Duration format)

Waktu yang dihabiskan untuk menunggu 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, diakhiri dengan 's'. Contoh: "3.5s".

totalDuration

string (Duration format)

Total durasi transisi, disediakan untuk memudahkan Anda. Sama dengan:

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

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

startTime

string (Timestamp format)

Waktu mulai transisi ini.

Stempel waktu dalam format RFC3339 UTC "Zulu", dengan resolusi nanodetik dan maksimal sembilan digit fraksional. Contoh: "2014-10-02T15:01:23Z" dan "2014-10-02T15:01:23.045123456Z".

routePolyline

object (EncodedPolyline)

Representasi polyline yang dienkode dari rute yang diikuti selama transisi. Kolom ini hanya diisi jika populateTransitionPolylines ditetapkan ke 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 bukan nol pada beberapa pengiriman yang dilakukan di rute ini.

Beban selama transisi pertama adalah beban awal rute kendaraan. Kemudian, setelah setiap kunjungan, loadDemands kunjungan ditambahkan atau dikurangi untuk mendapatkan beban transisi berikutnya, bergantung pada apakah kunjungan tersebut merupakan pengambilan atau pengiriman.

Objek yang berisi daftar pasangan "key": value. Contoh: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

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 mewakili titik yang dienkode dari polyline.

Istirahat

Data yang mewakili eksekusi jeda.

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

string (Timestamp format)

Waktu mulai istirahat.

Stempel waktu dalam format RFC3339 UTC "Zulu", dengan resolusi nanodetik dan maksimal sembilan digit fraksional. Contoh: "2014-10-02T15:01:23Z" dan "2014-10-02T15:01:23.045123456Z".

duration

string (Duration format)

Durasi istirahat.

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