ShipmentRoute

Die Route eines Fahrzeugs kann entlang der Zeitachse so zerlegt 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, dass wir einen Unterschied zwischen Folgendem haben:

  • „pünktliche Ereignisse“ wie Start und Ende des Fahrzeugs sowie Beginn und Ende jedes Besuchs (Ankunft und Abfahrt). Sie finden in einer bestimmten Sekunde statt.
  • Zeitintervallen wie die Besuche selbst und der Übergang zwischen den Besuchen. Obwohl Zeitintervalle manchmal eine Dauer von null haben, d.h. Beginn und Ende zur selben Sekunde, haben sie häufig eine positive Dauer.

Invarianten:

  • Bei n Besuchen gibt es n+1 Übergänge.
  • Ein Besuch ist immer von einem vor ihm stattfindenden Übergang (derselbe Index) und einem darauffolgenden Übergang (Index + 1) umgeben.
  • Nach dem Starten des Fahrzeugs folgt immer der Übergang Nr. 0.
  • Dem Fahrzeugende geht immer der Übergang #n voraus.

Beim Heranzoomen passiert Folgendes bei Transition und 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

Hier erfährst du, wie REISEN, BRECHEN, VERZÖGERUNG und WARTE bei einer Übergangsphase arrangiert werden können.

  • Sie überschneiden sich nicht.
  • Die VERZÖGERUNG ist eindeutig und muss ein zusammenhängender Zeitraum direkt vor dem nächsten Besuch (oder dem Ende des Fahrzeugs) sein. Daher reicht es aus, die Verzögerungsdauer zu kennen, um ihre Start- und Endzeit zu kennen.
  • Die BREAKS sind zusammenhängende Zeiträume, die sich nicht überschneiden. In der Antwort werden Beginn und Dauer jeder Unterbrechung angegeben.
  • TRAVEL und WAIT sind „auf Abruf verfügbar“: Sie können während dieses Übergangs mehrmals unterbrochen werden. Die Kunden können davon ausgehen, dass die Reise „so bald wie möglich“ erfolgt und dass „Warten“ die verbleibende Zeit belegt.

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 und anhand seines Index in der Quelle ShipmentModel identifiziert wird.

vehicleLabel

string

Label des Fahrzeugs, das diese Route durchführt; entspricht ShipmentModel.vehicles(vehicleIndex).label, falls angegeben.

vehicleStartTime

string (Timestamp format)

Uhrzeit, zu der das Fahrzeug seine Route beginnt.

Ein Zeitstempel im Format RFC3339 UTC „Zulu“ mit Nanosekundenauflösung 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 hat.

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

visits[]

object (Visit)

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

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 der Fahrtdauer vorhergesagt werden. Unter Umständen ist nicht genügend Zeit, um verkehrsbedingte Fahrt, Verspätungen und Pausen zwischen den Besuchen, vor dem ersten Besuch oder nach dem letzten Besuch abzuschließen, während die Besuchs- und Fahrzeugzeitfenster weiterhin eingehalten werden. Beispiel:

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

Die Ankunft bei „next_visit“ erfolgt wahrscheinlich später als im aktuellen Zeitfenster, da die geschätzte Reisezeit travelDuration(previous_visit, next_visit) aufgrund der Verkehrslage höher ist. Außerdem kann es sein, dass sich eine Pause mit einem Besuch überschneidet, da die geschätzte Reisezeit zunimmt und die Zeitfenster für die Besuchs- bzw. Pausenzeit zu lang sind.

routePolyline

object (EncodedPolyline)

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

breaks[]

object (Break)

Für das Fahrzeug, das diese Route durchführt, sind Pausen geplant. Die breaks-Sequenz stellt Zeitintervalle dar, die jeweils bei der entsprechenden startTime beginnen und duration Sekunden dauern.

metrics

object (AggregatedMetrics)

Messwerte zu 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, die sich auf die OptimizeToursRequest-Eingabe beziehen, z. B. „model.shipments.pickups.cost“. Die Werte sind die vom entsprechenden Kostenfeld generierten Gesamtkosten, die über die gesamte Route aggregiert werden. Mit anderen Worten, cost["model.shipments.pickups.cost"] ist die Summe aller Abholkosten auf der Route. Alle im Modell definierten Kosten sind hier im Detail enthalten. Ausgenommen hiervon sind Kosten für TransitionAttributes, die seit 2022/01 nur in aggregierter Form erfasst 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 Kostenübersicht.

Aufrufen

Ein Besuch, der während einer Route durchgeführt wurde. 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

Wenn „true“ festgelegt ist, entspricht der Besuch einer Abholung von Shipment. Andernfalls entspricht sie einer Auslieferung.

visitRequestIndex

integer

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

startTime

string (Timestamp format)

Startzeit des Besuchs Es kann sein, dass das Fahrzeug früher als erwartet am Zielort ankommt. Die Zeiten entsprechen dem ShipmentModel.

Ein Zeitstempel im Format RFC3339 UTC „Zulu“ mit Nanosekundenauflösung 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))

Die gesamte Nachfrage nach Besuchen in Form der Summe der Sendung und der loadDemands der Besuchsanforderung. Die Werte sind negativ, wenn es sich bei dem Besuch um eine Lieferung handelt. Es werden Anforderungen für denselben Typ wie der Transition.loads gemeldet (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 auf der Route vor dem Besuch und der potenziellen Wartezeit infolge der Zeitfenster. Wenn es sich bei dem Besuch um eine Lieferung 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 aus dem Fahrzeug startLocation berechnet und ist gleich:

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

Eine Dauer in Sekunden mit bis zu neun Nachkommastellen, die auf „s“ endet. Beispiel: "3.5s".

shipmentLabel

string

Kopie des entsprechenden Shipment.label, falls in Shipment angegeben.

visitLabel

string

Kopie des entsprechenden VisitRequest.label, falls in VisitRequest angegeben.

Übergänge

Ü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 Fahrtmesswerte 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.

Eine Dauer in Sekunden mit bis zu neun Nachkommastellen, die auf „s“ endet. Beispiel: "3.5s".

travelDistanceMeters

number

Die bei der Umstellung zurückgelegte Strecke.

trafficInfoUnavailable

boolean

Wenn Traffic über OptimizeToursRequest.consider_road_traffic angefordert wird und die Verkehrsinformationen für Transition nicht abgerufen werden konnten, wird dieser boolesche Wert auf „true“ gesetzt. Das kann vorübergehend (seltener Schluckauf bei den Echtzeit-Traffic-Servern) oder dauerhaft (keine Daten für diesen Standort) sein.

delayDuration

string (Duration format)

Summe der auf diesen Übergang angewendeten Verzögerungsdauern. Falls vorhanden, beginnt die Verspätung genau delayDuration Sekunden vor dem nächsten Ereignis (Besuch oder Ende des Fahrzeugs). TransitionAttributes.delay ansehen.

Eine Dauer in Sekunden mit bis zu neun Nachkommastellen, die auf „s“ endet. Beispiel: "3.5s".

breakDuration

string (Duration format)

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

Eine Dauer in Sekunden mit bis zu neun Nachkommastellen, die auf „s“ endet. Beispiel: "3.5s".

waitDuration

string (Duration format)

Wartezeit während dieses Übergangs. Die Wartezeit entspricht der Inaktivitätszeit und beinhaltet keine Pausenzeit. Beachten Sie auch, dass diese Wartezeit in mehrere nicht aufeinanderfolgende Intervalle aufgeteilt werden kann.

Eine Dauer in Sekunden mit bis zu neun Nachkommastellen, die auf „s“ endet. Beispiel: "3.5s".

totalDuration

string (Duration format)

Gesamtdauer der Umstellung (zur Übersichtlichkeit). Er ist gleich:

  • nächster Besuch startTime (oder vehicleEndTime, wenn dies der letzte Übergang ist) - dieser Übergang startTime;
  • Wenn ShipmentRoute.has_traffic_infeasibilities „false“ ist, gilt zusätzlich Folgendes: `totalDuration = travelDuration + durationDuration
  • breakDuration + WaitDuration".

Eine Dauer in Sekunden mit bis zu neun Nachkommastellen, die auf „s“ endet. Beispiel: "3.5s".

startTime

string (Timestamp format)

Beginn dieser Umstellung.

Ein Zeitstempel im Format RFC3339 UTC „Zulu“ mit Nanosekundenauflösung 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 gefü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 den Vehicle.load_limits dieses Fahrzeugs angezeigt wird oder einen Shipment.load_demands-Wert ungleich null bei einer Sendung auf dieser Route hat.

Die Lasten während des ersten Übergangs sind die Startlasten der Fahrzeugroute. Nach jedem Besuch werden die loadDemands des Besuchs entweder addiert oder subtrahiert, um die Ladevorgänge für den nächsten Übergang zu erhalten. Das hängt davon ab, ob es sich bei dem Besuch um eine Abholung oder eine Lieferung handelt.

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 die codierten Punkte der Polylinie darstellt.

Pause

Daten, die die Ausführung einer Werbeunterbrechung darstellen.

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

string (Timestamp format)

Beginn einer Pause.

Ein Zeitstempel im Format RFC3339 UTC „Zulu“ mit Nanosekundenauflösung 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.

Eine Dauer in Sekunden mit bis zu neun Nachkommastellen, die auf „s“ endet. Beispiel: "3.5s".