ShipmentRoute

Die Route eines Fahrzeugs kann so auf der Zeitachse dargestellt werden (wir gehen davon aus, dass es n Besuche gibt):

  |            |            |          |       |  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

Beachten Sie bitte Folgendes:

  • „Pünktliche Ereignisse“, z. B. Start und Ende des Fahrzeugs sowie Start und Ende jedes Besuchs (Ankunft und Abfahrt). Sie finden in einer bestimmten Sekunde statt.
  • "Zeitintervalle" wie die Besuche selbst und der Übergang zwischen den Besuchen Auch wenn Zeitintervalle manchmal eine Dauer von null haben, d.h. in derselben Sekunde beginnen und enden, haben sie häufig eine positive Dauer.

Invarianten:

  • Wenn es n Besuche gibt, gibt es n+1 Übergänge.
  • Ein Besuch ist immer von einem Übergang davor (gleicher Index) und einem Übergang danach (Index + 1) umgeben.
  • Auf den Fahrzeugstart folgt immer der Übergang 0.
  • Dem Fahrzeugende folgt immer der Übergang #n.

Beim Heranzoomen passiert bei Transition und Visit Folgendes:

---+-------------------------------------+-----------------------------+-->
   |           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

Und zu guter Letzt sehen Sie hier, wie REISE, UNTERBRECHUNGEN, VERZÖGERUNG und WARTE während eines Übergangs angeordnet werden können.

  • Sie überschneiden sich nicht.
  • Die VERZÖGERUNG ist einzigartig und muss ein fortlaufender Zeitraum direkt vor dem nächsten Besuch (oder dem Ende des Fahrzeugs) sein. Daher reicht es aus, die Verspätungsdauer zu kennen, um ihre Start- und Endzeit zu kennen.
  • Die BREAKS sind zusammenhängende, nicht überlappende Zeiträume. Die Antwort gibt die Startzeit und Dauer der einzelnen Pausen an.
  • TRAVEL und WAIT sind präemptiv und können während dieses Übergangs mehrmals unterbrochen werden. Kunden können davon ausgehen, dass Reisen „so schnell wie möglich“ stattfinden. und dass „Warten“ die verbleibende Zeit gefüllt.

Ein (komplexes) Beispiel:

                               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     |       |           |         |         ||
  ||     |       |           |       |           |         |         ||
--++-----------------------------------------------------------------++-->
JSON-Darstellung
{
  "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
}
Felder
vehicleIndex

integer

Fahrzeug, das die Route ausführt, das durch seinen Index in der Quelle ShipmentModel identifiziert wird.

vehicleLabel

string

Label des Fahrzeugs, das diese Route ausführt, ist gleich ShipmentModel.vehicles(vehicleIndex).label, falls angegeben.

vehicleStartTime

string (Timestamp format)

Startzeit des Fahrzeugs.

Ein Zeitstempel im Format RFC3339 UTC "Zulu" mit einer Auflösung im Nanosekundenbereich und bis zu neun Nachkommastellen. Beispiele: "2014-10-02T15:01:23Z" und "2014-10-02T15:01:23.045123456Z".

vehicleEndTime

string (Timestamp format)

Uhrzeit, zu der das Fahrzeug seine Route beendet.

Ein Zeitstempel im Format RFC3339 UTC "Zulu" mit einer Auflösung im Nanosekundenbereich und bis zu neun Nachkommastellen. Beispiele: "2014-10-02T15:01:23Z" und "2014-10-02T15:01:23.045123456Z".

visits[]

object (Visit)

Geordnete Abfolge von Besuchen, die eine Route darstellen. Visits[i] ist der i-te Besuch auf der Route. Wenn dieses Feld leer ist, gilt das Fahrzeug als nicht genutzt.

transitions[]

object (Transition)

Sortierte Liste der Übergänge für die Route.

hasTrafficInfeasibilities

boolean

Wenn OptimizeToursRequest.consider_road_traffic auf „true“ gesetzt ist, gibt dieses Feld an, dass Inkonsistenzen bei den Routenzeiten anhand von verkehrsbasierten Schätzungen zur Reisedauer vorhergesagt werden. Unter Umständen reicht die Zeit nicht aus, um verkehrsangepasste Fahrten, Verspätungen und Pausen zwischen Besuchen, vor dem ersten oder nach dem letzten Besuch abzuschließen, ohne dabei die Zeitfenster für die Fahrt und die Fahrzeugzeit einzuhalten. Beispiel:

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

Die Ankunft bei next_visit wird wahrscheinlich später als im aktuellen Zeitfenster erfolgen, da die geschätzte Fahrtzeit aufgrund der Verkehrslage um travelDuration(previous_visit, next_visit) geschätzt wird. Außerdem kann es vorkommen, dass sich eine Pause mit einem Besuch überschneidet, da die geschätzte Reisedauer und Einschränkungen für Besuchs- und Pausenzeiträume erhöht wurden.

routePolyline

object (EncodedPolyline)

Die codierte Polyliniendarstellung der Route. Dieses Feld wird nur ausgefüllt, wenn OptimizeToursRequest.populate_polylines auf „true“ gesetzt ist.

breaks[]

object (Break)

Geplante Pausen für das Fahrzeug, das auf dieser Route unterwegs ist. Die breaks-Sequenz stellt Zeitintervalle dar, die jeweils beim entsprechenden startTime beginnen und duration Sekunden dauern.

metrics

object (AggregatedMetrics)

Messwerte für Dauer, Entfernung und Last für diese Route. Die Felder von AggregatedMetrics werden je nach Kontext über alle ShipmentRoute.transitions oder ShipmentRoute.visits summiert.

routeCosts

map (key: string, value: number)

Kosten der Route, aufgeschlüsselt nach kostenbezogenen Anfragefeldern. Die Schlüssel sind Proto-Pfade, relativ zur Eingabe von OptimizeToursRequest. Beispiel: „model.shipments.pickups.cost“. Die Werte sind die Gesamtkosten, die vom entsprechenden Kostenfeld generiert und über die gesamte Route aggregiert werden. Mit anderen Worten: „cost“["model.shipments.pickups.cost"] ist die Summe aller Abholkosten für die Route. Alle im Modell definierten Kosten werden hier detailliert aufgeführt, mit Ausnahme von Kosten im Zusammenhang mit Übergangsattributen, die seit dem 01.01.2022 nur in aggregierter Form gemeldet werden.

Ein Objekt, das eine Liste von "key": value-Paaren enthält. Beispiel: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

routeTotalCost

number

Gesamtkosten der Route. Die Summe aller Kosten in der Kostenliste.

Aufrufen

Ein Besuch während einer Route. Dieser Besuch entspricht einer Abholung oder Lieferung einer Shipment.

JSON-Darstellung
{
  "shipmentIndex": integer,
  "isPickup": boolean,
  "visitRequestIndex": integer,
  "startTime": string,
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "detour": string,
  "shipmentLabel": string,
  "visitLabel": string
}
Felder
shipmentIndex

integer

Index des Felds shipments in der Quelle ShipmentModel.

isPickup

boolean

Falls wahr, entspricht der Besuch der Abholung eines Shipment. Andernfalls entspricht er einer Lieferung.

visitRequestIndex

integer

Index für VisitRequest im Abhol- oder Lieferfeld von Shipment (siehe isPickup).

startTime

string (Timestamp format)

Startzeit des Besuchs. Beachte, dass das Fahrzeug möglicherweise früher am Ort ankommt. Die Zeiten entsprechen den ShipmentModel.

Ein Zeitstempel im Format RFC3339 UTC "Zulu" mit einer Auflösung im Nanosekundenbereich und bis zu neun Nachkommastellen. Beispiele: "2014-10-02T15:01:23Z" und "2014-10-02T15:01:23.045123456Z".

loadDemands

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

Der gesamte Besuchslastbedarf als Summe der Sendung und der Besuchsanfrage loadDemands. Die Werte sind negativ, wenn es sich beim Besuch um eine Lieferung handelt. Es werden Nachfragen für dieselben Typen erfasst wie der Transition.loads (siehe dieses Feld).

Ein Objekt, das eine Liste von "key": value-Paaren enthält. Beispiel: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

detour

string (Duration format)

Zusätzliche Umleitungszeit aufgrund der Lieferungen, die vor dem Besuch auf der Route gefahren wurden, und der potenziellen Wartezeit, die sich aus Zeitfenstern ergibt. Wenn es sich beim Besuch um einen Lieferservice handelt, wird die Umleitung aus dem entsprechenden Abholtermin berechnet und ist gleich:

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

Andernfalls wird er vom startLocation des Fahrzeugs berechnet und ist gleich:

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

Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit "s". Beispiel: "3.5s".

shipmentLabel

string

Kopie der entsprechenden Shipment.label, sofern in Shipment angegeben.

visitLabel

string

Kopie der entsprechenden VisitRequest.label, sofern in VisitRequest angegeben.

Wechsel

Übergang zwischen zwei Ereignissen auf der Route. Weitere Informationen finden Sie in der Beschreibung von ShipmentRoute.

Wenn das Fahrzeug keine startLocation und/oder endLocation hat, sind die entsprechenden Messwerte für die Fahrt „0“.

JSON-Darstellung
{
  "travelDuration": string,
  "travelDistanceMeters": number,
  "trafficInfoUnavailable": boolean,
  "delayDuration": string,
  "breakDuration": string,
  "waitDuration": string,
  "totalDuration": string,
  "startTime": string,
  "routePolyline": {
    object (EncodedPolyline)
  },
  "vehicleLoads": {
    string: {
      object (VehicleLoad)
    },
    ...
  }
}
Felder
travelDuration

string (Duration format)

Reisedauer während dieses Übergangs.

Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit "s". Beispiel: "3.5s".

travelDistanceMeters

number

Die beim Übergang zurückgelegte Strecke.

trafficInfoUnavailable

boolean

Wenn Traffic über OptimizeToursRequest.consider_road_traffic angefordert wird und die Verkehrsinformationen für eine Transition nicht abgerufen werden konnten, wird dieser boolesche Wert auf „true“ gesetzt. Dies kann eine vorübergehende (seltene Störung der Echtzeitverkehrsserver) oder dauerhaft (keine Daten für diesen Standort) sein.

delayDuration

string (Duration format)

Summe der Verzögerungszeiten, die auf diesen Übergang angewendet wurden. Falls vorhanden, beginnt die Verzögerung genau delayDuration Sekunden vor dem nächsten Ereignis (Besuch oder Fahrzeugende). TransitionAttributes.delay ansehen.

Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit "s". Beispiel: "3.5s".

breakDuration

string (Duration format)

Summe der Dauer der Pausen während dieses Übergangs, falls vorhanden. Details zu Beginn und Dauer der einzelnen Pausen werden in ShipmentRoute.breaks gespeichert.

Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit "s". Beispiel: "3.5s".

waitDuration

string (Duration format)

Wartezeit während dieser Umstellung. Die Wartezeit entspricht der Inaktivitätszeit, enthält keine Pausenzeit. Beachten Sie auch, dass diese Wartezeit in mehrere nicht aufeinanderfolgende Intervalle aufgeteilt werden kann.

Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit "s". Beispiel: "3.5s".

totalDuration

string (Duration format)

Gesamtdauer der Umstellung zur besseren Übersicht. Er ist gleich:

  • Nächster Besuch startTime (oder vehicleEndTime, wenn dies der letzte Übergang ist) - startTime dieses Übergangs;
  • Wenn ShipmentRoute.has_traffic_infeasibilities „false“ ist, gilt zusätzlich Folgendes: `totalDuration = tripDuration + delayDuration
  • breakDuration + waitDuration`.

Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit "s". Beispiel: "3.5s".

startTime

string (Timestamp format)

Beginn dieser Umstellung.

Ein Zeitstempel im Format RFC3339 UTC "Zulu" mit einer Auflösung im Nanosekundenbereich und bis zu neun Nachkommastellen. Beispiele: "2014-10-02T15:01:23Z" und "2014-10-02T15:01:23.045123456Z".

routePolyline

object (EncodedPolyline)

Die codierte Polyliniendarstellung der Route, der während des Übergangs gefolgt wird. Dieses Feld wird nur ausgefüllt, wenn populateTransitionPolylines auf „true“ gesetzt ist.

vehicleLoads

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

Fahrzeugladevorgänge während dieses Übergangs für jeden Typ, der entweder in der Vehicle.load_limits dieses Fahrzeugs erscheint oder bei einigen Sendungen auf dieser Route einen Shipment.load_demands-Wert ungleich null hat.

Die Lasten während des ersten Übergangs sind die Startlasten der Fahrzeugroute. Nach jedem Besuch werden die loadDemands des Besuchs entweder hinzugefügt oder abgezogen, um die Ladevorgänge des nächsten Übergangs zu erhalten, je nachdem, ob der Besuch eine Abholung oder eine Lieferung war.

Ein Objekt, das eine Liste von "key": value-Paaren enthält. Beispiel: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

EncodedPolyline

Die codierte Darstellung einer Polylinie. Weitere Informationen zur Codierung von Polylinien finden Sie hier: https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding.

JSON-Darstellung
{
  "points": string
}
Felder
points

string

String, der codierte Punkte der Polylinie darstellt.

Pause

Daten zur Ausführung einer Pause.

JSON-Darstellung
{
  "startTime": string,
  "duration": string
}
Felder
startTime

string (Timestamp format)

Beginn einer Pause.

Ein Zeitstempel im Format RFC3339 UTC "Zulu" mit einer Auflösung im Nanosekundenbereich und bis zu neun Nachkommastellen. Beispiele: "2014-10-02T15:01:23Z" und "2014-10-02T15:01:23.045123456Z".

duration

string (Duration format)

Dauer einer Pause.

Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit "s". Beispiel: "3.5s".