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 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 Zeitintervalle können manchmal eine Dauer von null haben, d. h. sie beginnen und enden in derselben Sekunde. Häufig haben sie jedoch eine positive Dauer.
Invarianten:
- Wenn es n Besuche gibt, gibt es n+1 Übergänge.
- Ein Besuch wird immer von einer vorherigen (gleicher Index) und einer nachfolgenden (Index + 1) Transition umgeben.
- Auf den Fahrzeugstart folgt immer der Übergang 0.
- Dem Ende des Fahrzeugs geht immer die Übergabe #n voraus.
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 Verzögerungsdauer zu kennen, um den Beginn und das Ende zu ermitteln.
- Die Pausen 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 die Fahrt „so bald wie möglich“ erfolgt und dass die verbleibende Zeit mit „warten“ gefüllt wird.
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 ( |
Felder | |
---|---|
vehicleIndex |
Fahrzeug, das die Route ausführt, identifiziert durch seinen Index in der Quelle |
vehicleLabel |
Label des Fahrzeugs, das diese Route ausführt, ist gleich |
vehicleStartTime |
Startzeit des Fahrzeugs. Ein Zeitstempel im Format RFC3339 UTC "Zulu" mit einer Auflösung im Nanosekundenbereich und bis zu neun Nachkommastellen. Beispiele: |
vehicleEndTime |
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: |
visits[] |
Geordnete Abfolge von Besuchen, die eine Route darstellen. Besuche[i] ist der i-te Besuch auf der Route. Wenn dieses Feld leer ist, gilt das Fahrzeug als nicht genutzt. |
transitions[] |
Sortierte Liste der Übergänge für die Route. |
hasTrafficInfeasibilities |
Wenn
Die Ankunft bei next_visit erfolgt aufgrund der erhöhten geschätzten Fahrtzeit von |
routePolyline |
Die codierte Polyliniendarstellung der Route. Dieses Feld wird nur ausgefüllt, wenn |
breaks[] |
Geplante Pausen für das Fahrzeug, das auf dieser Route unterwegs ist. Die Sequenz |
metrics |
Messwerte für Dauer, Entfernung und Last für diese Route. Die Felder von |
routeCosts |
Kosten der Route, aufgeschlüsselt nach kostenbezogenen Anfragefeldern. Die Schlüssel sind Proto-Pfade, relativ zur Eingabe von OptimizeToursRequest, z. B. „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 1. Januar 2022 nur zusammengefasst dargestellt werden. Ein Objekt, das eine Liste von |
routeTotalCost |
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 ( |
Felder | |
---|---|
shipmentIndex |
Index des Felds |
isPickup |
Falls wahr, entspricht der Besuch der Abholung eines |
visitRequestIndex |
Index für |
startTime |
Beginn des Besuchs. Beachte, dass das Fahrzeug möglicherweise früher am Ort ankommt. Die Zeiten stimmen mit den Ein Zeitstempel im Format RFC3339 UTC "Zulu" mit einer Auflösung im Nanosekundenbereich und bis zu neun Nachkommastellen. Beispiele: |
loadDemands |
Der gesamte Besuchslastbedarf als Summe der Sendung und der Besuchsanfrage Ein Objekt, das eine Liste von |
detour |
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:
Andernfalls wird er anhand des Fahrzeugs
Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit " |
shipmentLabel |
Kopie der entsprechenden |
visitLabel |
Kopie des entsprechenden |
injectedSolutionLocationToken |
Ein undurchsichtiges Token, das Informationen zu einem besuchten Standort darstellt. Dieses Feld kann bei Besuchen der Ergebnisrouten ausgefüllt werden, wenn |
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 Fahrtmesswerte 0.
JSON-Darstellung |
---|
{ "travelDuration": string, "travelDistanceMeters": number, "trafficInfoUnavailable": boolean, "delayDuration": string, "breakDuration": string, "waitDuration": string, "totalDuration": string, "startTime": string, "routePolyline": { object ( |
Felder | |
---|---|
travelDuration |
Reisedauer während dieser Umstellung. Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit " |
travelDistanceMeters |
Zurückgelegte Strecke während der Umstellung. |
trafficInfoUnavailable |
Wenn Traffic über |
delayDuration |
Summe der Verzögerungszeiten, die auf diesen Übergang angewendet wurden. Falls vorhanden, beginnt die Verzögerung genau Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit " |
breakDuration |
Summe der Dauer der Pausen während dieses Übergangs, falls vorhanden. Details zum Beginn und zur Dauer jeder Pause werden in Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit " |
waitDuration |
Die Wartezeit während dieser Umstellung. Die Wartezeit entspricht der Inaktivitätszeit, enthält keine Pausenzeit. Beachten Sie außerdem, dass diese Wartezeit in mehrere nicht zusammenhängende Intervalle unterteilt werden kann. Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit " |
totalDuration |
Gesamtdauer der Umstellung zur besseren Übersicht. Sie entspricht:
Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit " |
startTime |
Beginn dieser Umstellung. Ein Zeitstempel im Format RFC3339 UTC "Zulu" mit einer Auflösung im Nanosekundenbereich und bis zu neun Nachkommastellen. Beispiele: |
routePolyline |
Die codierte Polyliniendarstellung der Route, der während des Übergangs gefolgt wird. Dieses Feld wird nur ausgefüllt, wenn |
vehicleLoads |
Fahrzeugladevorgänge während dieses Übergangs für jeden Typ, der entweder in der Die Lasten während des ersten Übergangs sind die Startlasten der Fahrzeugroute. Nach jedem Besuch werden die Ein Objekt, das eine Liste von |
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, der codierte Punkte der Polylinie darstellt. |
Pause
Daten, die die Ausführung einer Pause darstellen.
JSON-Darstellung |
---|
{ "startTime": string, "duration": string } |
Felder | |
---|---|
startTime |
Beginn einer Pause. Ein Zeitstempel im Format RFC3339 UTC "Zulu" mit einer Auflösung im Nanosekundenbereich und bis zu neun Nachkommastellen. Beispiele: |
duration |
Dauer einer Pause. Die Dauer in Sekunden mit bis zu neun Nachkommastellen und am Ende mit " |