Package google.maps.routeoptimization.v1

Index

RouteOptimization

Ein Dienst zur Optimierung von Fahrzeugtouren.

Gültigkeit bestimmter Feldtypen:

  • google.protobuf.Timestamp
    • Die Zeiten sind in Unix-Zeit angegeben: Sekunden seit dem 01.01.1970, 00:00:00 Uhr (UTC).
    • „seconds“ muss zwischen 0 und 253402300799 liegen, also zwischen [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00].
    • „nanos“ muss nicht festgelegt oder auf „0“ gesetzt sein.
  • google.protobuf.Duration
    • „seconds“ muss zwischen 0 und 253402300799 liegen, also zwischen 1970-01-01T00:00:00+00:00 und 9999-12-31T23:59:59+00:00.
    • „nanos“ muss nicht festgelegt oder auf „0“ gesetzt sein.
  • google.type.LatLng
    • latitude muss im Bereich [-90.0, 90.0] liegen.
    • longitude muss im Bereich [-180.0, 180.0] liegen.
    • Mindestens einer von „latitude“ und „longitude“ muss einen Wert ungleich Null haben.
BatchOptimizeTours

rpc BatchOptimizeTours(BatchOptimizeToursRequest) returns (Operation)

Optimiert Fahrzeugrundfahrten für eine oder mehrere OptimizeToursRequest-Nachrichten im Batch.

Diese Methode ist ein Vorgang mit langer Ausführungszeit. Die Eingaben für die Optimierung (OptimizeToursRequest-Nachrichten) und die Ausgaben (OptimizeToursResponse-Nachrichten) werden im vom Nutzer angegebenen Format aus Cloud Storage gelesen und in Cloud Storage geschrieben. Wie bei der OptimizeTours-Methode enthält jede OptimizeToursRequest eine ShipmentModel und gibt eine OptimizeToursResponse mit ShipmentRoute-Feldern zurück. Das sind eine Reihe von Routen, die von Fahrzeugen ausgeführt werden, um die Gesamtkosten zu minimieren.

Der Nutzer kann operations.get abfragen, um den Status des LRO zu prüfen:

Wenn das LRO-Feld done den Wert „false“ hat, wird mindestens eine Anfrage noch verarbeitet. Andere Anfragen wurden möglicherweise erfolgreich abgeschlossen und die Ergebnisse sind in Cloud Storage verfügbar.

Wenn das Feld done des LRO den Wert „true“ hat, wurden alle Anfragen verarbeitet. Die Ergebnisse aller erfolgreich verarbeiteten Anfragen sind in Cloud Storage verfügbar. Die Ergebnisse fehlgeschlagener Anfragen sind in Cloud Storage nicht verfügbar. Wenn das Feld error des LRO festgelegt ist, enthält es den Fehler einer der fehlgeschlagenen Anfragen.

Autorisierungsbereiche

Erfordert den folgenden OAuth-Bereich:

  • https://www.googleapis.com/auth/cloud-platform
IAM-Berechtigungen

Erfordert die folgende IAM-Berechtigung für die Ressource parent:

  • routeoptimization.operations.create

Weitere Informationen finden Sie in der IAM-Dokumentation.

OptimizeTours

rpc OptimizeTours(OptimizeToursRequest) returns (OptimizeToursResponse)

Es wird eine OptimizeToursRequest mit einer ShipmentModel gesendet und eine OptimizeToursResponse mit ShipmentRoutes zurückgegeben. Das sind eine Reihe von Routen, die von Fahrzeugen ausgeführt werden, um die Gesamtkosten zu minimieren.

Ein ShipmentModel-Modell besteht hauptsächlich aus Shipments, die ausgeführt werden müssen, und Vehicles, die zum Transport der Shipments verwendet werden können. Die ShipmentRoutes weisen Shipments den Vehicles zu. Konkret ordnet er jedem Fahrzeug eine Reihe von Visit zu, wobei eine Visit einer VisitRequest entspricht, also einer Abholung oder Lieferung für eine Shipment.

Ziel ist es, ShipmentRoutes den Vehicles so zuzuweisen, dass die Gesamtkosten minimiert werden. Die Kosten haben viele Komponenten, die in der ShipmentModel definiert sind.

Autorisierungsbereiche

Erfordert den folgenden OAuth-Bereich:

  • https://www.googleapis.com/auth/cloud-platform
IAM-Berechtigungen

Erfordert die folgende IAM-Berechtigung für die Ressource parent:

  • routeoptimization.locations.use

Weitere Informationen finden Sie in der IAM-Dokumentation.

AggregatedMetrics

Zusammengefasste Messwerte für ShipmentRoute (bzw. für OptimizeToursResponse über alle Transition und/oder Visit (bzw. über alle ShipmentRoute) Elemente).

Felder
performed_shipment_count

int32

Anzahl der durchgeführten Sendungen. Ein Abhol- und Lieferpaar wird nur einmal gezählt.

travel_duration

Duration

Die Gesamtfahrzeit für eine Route oder eine Lösung.

wait_duration

Duration

Die Gesamtwartezeit für eine Route oder eine Lösung.

delay_duration

Duration

Die Gesamtdauer der Verzögerung für eine Route oder eine Lösung.

break_duration

Duration

Gesamtdauer der Pause für eine Route oder eine Lösung.

visit_duration

Duration

Die gesamte Besuchsdauer für eine Route oder eine Lösung.

total_duration

Duration

Die Gesamtdauer sollte der Summe aller oben genannten Zeiträume entsprechen. Für Routen entspricht dies auch:

[ShipmentRoute.vehicle_end_time][google.maps.routeoptimization.v1.ShipmentRoute.vehicle_end_time] - [ShipmentRoute.vehicle_start_time][google.maps.routeoptimization.v1.ShipmentRoute.vehicle_start_time]
travel_distance_meters

double

Die Gesamtstrecke für eine Route oder eine Lösung.

max_loads

map<string, VehicleLoad>

Die maximale Last, die auf der gesamten Route (bzw. Lösung) für jede der Mengen auf dieser Route (bzw. Lösung) erreicht wird, berechnet als Maximum aller Transition.vehicle_loads (bzw. ShipmentRoute.metrics.max_loads.

BatchOptimizeToursMetadata

Dieser Typ hat keine Felder.

Metadaten für Vorgänge bei BatchOptimizeToursRequest-Aufrufen.

BatchOptimizeToursRequest

Batch-Optimierung von Touren als asynchronen Vorgang anfordern Jede Eingabedatei sollte eine OptimizeToursRequest und jede Ausgabedatei eine OptimizeToursResponse enthalten. Die Anfrage enthält Informationen zum Lesen/Schreiben und Parsen der Dateien. Alle Eingabe- und Ausgabedateien sollten sich im selben Projekt befinden.

Felder
parent

string

Erforderlich. Zielprojekt und Standort zum Anrufen festlegen.

Format: * projects/{project-id} * projects/{project-id}/locations/{location-id}

Wenn kein Standort angegeben ist, wird automatisch eine Region ausgewählt.

model_configs[]

AsyncModelConfig

Erforderlich. Eingabe-/Ausgabeinformationen für jedes Kaufmodell, z. B. Dateipfade und Datenformate.

AsyncModelConfig

Informationen zum asynchronen Lösen eines Optimierungsmodells.

Felder
display_name

string

Optional. Benutzerdefinierter Modellname, der von Nutzern als Alias verwendet werden kann, um Modelle im Blick zu behalten.

input_config

InputConfig

Erforderlich. Informationen zum Eingabemodell.

output_config

OutputConfig

Erforderlich. Die gewünschten Informationen zum Ausgabeort.

BatchOptimizeToursResponse

Dieser Typ hat keine Felder.

Antwort auf eine BatchOptimizeToursRequest. Dieser Wert wird im Vorgang mit langer Ausführungszeit zurückgegeben, nachdem der Vorgang abgeschlossen ist.

BreakRule

Regeln zum Generieren von Pausen für ein Fahrzeug (z.B. Mittagspausen). Eine Pause ist ein zusammenhängender Zeitraum, in dem das Fahrzeug an seiner aktuellen Position inaktiv bleibt und keine Besuche durchführen kann. Unterbrechungen können in folgenden Fällen auftreten:

  • während der Fahrt zwischen zwei Besuchen (einschließlich der Zeit direkt vor oder direkt nach einem Besuch, aber nicht in der Mitte eines Besuchs), in diesem Fall wird die entsprechende Fahrtzeit zwischen den Besuchen verlängert,
  • oder vor dem Start des Fahrzeugs (das Fahrzeug wird möglicherweise nicht mitten in einer Pause gestartet), in diesem Fall hat es keinen Einfluss auf die Startzeit des Fahrzeugs.
  • oder nach dem Ende des Fahrzeugs (ebenfalls mit der Endzeit des Fahrzeugs).
Felder
break_requests[]

BreakRequest

Abfolge von Pausen. Weitere Informationen finden Sie in der Nachricht BreakRequest.

frequency_constraints[]

FrequencyConstraint

Es können mehrere FrequencyConstraint gelten. Sie müssen alle durch die BreakRequest dieses BreakRule erfüllt werden. Siehe FrequencyConstraint.

BreakRequest

Die Abfolge der Pausen (d.h. ihre Anzahl und Reihenfolge), die für jedes Fahrzeug gelten, muss im Voraus bekannt sein. Die wiederholten BreakRequest definieren diese Sequenz in der Reihenfolge, in der sie auftreten müssen. Die Zeitfenster (earliest_start_time / latest_start_time) dürfen sich überschneiden, müssen aber mit der Bestellung kompatibel sein (dies wird geprüft).

Felder
earliest_start_time

Timestamp

Erforderlich. Untere Grenze (einschließlich) des Beginns der Pause.

latest_start_time

Timestamp

Erforderlich. Obergrenze (einschließlich) für den Beginn der Pause.

min_duration

Duration

Erforderlich. Mindestdauer der Werbeunterbrechung. Muss positiv sein.

FrequencyConstraint

Die Häufigkeit und Dauer der oben genannten Pausen kann weiter eingeschränkt werden, indem eine Mindestpausenfrequenz erzwungen wird, z. B. „Alle 12 Stunden muss eine Pause von mindestens einer Stunde eingelegt werden“. Angenommen, dies kann als „Innerhalb eines gleitenden Zeitfensters von 12 Stunden muss es mindestens eine Pause von mindestens einer Stunde geben“ interpretiert werden, würde dieses Beispiel in die folgende FrequencyConstraint übersetzt:

{
   min_break_duration { seconds: 3600 }         # 1 hour.
   max_inter_break_duration { seconds: 39600 }  # 11 hours (12 - 1 = 11).
}

Bei der Zeit und Dauer der Werbeunterbrechungen in der Lösung werden alle diese Einschränkungen berücksichtigt, zusätzlich zu den Zeitfenstern und Mindestdauern, die bereits in der BreakRequest angegeben sind.

Ein FrequencyConstraint kann in der Praxis auch auf nicht aufeinanderfolgende Pausen angewendet werden. Im folgenden Zeitplan wird beispielsweise das Beispiel „1 Stunde alle 12 Stunden“ berücksichtigt:

  04:00 vehicle start
   .. performing travel and visits ..
  09:00 1 hour break
  10:00 end of the break
   .. performing travel and visits ..
  12:00 20-min lunch break
  12:20 end of the break
   .. performing travel and visits ..
  21:00 1 hour break
  22:00 end of the break
   .. performing travel and visits ..
  23:59 vehicle end
Felder
min_break_duration

Duration

Erforderlich. Mindestdauer der Unterbrechung für diese Einschränkung. Nicht negativ. Siehe Beschreibung von FrequencyConstraint.

max_inter_break_duration

Duration

Erforderlich. Maximale zulässige Spanne eines Zeitintervalls auf der Route, das nicht mindestens teilweise eine Pause von duration >= min_break_duration umfasst. Muss positiv sein.

DataFormat

Datenformate für Eingabe- und Ausgabedateien.

Enums
DATA_FORMAT_UNSPECIFIED Ungültiger Wert. Das Format darf nicht „UNBESCHRIEBEN“ sein.
JSON JavaScript Object Notation.
PROTO_TEXT Textformat von Protocol Buffers. Weitere Informationen finden Sie unter https://protobuf.dev/reference/protobuf/textformat-spec/.

DistanceLimit

Ein Limit, das die maximale zurückgelegte Strecke definiert. Sie kann hart oder weich sein.

Wenn ein weiches Limit definiert ist, müssen sowohl soft_max_meters als auch cost_per_kilometer_above_soft_max definiert sein und nicht negativ sein.

Felder
max_meters

int64

Eine feste Grenze, die die Entfernung auf maximal max_meters festlegt. Das Limit darf nicht negativ sein.

soft_max_meters

int64

Ein weiches Limit, das keine maximale Entfernung vorschreibt, aber bei einem Verstoß zu Kosten führt, die sich mit anderen im Modell definierten Kosten mit derselben Einheit addieren.

Falls definiert, muss „soft_max_meters“ kleiner als „max_meters“ sein und darf nicht negativ sein.

cost_per_kilometer_below_soft_max

double

Angefallene Kosten pro Kilometer, bis zu soft_max_meters, mit der Formel:

  min(distance_meters, soft_max_meters) / 1000.0 *
  cost_per_kilometer_below_soft_max.

Diese Kosten werden in route_distance_limit nicht unterstützt.

cost_per_kilometer_above_soft_max

double

Kosten pro Kilometer, wenn die Entfernung das Limit von soft_max_meters überschreitet. Die zusätzlichen Kosten betragen 0, wenn die Entfernung unter dem Grenzwert liegt. Andernfalls wird die folgende Formel zur Berechnung der Kosten verwendet:

  (distance_meters - soft_max_meters) / 1000.0 *
  cost_per_kilometer_above_soft_max.

Die Kosten dürfen nicht negativ sein.

GcsDestination

Der Google Cloud Storage-Speicherort, an den die Ausgabedateien geschrieben werden.

Felder
uri

string

Erforderlich. Google Cloud Storage-URI.

GcsSource

Der Google Cloud Storage-Speicherort, aus dem die Eingabedatei gelesen wird.

Felder
uri

string

Erforderlich. URI eines Google Cloud Storage-Objekts im Format gs://bucket/path/to/object.

InjectedSolutionConstraint

In die Anfrage eingebrachte Lösung mit Informationen dazu, welche Besuche eingeschränkt werden müssen und wie.

Felder
routes[]

ShipmentRoute

Routen der einzuschleusenden Lösung. Einige Routen wurden möglicherweise aus der ursprünglichen Lösung entfernt. Die Routen und übersprungenen Sendungen müssen die für injected_first_solution_routes aufgeführten grundlegenden Gültigkeitsannahmen erfüllen.

skipped_shipments[]

SkippedShipment

Übersprungene Lieferungen der einzuschleusenden Lösung. Einige davon wurden möglicherweise aus der ursprünglichen Lösung entfernt. Siehe Feld routes.

constraint_relaxations[]

ConstraintRelaxation

Gibt für null oder mehr Fahrzeuggruppen an, wann und in welchem Umfang Einschränkungen gelockert werden sollen. Wenn dieses Feld leer ist, sind alle nicht leeren Fahrzeugrouten vollständig eingeschränkt.

ConstraintRelaxation

Gibt für eine Gruppe von Fahrzeugen an, ab welchem Grenzwert die Einschränkungen für Besuche gelockert werden und auf welche Stufe. Sendungen, die im Feld skipped_shipment aufgeführt sind, müssen übersprungen werden, d.h., sie können nicht ausgeführt werden.

Felder
relaxations[]

Relaxation

Alle Lockerungen der Besuchseinschränkungen, die für Besuche auf Routen mit Fahrzeugen in vehicle_indices gelten.

vehicle_indices[]

int32

Gibt die Fahrzeugindizes an, auf die die Besuchseinschränkung relaxations angewendet wird. Wenn das Feld leer ist, gilt dies als Standard und die relaxations gelten für alle Fahrzeuge, die in anderen constraint_relaxations nicht angegeben sind. Es kann höchstens einen Standard geben, d.h., höchstens ein Feld für die Entspannung von Einschränkungen darf leer sein vehicle_indices. Ein Fahrzeugindex kann nur einmal aufgeführt werden, auch innerhalb mehrerer constraint_relaxations.

Ein Fahrzeugindex wird wie ShipmentRoute.vehicle_index zugeordnet, wenn interpret_injected_solutions_using_labels wahr ist (siehe Kommentar zu fields).

Entspannung

Wenn relaxations leer ist, sind der Beginn und die Reihenfolge aller Besuche auf routes vollständig eingeschränkt und es können keine neuen Besuche eingefügt oder diesen Routen hinzugefügt werden. Außerdem sind der Beginn und das Ende eines Fahrzeugs in routes vollständig eingeschränkt, es sei denn, das Fahrzeug ist leer, d.h., es hat keine Besuche und used_if_route_is_empty ist im Modell auf „falsch“ gesetzt.

relaxations(i).level gibt die Lockerungsstufe der Einschränkung an, die auf einen Besuch #j angewendet wird, der folgende Bedingungen erfüllt:

  • route.visits(j).start_time >= relaxations(i).threshold_time UND
  • j + 1 >= relaxations(i).threshold_visit_count

Ebenso wird der Fahrzeugstart auf relaxations(i).level gelockert, wenn folgende Bedingungen erfüllt sind:

  • vehicle_start_time >= relaxations(i).threshold_time UND
  • relaxations(i).threshold_visit_count == 0 und das Fahrzeugende wird auf relaxations(i).level gelockert, wenn folgende Bedingungen erfüllt sind:
  • vehicle_end_time >= relaxations(i).threshold_time UND
  • route.visits_size() + 1 >= relaxations(i).threshold_visit_count

Wenn ein Besuch die threshold_visit_count ODER die threshold_time erfüllt, fügen Sie zwei relaxations mit derselben level hinzu: eine mit nur threshold_visit_count und eine mit nur threshold_time. Wenn ein Besuch die Bedingungen mehrerer relaxations erfüllt, gilt die am wenigsten strikte Stufe. Das bedeutet, dass der Entspannungsgrad vom Start des Fahrzeugs über die Routenbesuche bis zum Ende des Fahrzeugs immer weiter sinkt.

Zeitpunkt und Reihenfolge von Routenbesuchen, die die Grenzbedingungen für eine relaxations nicht erfüllen, sind vollständig eingeschränkt und es können keine Besuche in diese Sequenzen eingefügt werden. Wenn ein Fahrzeugstart oder -ende nicht die Bedingungen für eine Lockerung erfüllt, ist die Zeit festgelegt, es sei denn, das Fahrzeug ist leer.

Felder
level

Level

Der Grad der Lockerung der Einschränkung, der gilt, wenn die Bedingungen bei oder nach threshold_time UND mindestens threshold_visit_count erfüllt sind.

threshold_time

Timestamp

Der Zeitpunkt, zu dem oder nach dem die Entspannung level angewendet werden kann.

threshold_visit_count

int32

Die Anzahl der Besuche, ab der die Lockerung level angewendet werden kann. Wenn threshold_visit_count = 0 (oder nicht festgelegt) ist, kann level direkt beim Starten des Fahrzeugs angewendet werden.

Wenn es route.visits_size() + 1 ist, kann die level nur auf das Fahrzeugende angewendet werden. Ist der Wert höher als route.visits_size() + 1, wird level für diese Route nicht angewendet.

Level

Gibt die verschiedenen Einschränkungen an, die für einen Besuch angewendet werden, und die, die folgen, wenn die Grenzbedingungen erfüllt sind.

Die folgende Aufzählung ist in absteigender Reihenfolge der Entspannung geordnet.

Enums
LEVEL_UNSPECIFIED

Implizites Standard-Lockerungsniveau: Es werden keine Einschränkungen gelockert, d.h., alle Besuche sind vollständig eingeschränkt.

Dieser Wert darf in level nicht explizit verwendet werden.

RELAX_VISIT_TIMES_AFTER_THRESHOLD Die Start- und Endzeiten von Besuchen und Fahrzeugen werden gelockert, aber jeder Besuch bleibt demselben Fahrzeug zugeordnet und die Besuchsreihenfolge muss eingehalten werden: Zwischen oder vor den Besuchen darf kein Besuch eingefügt werden.
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD Entspricht RELAX_VISIT_TIMES_AFTER_THRESHOLD, aber die Besuchsabfolge ist auch lockerer: Besuche können nur von diesem Fahrzeug durchgeführt werden, aber potenziell nicht ausgeführt werden.
RELAX_ALL_AFTER_THRESHOLD Entspricht RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD, aber das Fahrzeug ist auch entspannt: Besuche sind ab oder nach dem Grenzwert völlig kostenlos und können möglicherweise nicht ausgeführt werden.

InputConfig

Geben Sie einen Eingabewert für [BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours] an.

Felder
data_format

DataFormat

Erforderlich. Das Format der Eingabedaten.

Union-Feld source. Erforderlich. Für source ist nur einer der folgenden Werte zulässig:
gcs_source

GcsSource

Einen Google Cloud Storage-Speicherort Es muss sich um ein einzelnes Objekt (eine einzelne Datei) handeln.

Standort

Umfasst einen Standort (einen geografischen Punkt und eine optionale Überschrift).

Felder
lat_lng

LatLng

Die geografischen Koordinaten des Wegpunkts.

heading

int32

Die Kompassrichtung, die der Verkehrsflussrichtung entspricht. Mit diesem Wert wird die Straßenseite angegeben, die für die Abholung und Rückgabe verwendet werden soll. Die Werte für die Richtung können zwischen 0 und 360 liegen. 0 gibt dabei die Richtung „Nördlich“ an, 90 die Richtung „Östlich“ usw.

OptimizeToursRequest

Anfrage, die an einen Tourenoptimierungssolver gesendet wird, der das zu lösende Versandmodell sowie die Optimierungsparameter definiert.

Felder
parent

string

Erforderlich. Zielprojekt oder -standort für einen Anruf festlegen.

Format: * projects/{project-id} * projects/{project-id}/locations/{location-id}

Wenn kein Standort angegeben ist, wird automatisch eine Region ausgewählt.

timeout

Duration

Wenn dieses Zeitlimit festgelegt ist, gibt der Server eine Antwort zurück, bevor das Zeitlimit abgelaufen ist oder die Serverfrist für synchrone Anfragen erreicht wird, je nachdem, was früher eintritt.

Bei asynchronen Anfragen generiert der Server (falls möglich) eine Lösung, bevor das Zeitlimit abgelaufen ist.

model

ShipmentModel

Zu lösendes Versandmodell.

solving_mode

SolvingMode

Standardmäßig ist der Lösungsmodus DEFAULT_SOLVE (0).

search_mode

SearchMode

Der Suchmodus, der zur Lösung der Anfrage verwendet wurde.

injected_first_solution_routes[]

ShipmentRoute

Den Optimierungsalgorithmus bei der Suche nach einer ersten Lösung unterstützen, die einer früheren Lösung ähnelt.

Das Modell wird eingeschränkt, wenn die erste Lösung erstellt wird. Alle Sendungen, die nicht auf einer Route ausgeführt werden, werden in der ersten Lösung implizit übersprungen, können aber in nachfolgenden Lösungen ausgeführt werden.

Die Lösung muss einige grundlegende Gültigkeitsannahmen erfüllen:

  • Für alle Routen muss vehicle_index in Reichweite sein und darf nicht dupliziert werden.
  • Für alle Besuche müssen shipment_index und visit_request_index im Bereich liegen.
  • Eine Sendung darf nur auf einer Route referenziert werden.
  • Die Abholung eines Versands mit Abhol- und Zustelloption muss vor der Zustellung erfolgen.
  • Es kann nur eine Abhol- oder Lieferalternative für eine Sendung ausgewählt werden.
  • für alle Routen werden die Zeiten verlängert (d.h., vehicle_start_time <= visits[0].start_time <= visits[1].start_time ... <= vehicle_end_time).
  • Eine Lieferung darf nur mit einem zulässigen Fahrzeug erfolgen. Ein Fahrzeug ist zulässig, wenn Shipment.allowed_vehicle_indices leer ist oder seine vehicle_index in Shipment.allowed_vehicle_indices enthalten ist.

Wenn die eingebrachte Lösung nicht realisierbar ist, wird nicht unbedingt ein Validierungsfehler zurückgegeben. Stattdessen kann ein Fehler zurückgegeben werden, der auf die Unmöglichkeit hinweist.

injected_solution_constraint

InjectedSolutionConstraint

Der Optimierungsalgorithmus wird so eingeschränkt, dass eine endgültige Lösung gefunden wird, die einer früheren Lösung ähnelt. So können Sie beispielsweise Teile von Routen sperren, die bereits abgeschlossen sind oder noch abgeschlossen werden sollen, aber nicht geändert werden dürfen.

Wenn die eingebrachte Lösung nicht realisierbar ist, wird nicht unbedingt ein Validierungsfehler zurückgegeben. Stattdessen kann ein Fehler zurückgegeben werden, der auf die Unmöglichkeit hinweist.

refresh_details_routes[]

ShipmentRoute

Wenn die Liste nicht leer ist, werden die angegebenen Routen aktualisiert, ohne dass die zugrunde liegende Abfolge der Besuche oder Fahrtzeiten geändert wird. Nur andere Details werden aktualisiert. Das Modell wird dadurch nicht gelöst.

Seit November 2020 werden damit nur die Polylinien nicht leerer Routen ausgefüllt. Außerdem muss populate_polylines auf „wahr“ gesetzt sein.

Die route_polyline-Felder der übergebenen Routen stimmen möglicherweise nicht mit Route transitions überein.

Dieses Feld darf nicht mit injected_first_solution_routes oder injected_solution_constraint verwendet werden.

Shipment.ignore und Vehicle.ignore haben keine Auswirkungen auf das Verhalten. Polylinien werden weiterhin zwischen allen Besuchen in allen nicht leeren Routen eingefügt, unabhängig davon, ob die zugehörigen Sendungen oder Fahrzeuge ignoriert werden.

interpret_injected_solutions_using_labels

bool

Wenn wahr:

Diese Interpretation gilt für die Felder injected_first_solution_routes, injected_solution_constraint und refresh_details_routes. Sie kann verwendet werden, wenn sich die Sendungs- oder Fahrzeugindizes in der Anfrage seit der Erstellung der Lösung geändert haben, z. B. weil Sendungen oder Fahrzeuge aus der Anfrage entfernt oder hinzugefügt wurden.

Wenn diese Option aktiviert ist, dürfen Labels in den folgenden Kategorien höchstens einmal in ihrer Kategorie vorkommen:

Wenn ein vehicle_label in der eingespritzten Lösung keinem Anfragefahrzeug entspricht, wird die entsprechende Route zusammen mit ihren Besuchen aus der Lösung entfernt. Wenn ein shipment_label in der eingespritzten Lösung nicht einer Anfragesendung entspricht, wird der entsprechende Besuch aus der Lösung entfernt. Wenn eine SkippedShipment.label in der eingespritzten Lösung nicht einer angeforderten Sendung entspricht, wird die SkippedShipment aus der Lösung entfernt.

Wenn Sie Routenbesuche oder ganze Routen aus einer eingespritzten Lösung entfernen, kann sich das auf die impliziten Einschränkungen auswirken. Dies kann zu Änderungen an der Lösung, Validierungsfehlern oder Undurchführbarkeit führen.

HINWEIS: Der Aufrufer muss dafür sorgen, dass jede Vehicle.label (bzw. Shipment.label) identifiziert eindeutig ein Fahrzeug- bzw. Versandelement, das in den beiden relevanten Anfragen verwendet wird: die vorherige Anfrage, die die in der eingespritzten Lösung verwendete OptimizeToursResponse generiert hat, und die aktuelle Anfrage, die die eingespritzte Lösung enthält. Die oben beschriebenen Prüfungen auf Eindeutigkeit reichen nicht aus, um diese Anforderung zu erfüllen.

consider_road_traffic

bool

Berücksichtigen Sie die Besucherzahlschätzung bei der Berechnung der ShipmentRoute-Felder Transition.travel_duration, Visit.start_time und vehicle_end_time, beim Festlegen des Felds ShipmentRoute.has_traffic_infeasibilities und bei der Berechnung des Felds OptimizeToursResponse.total_cost.

populate_polylines

bool

Wenn „true“ festgelegt ist, werden Polylinien in Antwort-ShipmentRoutes eingefügt.

populate_transition_polylines

bool

Wenn „wahr“ festgelegt ist, werden Polylinien und Routen-Tokens in Antwort ShipmentRoute.transitions eingefügt.

allow_large_deadline_despite_interruption_risk

bool

Wenn diese Option festgelegt ist, kann die Anfrage ein Zeitlimit von bis zu 60 Minuten haben (siehe https://grpc.io/blog/deadlines). Andernfalls beträgt die maximale Frist nur 30 Minuten. Beachten Sie, dass bei langlebigen Anfragen das Risiko einer Unterbrechung deutlich höher (aber immer noch gering) ist.

use_geodesic_distances

bool

Wenn „wahr“ festgelegt ist, werden Reisedistanzen anhand von geodätischen Entfernungen anstelle von Google Maps-Entfernungen berechnet. Reisezeiten werden anhand von geodätischen Entfernungen mit einer Geschwindigkeit berechnet, die durch geodesic_meters_per_second definiert ist.

label

string

Label, das verwendet werden kann, um diese Anfrage zu identifizieren, die in der OptimizeToursResponse.request_label gemeldet wird.

geodesic_meters_per_second

double

Wenn use_geodesic_distances auf „wahr“ gesetzt ist, muss dieses Feld festgelegt werden. Es definiert die Geschwindigkeit, die für die Berechnung der Fahrtzeiten verwendet wird. Der Wert muss mindestens 1,0 Meter/Sekunde betragen.

max_validation_errors

int32

Die Anzahl der zurückgegebenen Validierungsfehler wird gekürzt. Diese Fehler werden in der Regel als BadRequest-Fehlerdetails (https://cloud.google.com/apis/design/errors#error_details) an eine INVALID_ARGUMENT-Fehlernutzlast angehängt, es sei denn, solving_mode=VALIDATE_ONLY (siehe Feld OptimizeToursResponse.validation_errors). Die Standardeinstellung ist 100 und die Obergrenze liegt bei 10.000.

SearchMode

Modus, der das Verhalten der Suche definiert und einen Kompromiss zwischen Latenz und Lösungsqualität darstellt. In allen Modi wird die Frist für globale Anfragen erzwungen.

Enums
SEARCH_MODE_UNSPECIFIED Nicht angegebener Suchmodus, entspricht RETURN_FAST.
RETURN_FAST Beenden Sie die Suche, nachdem Sie die erste gute Lösung gefunden haben.
CONSUME_ALL_AVAILABLE_TIME Nehmen Sie sich Zeit, um nach besseren Lösungen zu suchen.

SolvingMode

Definiert, wie der Solver die Anfrage verarbeiten soll. In allen Modi außer VALIDATE_ONLY erhalten Sie bei einer ungültigen Anfrage den Fehler INVALID_REQUEST. Mit max_validation_errors können Sie die Anzahl der zurückgegebenen Fehler begrenzen.

Enums
DEFAULT_SOLVE Lösen Sie das Modell. Warnungen können unter [OptimizeToursResponse.validation_errors][google.cloud.optimization.v1.OptimizeToursResponse.validation_errors] ausgegeben werden.
VALIDATE_ONLY Das Modell wird nur validiert, ohne es zu lösen. Es werden so viele OptimizeToursResponse.validation_errors wie möglich ausgefüllt.
DETECT_SOME_INFEASIBLE_SHIPMENTS

Es wird nur OptimizeToursResponse.validation_errors oder OptimizeToursResponse.skipped_shipments ausgefüllt und der Rest der Anfrage wird nicht gelöst (status und routes sind in der Antwort nicht festgelegt). Wenn Unzulässigkeiten in injected_solution_constraint-Routen erkannt werden, werden sie im Feld OptimizeToursResponse.validation_errors eingefügt und OptimizeToursResponse.skipped_shipments bleibt leer.

WICHTIG: Nicht alle nicht umsetzbaren Sendungen werden hier zurückgegeben, sondern nur die, die während der Vorverarbeitung als nicht umsetzbar erkannt werden.

OptimizeToursResponse

Antwort nach der Lösung eines Problems bei der Tourenoptimierung mit den Routen, die von den einzelnen Fahrzeugen befahren wurden, den übersprungenen Sendungen und den Gesamtkosten der Lösung.

Felder
routes[]

ShipmentRoute

Für jedes Fahrzeug berechnete Routen; die i-te Route entspricht dem i-ten Fahrzeug im Modell.

request_label

string

Kopie der OptimizeToursRequest.label, falls in der Anfrage ein Label angegeben wurde.

skipped_shipments[]

SkippedShipment

Liste aller übersprungenen Sendungen.

validation_errors[]

OptimizeToursValidationError

Liste aller Validierungsfehler, die wir unabhängig voneinander erkennen konnten. Weitere Informationen finden Sie in der Erklärung zu OptimizeToursValidationError unter „MEHRERE FEHLER“. Anstelle von Fehlern werden in diesem Fall Warnungen angezeigt, wenn solving_mode = DEFAULT_SOLVE.

metrics

Metrics

Messwerte zu Dauer, Entfernung und Nutzung für diese Lösung.

Messwerte

Gesamtmesswerte, aggregiert über alle Routen.

Felder
aggregated_route_metrics

AggregatedMetrics

Aggregiert über die Routen. Jeder Messwert ist die Summe (oder bei Ladevorgängen der maximale Wert) aller ShipmentRoute.metrics-Felder mit demselben Namen.

skipped_mandatory_shipment_count

int32

Anzahl der übersprungenen obligatorischen Sendungen.

used_vehicle_count

int32

Anzahl der verwendeten Fahrzeuge. Hinweis: Wenn eine Fahrzeugroute leer ist und Vehicle.used_if_route_is_empty wahr ist, gilt das Fahrzeug als gebraucht.

earliest_vehicle_start_time

Timestamp

Der früheste Startzeitpunkt für ein Gebrauchtfahrzeug, berechnet als Minimum aller Gebrauchtfahrzeuge von ShipmentRoute.vehicle_start_time.

latest_vehicle_end_time

Timestamp

Die späteste Endzeit für ein Gebrauchtfahrzeug, berechnet als Maximum aller Gebrauchtfahrzeuge von ShipmentRoute.vehicle_end_time.

costs

map<string, double>

Kosten der Lösung, aufgeschlüsselt nach kostenbezogenen Anfragefeldern. Die Schlüssel sind Proto-Pfade, bezogen auf die Eingabe OptimizeToursRequest, z. B. „model.shipments.pickups.cost“. Die Werte sind die Gesamtkosten, die durch das entsprechende Kostenfeld generiert wurden, aggregiert über die gesamte Lösung. Mit anderen Worten: „costs["model.shipments.pickups.cost"]“ ist die Summe aller Abholkosten für die Lösung. Alle im Modell definierten Kosten werden hier ausführlich aufgeführt, mit Ausnahme der Kosten im Zusammenhang mit TransitionAttributes, die seit Januar 2022 nur noch zusammengefasst erfasst werden.

total_cost

double

Gesamtkosten der Lösung. Die Summe aller Werte in der Kostenzuordnung.

OptimizeToursValidationError

Beschreibt einen Fehler oder eine Warnung, die bei der Validierung einer OptimizeToursRequest aufgetreten ist.

Felder
code

int32

Ein Validierungsfehler wird durch das Paar (code, display_name) definiert, das immer vorhanden ist.

Die Felder nach diesem Abschnitt liefern weitere Informationen zum Fehler.

MULTIPLE ERRORS: Wenn mehrere Fehler vorliegen, werden beim Validierungsprozess mehrere davon ausgegeben. Ähnlich wie bei einem Compiler ist dies ein unvollkommener Prozess. Einige Validierungsfehler sind „fatal“, d. h., sie beenden den gesamten Validierungsprozess. Dies ist u. a. bei display_name="UNSPECIFIED"-Fehlern der Fall. Einige Fehler können dazu führen, dass andere Fehler bei der Validierung übersprungen werden.

STABILITÄT: code und display_name sollten sehr stabil sein. Im Laufe der Zeit können jedoch neue Codes und Anzeigenamen hinzukommen, was dazu führen kann, dass eine bestimmte (ungültige) Anfrage ein anderes Paar (code, display_name) zurückgibt, weil der neue Fehler den alten ausgeblendet hat. Siehe z. B. „MEHRERE FEHLER“.

display_name

string

Der Anzeigename des Fehlers.

fields[]

FieldReference

Ein Fehlerkontext kann 0, 1 (in den meisten Fällen) oder mehrere Felder umfassen. Für Fahrzeug 4 und die erste Abholung der Sendung 2 könnte das beispielsweise so aussehen:

fields { name: "vehicles" index: 4}
fields { name: "shipments" index: 2 sub_field {name: "pickups" index: 0} }

Die Kardinalität von fields sollte sich jedoch für einen bestimmten Fehlercode nicht ändern.

error_message

string

Ein für Menschen lesbarer String, der den Fehler beschreibt. Es gibt eine 1:1-Zuordnung zwischen code und error_message (wenn „code“ != „UNSPECIFIED“).

STABILITÄT: Nicht stabil: Die Fehlermeldung, die mit einer bestimmten code verknüpft ist, kann sich im Laufe der Zeit ändern (hoffentlich zu einer klareren Formulierung). Bitte verwende stattdessen display_name und code.

offending_values

string

Kann die Werte der Felder enthalten. Diese Option ist nicht immer verfügbar. Sie sollten sich nicht darauf verlassen und sie nur für die manuelle Fehlerbehebung von Modellen verwenden.

FieldReference

Gibt einen Kontext für den Validierungsfehler an. Ein FieldReference bezieht sich immer auf ein bestimmtes Feld in dieser Datei und folgt derselben hierarchischen Struktur. So können wir beispielsweise Element 2 von start_time_windows von Fahrzeug 5 mit folgendem Code angeben:

name: "vehicles" index: 5 sub_field { name: "end_time_windows" index: 2 }

Entitäten der obersten Ebene wie OptimizeToursRequest oder ShipmentModel werden jedoch weggelassen, um die Nachricht nicht zu überladen.

Felder
name

string

Name des Felds, z.B. „vehicles“

sub_field

FieldReference

Bei Bedarf rekursiv verschachteltes untergeordnetes Feld.

Union-Feld index_or_key.

Für index_or_key ist nur einer der folgenden Werte zulässig:

index

int32

Index des Felds, falls es wiederholt wird.

key

string

Schlüssel, wenn das Feld eine Zuordnung ist.

OutputConfig

Geben Sie ein Ziel für die Ergebnisse von [BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours] an.

Felder
data_format

DataFormat

Erforderlich. Das Ausgabedatenformat.

Union-Feld destination. Erforderlich. Für destination ist nur einer der folgenden Werte zulässig:
gcs_destination

GcsDestination

Der Google Cloud Storage-Speicherort, in den die Ausgabe geschrieben wird.

RouteModifiers

Umfasst eine Reihe optionaler Bedingungen, die bei der Berechnung von Fahrzeugrouten erfüllt werden müssen. Dies entspricht RouteModifiers in der Google Maps Platform Routes Preferred API. Weitere Informationen finden Sie unter https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers.

Felder
avoid_tolls

bool

Gibt an, ob Mautstraßen nach Möglichkeit vermieden werden sollen. Es werden Routen bevorzugt, die keine Mautstraßen enthalten. Gilt nur für motorisierte Fortbewegungsmittel.

avoid_highways

bool

Gibt an, ob Autobahnen nach Möglichkeit vermieden werden sollen. Vorzug wird Routen gegeben, die keine Autobahnen enthalten. Gilt nur für motorisierte Fortbewegungsmittel.

avoid_ferries

bool

Gibt an, ob Fähren nach Möglichkeit vermieden werden sollen. Vorzug wird Routen eingeräumt, die keine Fahrten mit Fähren enthalten. Gilt nur für motorisierte Fortbewegungsmittel.

avoid_indoor

bool

Optional. Gibt an, ob Routen in Innenräumen nach Möglichkeit vermieden werden sollen. Vorzug haben Routen, die keine Indoor-Navigation enthalten. Gilt nur für den WALKING-Reisemodus.

Versand

Der Versand eines einzelnen Artikels von einer Abholstelle zu einer Lieferstelle. Damit die Lieferung als ausgeführt gilt, muss ein einzelnes Fahrzeug einen der Abholorte aufsuchen (und seine Reservekapazitäten entsprechend verringern) und später einen der Lieferorte aufsuchen (und seine Reservekapazitäten entsprechend wieder erhöhen).

Felder
display_name

string

Der benutzerdefinierte Anzeigename der Sendung. Sie kann bis zu 63 Zeichen lang sein und UTF-8-Zeichen enthalten.

pickups[]

VisitRequest

Abholoptionen, die mit der Sendung verknüpft sind. Wenn nichts angegeben ist, muss das Fahrzeug nur einen Standort anfahren, der den Lieferungen entspricht.

deliveries[]

VisitRequest

Mit der Sendung verknüpfte Lieferalternativen. Wenn nichts angegeben ist, muss das Fahrzeug nur einen Standort aufsuchen, der den Abholorten entspricht.

load_demands

map<string, Load>

Anforderungen an die Ladung der Sendung (z. B. Gewicht, Volumen, Anzahl der Paletten usw.) Die Schlüssel in der Zuordnung sollten IDs sein, die den Typ der entsprechenden Ladung beschreiben, idealerweise auch mit den Einheiten. Beispiele: „weight_kg“, „volume_gallons“, „pallet_count“ usw. Wenn ein bestimmter Schlüssel nicht in der Zuordnung enthalten ist, wird die entsprechende Ladung als null betrachtet.

allowed_vehicle_indices[]

int32

Die Fahrzeuge, die diese Lieferung durchführen können. Wenn das Feld leer ist, kann die Aktion von allen Fahrzeugen ausgeführt werden. Fahrzeuge werden in der vehicles-Liste der ShipmentModel anhand ihres Index angegeben.

costs_per_vehicle[]

double

Gibt die Kosten an, die bei der Lieferung dieser Sendung mit jedem Fahrzeug anfallen. Falls angegeben, muss Folgendes vorhanden sein:

  • dieselbe Anzahl von Elementen wie costs_per_vehicle_indices. costs_per_vehicle[i] entspricht Fahrzeug costs_per_vehicle_indices[i] des Modells.
  • Es muss dieselbe Anzahl von Elementen wie Fahrzeuge im Modell enthalten. Das i-te Element entspricht Fahrzeug i des Modells.

Diese Kosten müssen in derselben Einheit wie penalty_cost angegeben sein und dürfen nicht negativ sein. Lassen Sie dieses Feld leer, wenn keine solchen Kosten anfallen.

costs_per_vehicle_indices[]

int32

Indizes der Fahrzeuge, für die costs_per_vehicle gilt. Wenn das Feld nicht leer ist, muss es dieselbe Anzahl von Elementen wie costs_per_vehicle enthalten. Ein Fahrzeugindex darf nicht mehrmals angegeben werden. Wenn ein Fahrzeug von costs_per_vehicle_indices ausgeschlossen ist, sind die Kosten null.

pickup_to_delivery_absolute_detour_limit

Duration

Gibt die maximale absolute Umwegzeit im Vergleich zum kürzesten Weg von der Abholung zur Lieferung an. Wenn angegeben, muss der Wert nicht negativ sein und die Sendung muss mindestens eine Abholung und eine Zustellung enthalten.

Angenommen, t ist die kürzeste Zeit, die benötigt wird, um von der ausgewählten Abholoption direkt zur ausgewählten Lieferoption zu gelangen. Wenn Sie dann pickup_to_delivery_absolute_detour_limit festlegen, gilt Folgendes:

start_time(delivery) - start_time(pickup) <=
t + pickup_to_delivery_absolute_detour_limit

Wenn für dieselbe Sendung sowohl relative als auch absolute Limits angegeben sind, wird für jedes mögliche Abhol-/Lieferpaar das strengere Limit verwendet. Seit Oktober 2017 werden Umwege nur unterstützt, wenn die Reisedauer nicht vom Fahrzeug abhängt.

pickup_to_delivery_time_limit

Duration

Gibt die maximale Dauer vom Beginn der Abholung bis zum Beginn der Zustellung einer Sendung an. Wenn angegeben, muss der Wert nicht negativ sein und die Sendung muss mindestens eine Abholung und eine Zustellung enthalten. Das hängt nicht davon ab, welche Alternativen für die Abholung und Lieferung ausgewählt werden, und auch nicht von der Fahrzeuggeschwindigkeit. Dieser Wert kann zusammen mit Einschränkungen für die maximale Umleitung angegeben werden. Die Lösung berücksichtigt dann beide Spezifikationen.

shipment_type

string

Nicht leerer String, der den „Typ“ für diese Sendung angibt. Mit dieser Funktion können Sie Inkompatibilitäten oder Anforderungen zwischen shipment_types (siehe shipment_type_incompatibilities und shipment_type_requirements in ShipmentModel) definieren.

Unterscheidet sich von visit_types, das für einen einzelnen Besuch angegeben wird: Alle Abholungen/Lieferungen, die zu derselben Sendung gehören, haben dieselbe shipment_type.

label

string

Gibt ein Label für diese Sendung an. Dieses Label wird in der Antwort im Feld shipment_label der entsprechenden ShipmentRoute.Visit angegeben.

ignore

bool

Wenn „wahr“ festgelegt ist, wird diese Sendung übersprungen, aber es wird kein penalty_cost angewendet.

Wenn Sie einen Versand ignorieren, führt dies zu einem Validierungsfehler, wenn sich shipment_type_requirements im Modell befinden.

Es ist zulässig, eine Lieferung zu ignorieren, die in injected_first_solution_routes oder injected_solution_constraint ausgeführt wird. Der Solver entfernt die zugehörigen Abhol-/Lieferstopps aus der ausführenden Route. precedence_rules, die sich auf ignorierte Sendungen beziehen, werden ebenfalls ignoriert.

penalty_cost

double

Wenn die Sendung nicht abgeschlossen wird, wird diese Strafe auf die Gesamtkosten der Routen angerechnet. Ein Versand gilt als abgeschlossen, wenn eine der Abhol- und Lieferoptionen in Anspruch genommen wird. Die Kosten können in derselben Einheit angegeben werden, die für alle anderen kostenbezogenen Felder im Modell verwendet wird. Sie müssen positiv sein.

WICHTIG: Wenn diese Strafe nicht angegeben ist, gilt sie als unendlich, d.h. die Sendung muss abgeschlossen werden.

pickup_to_delivery_relative_detour_limit

double

Gibt die maximale relative Umwegzeit im Vergleich zum kürzesten Weg von der Abholung zur Lieferung an. Wenn angegeben, muss der Wert nicht negativ sein und die Sendung muss mindestens eine Abholung und eine Zustellung enthalten.

Angenommen, t ist die kürzeste Zeit, die benötigt wird, um von der ausgewählten Abholoption direkt zur ausgewählten Lieferoption zu gelangen. Wenn Sie dann pickup_to_delivery_relative_detour_limit festlegen, gilt Folgendes:

start_time(delivery) - start_time(pickup) <=
std::ceil(t * (1.0 + pickup_to_delivery_relative_detour_limit))

Wenn für dieselbe Sendung sowohl relative als auch absolute Limits angegeben sind, wird für jedes mögliche Abhol-/Lieferpaar das strengere Limit verwendet. Seit Oktober 2017 werden Umwege nur unterstützt, wenn die Reisedauer nicht vom Fahrzeug abhängt.

Laden

Bei einem Besuch kann der Fahrzeuglast bei einer Abholung ein vordefinierter Wert hinzugefügt oder bei einer Lieferung abgezogen werden. Dieser Betrag wird in dieser Nachricht definiert. load_demands ansehen.

Felder
amount

int64

Die Auslastung des Fahrzeugs, das den entsprechenden Besuch durchführt, variiert. Da es sich um eine Ganzzahl handelt, sollten Nutzer eine geeignete Einheit auswählen, um Abweichungen zu vermeiden. Muss ≥ 0 sein.

VisitRequest

Anfrage für einen Besuch, der mit einem Fahrzeug durchgeführt werden kann: Es hat einen (oder zwei, siehe unten) geografischen Standort, Öffnungszeiten, die durch Zeitfenster dargestellt werden, und eine Dienstleistungsdauer (Zeit, die das Fahrzeug nach der Ankunft für die Abholung oder Abgabe von Waren benötigt).

Felder
arrival_location

LatLng

Der geografische Standort, an dem das Fahrzeug bei dieser VisitRequest ankommt. Wenn das Versandmodell Zeit-/Entfernungsmatrizen enthält, darf arrival_location nicht angegeben werden.

arrival_waypoint

Waypoint

Der Wegpunkt, an dem das Fahrzeug ankommt, wenn es diese VisitRequest ausführt. Wenn das Versandmodell Zeit-Entfernungsmatrizen enthält, darf arrival_waypoint nicht angegeben werden.

departure_location

LatLng

Der geografische Standort, an dem das Fahrzeug nach Abschluss dieser VisitRequest abfährt. Kann weggelassen werden, wenn sie mit arrival_location identisch ist. Wenn das Versandmodell Zeit-Entfernungsmatrizen enthält, darf departure_location nicht angegeben werden.

departure_waypoint

Waypoint

Der Wegpunkt, von dem aus das Fahrzeug nach Abschluss dieser VisitRequest abfährt. Kann weggelassen werden, wenn sie mit arrival_waypoint identisch ist. Wenn das Versandmodell Zeit-/Entfernungsmatrizen enthält, darf departure_waypoint nicht angegeben werden.

tags[]

string

Gibt Tags an, die an die Besuchsanfrage angehängt sind. Leere oder doppelte Strings sind nicht zulässig.

time_windows[]

TimeWindow

Zeitfenster, die die Ankunftszeit bei einem Besuch einschränken. Hinweis: Ein Fahrzeug kann außerhalb des Zeitfensters für die Ankunftszeit abfahren. Das bedeutet, dass Ankunftszeit und Dauer nicht innerhalb eines Zeitfensters liegen müssen. Dies kann zu Wartezeiten führen, wenn das Fahrzeug vor TimeWindow.start_time ankommt.

Wenn TimeWindow fehlt, kann das Fahrzeug diesen Besuch jederzeit durchführen.

Die Zeitfenster dürfen sich nicht überschneiden, d. h., sie dürfen nicht aneinander angrenzen. Außerdem müssen sie in aufsteigender Reihenfolge angegeben werden.

cost_per_hour_after_soft_end_time und soft_end_time können nur festgelegt werden, wenn es nur ein Zeitfenster gibt.

duration

Duration

Dauer des Besuchs, d.h. die Zeit, die das Fahrzeug zwischen Ankunft und Abfahrt verbringt (wird zur möglichen Wartezeit addiert, siehe time_windows).

cost

double

Kosten für die Erledigung dieser Besuchsanfrage auf einer Fahrzeugroute. So können Sie für jede alternative Abholung oder Lieferung einer Sendung unterschiedliche Kosten bezahlen. Diese Kosten müssen in derselben Einheit wie Shipment.penalty_cost angegeben sein und dürfen nicht negativ sein.

load_demands

map<string, Load>

Ladeanforderungen dieser Besuchsanfrage. Dieses Feld funktioniert genauso wie das Feld Shipment.load_demands, nur dass es nur für diese VisitRequest statt für die gesamte Shipment gilt. Die hier aufgeführten Anforderungen werden den in Shipment.load_demands aufgeführten Anforderungen hinzugefügt.

visit_types[]

string

Gibt die Arten der Besuche an. So kann zusätzliche Zeit für ein Fahrzeug für diesen Besuch eingeplant werden (siehe Vehicle.extra_visit_duration_for_visit_type).

Ein Typ kann nur einmal vorkommen.

label

string

Gibt ein Label für diese VisitRequest an. Dieses Label wird in der Antwort als visit_label im entsprechenden ShipmentRoute.Visit angegeben.

ShipmentModel

Ein Versandmodell enthält eine Reihe von Sendungen, die von einer Reihe von Fahrzeugen ausgeführt werden müssen, wobei die Gesamtkosten minimiert werden, die sich aus der Summe der folgenden Kosten zusammensetzen:

  • die Kosten für die Routenplanung der Fahrzeuge (Summe der Kosten pro Gesamtzeit, Kosten pro Fahrtzeit und Fixkosten für alle Fahrzeuge).
  • die Strafen für nicht ausgeführte Sendungen.
  • die Kosten für die gesamte Dauer der Sendungen
Felder
shipments[]

Shipment

Sendungen, die im Modell ausgeführt werden müssen.

vehicles[]

Vehicle

Fahrzeuge, die für Besuche verwendet werden können.

global_start_time

Timestamp

Globaler Beginn und Ende des Modells: Zeiten außerhalb dieses Bereichs können nicht als gültig betrachtet werden.

Der Zeitraum des Modells darf nicht länger als ein Jahr sein. Das heißt, der global_end_time und der global_start_time müssen innerhalb von 31.536.000 Sekunden voneinander liegen.

Wenn Sie cost_per_*hour-Felder verwenden, sollten Sie dieses Fenster auf ein kleineres Intervall festlegen, um die Leistung zu steigern. Wenn Sie beispielsweise einen einzelnen Tag modellieren, sollten Sie die globalen Zeitlimits auf diesen Tag festlegen. Wenn der Wert nicht festgelegt ist, wird als Standardwert 00:00:00 UTC, 1. Januar 1970 (d. h. Sekunden: 0, Nanosekunden: 0) verwendet.

global_end_time

Timestamp

Wenn dieser Wert nicht festgelegt ist, wird als Standardwert 00:00:00 UTC, 1. Januar 1971 (d. h. Sekunden: 31536000, Nanosekunden: 0) verwendet.

global_duration_cost_per_hour

double

Die „globale Dauer“ des gesamten Plans ist die Differenz zwischen der frühesten effektiven Startzeit und der spätesten effektiven Endzeit aller Fahrzeuge. Nutzer können dieser Menge einen Kostenpreis pro Stunde zuweisen, um beispielsweise die schnellstmögliche Auftragsausführung zu optimieren. Diese Kosten müssen in derselben Einheit wie Shipment.penalty_cost angegeben sein.

duration_distance_matrices[]

DurationDistanceMatrix

Gibt die im Modell verwendeten Zeit- und Entfernungsmatrizen an. Wenn dieses Feld leer ist, werden je nach Wert des Felds use_geodesic_distances Google Maps- oder geodätische Entfernungen verwendet. Wenn es nicht leer ist, kann use_geodesic_distances nicht „wahr“ sein und weder duration_distance_matrix_src_tags noch duration_distance_matrix_dst_tags dürfen leer sein.

Typische Syntax:

  • Es gibt zwei Standorte: locA und locB.
  • 1 Fahrzeug, das seine Route an locA beginnt und an locA endet
  • 1 Anfrage für einen Abholtermin an Ort B.
model {
  vehicles { start_tags: "locA"  end_tags: "locA" }
  shipments { pickups { tags: "locB" } }
  duration_distance_matrix_src_tags: "locA"
  duration_distance_matrix_src_tags: "locB"
  duration_distance_matrix_dst_tags: "locA"
  duration_distance_matrix_dst_tags: "locB"
  duration_distance_matrices {
    rows {  # from: locA
      durations { seconds: 0 }   meters: 0    # to: locA
      durations { seconds: 100 } meters: 1000 # to: locB
    }
    rows {  # from: locB
      durations { seconds: 102 } meters: 990 # to: locA
      durations { seconds: 0 }   meters: 0   # to: locB
    }
  }
}
  • Es gibt drei Standorte: locA, locB und locC.
  • 1 Fahrzeug, das seine Route an locA beginnt und an locB endet, mit Matrix „schnell“.
  • 1 Fahrzeug, das seine Route an locB beginnt und an locB endet, mit Matrix „langsam“.
  • 1 Fahrzeug, das seine Route an locB beginnt und an locB endet, mit Matrix „schnell“.
  • 1 Anfrage für einen Abholtermin an locC.
model {
  vehicles { start_tags: "locA" end_tags: "locB" start_tags: "fast" }
  vehicles { start_tags: "locB" end_tags: "locB" start_tags: "slow" }
  vehicles { start_tags: "locB" end_tags: "locB" start_tags: "fast" }
  shipments { pickups { tags: "locC" } }
  duration_distance_matrix_src_tags: "locA"
  duration_distance_matrix_src_tags: "locB"
  duration_distance_matrix_src_tags: "locC"
  duration_distance_matrix_dst_tags: "locB"
  duration_distance_matrix_dst_tags: "locC"
  duration_distance_matrices {
    vehicle_start_tag: "fast"
    rows {  # from: locA
      durations { seconds: 1000 } meters: 2000 # to: locB
      durations { seconds: 600 }  meters: 1000 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }   meters: 0    # to: locB
      durations { seconds: 700 } meters: 1200 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 702 } meters: 1190 # to: locB
      durations { seconds: 0 }   meters: 0    # to: locC
    }
  }
  duration_distance_matrices {
    vehicle_start_tag: "slow"
    rows {  # from: locA
      durations { seconds: 1800 } meters: 2001 # to: locB
      durations { seconds: 900 }  meters: 1002 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }    meters: 0    # to: locB
      durations { seconds: 1000 } meters: 1202 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 1001 } meters: 1195 # to: locB
      durations { seconds: 0 }    meters: 0    # to: locC
    }
  }
}
duration_distance_matrix_src_tags[]

string

Tags, die die Quellen der Zeit- und Entfernungsmatrizen definieren; duration_distance_matrices(i).rows(j) definiert die Dauer und Entfernung von Besuchen mit dem Tag duration_distance_matrix_src_tags(j) zu anderen Besuchen in Matrix i.

Tags entsprechen VisitRequest.tags oder Vehicle.start_tags. Ein bestimmter VisitRequest oder Vehicle muss genau mit einem Tag in diesem Feld übereinstimmen. Die Quell-, Ziel- und Matrix-Tags einer Vehicle können identisch sein. Ebenso können die Quell- und Ziel-Tags einer VisitRequest identisch sein. Alle Tags müssen sich unterscheiden und dürfen keine leeren Strings sein. Wenn dieses Feld nicht leer ist, darf auch duration_distance_matrices nicht leer sein.

duration_distance_matrix_dst_tags[]

string

Tags, die die Ziele der Zeit- und Entfernungsmatrizen definieren; duration_distance_matrices(i).rows(j).durations(k) (bzw. duration_distance_matrices(i).rows(j).meters(k)) definiert die Dauer (bzw. die Entfernung) der Fahrt von Besuchen mit dem Tag duration_distance_matrix_src_tags(j) zu Besuchen mit dem Tag duration_distance_matrix_dst_tags(k) in Matrix i.

Tags entsprechen VisitRequest.tags oder Vehicle.start_tags. Ein bestimmter VisitRequest oder Vehicle muss genau mit einem Tag in diesem Feld übereinstimmen. Die Quell-, Ziel- und Matrix-Tags einer Vehicle können identisch sein. Ebenso können die Quell- und Ziel-Tags einer VisitRequest identisch sein. Alle Tags müssen sich unterscheiden und dürfen keine leeren Strings sein. Wenn dieses Feld nicht leer ist, darf auch duration_distance_matrices nicht leer sein.

transition_attributes[]

TransitionAttributes

Dem Modell hinzugefügte Übergangsattribute.

shipment_type_incompatibilities[]

ShipmentTypeIncompatibility

Kombinationen von nicht kompatiblen Versandtypen (siehe ShipmentTypeIncompatibility)

shipment_type_requirements[]

ShipmentTypeRequirement

shipment_type-Anforderungen (siehe ShipmentTypeRequirement)

precedence_rules[]

PrecedenceRule

Eine Reihe von Vorrangregeln, die im Modell erzwungen werden müssen.

max_active_vehicles

int32

Die maximale Anzahl aktiver Fahrzeuge wird eingeschränkt. Ein Fahrzeug ist aktiv, wenn auf seiner Route mindestens ein Versand erfolgt. So lässt sich die Anzahl der Routen begrenzen, wenn es weniger Fahrer als Fahrzeuge gibt und die Fahrzeugflotte heterogen ist. Bei der Optimierung wird dann die beste Teilmenge der Fahrzeuge ausgewählt. Muss strikt positiv sein.

DurationDistanceMatrix

Gibt eine Matrix mit Dauer und Entfernung vom Start- und Endpunkt des Besuchs zum Start- und Endpunkt des Fahrzeugs an.

Felder
rows[]

Row

Gibt die Zeilen der Matrix für Dauer und Entfernung an. Es muss dieselbe Anzahl an Elementen wie ShipmentModel.duration_distance_matrix_src_tags haben.

vehicle_start_tag

string

Tag, das angibt, für welche Fahrzeuge diese Matrix mit Dauer und Entfernung gilt. Wenn das Feld leer ist, gilt dies für alle Fahrzeuge und es kann nur eine einzige Matrix geben.

Jeder Fahrzeugstart muss genau einer Matrix entsprechen, d.h. genau eines der start_tags-Felder muss mit der vehicle_start_tag einer Matrix (und nur dieser Matrix) übereinstimmen.

Alle Matrizen müssen eine unterschiedliche vehicle_start_tag haben.

Zeile

Gibt eine Zeile der Matrix für Dauer und Entfernung an.

Felder
durations[]

Duration

Dauerwerte für eine bestimmte Zeile. Es muss dieselbe Anzahl an Elementen wie ShipmentModel.duration_distance_matrix_dst_tags haben.

meters[]

double

Entfernungswerte für eine bestimmte Zeile. Wenn sich keine Kosten oder Einschränkungen auf Entfernungen im Modell beziehen, kann dieses Feld leer bleiben. Andernfalls muss es so viele Elemente wie durations enthalten.

PrecedenceRule

Eine Vorrangregel zwischen zwei Ereignissen (jedes Ereignis ist die Abholung oder Zustellung einer Sendung): Das „zweite“ Ereignis muss mindestens offset_duration nach Beginn des „ersten“ Ereignisses beginnen.

Mehrere Vorrangstufen können sich auf dieselben (oder ähnliche) Ereignisse beziehen, z.B. „Abholung von B erfolgt nach Lieferung von A“ und „Abholung von C erfolgt nach Abholung von B“.

Außerdem gelten Vorrangregeln nur, wenn beide Sendungen ausgeführt werden. Andernfalls werden sie ignoriert.

Felder
first_is_delivery

bool

Gibt an, ob das erste Ereignis eine Übermittlung ist.

second_is_delivery

bool

Gibt an, ob das „zweite“ Ereignis eine Zustellung ist.

offset_duration

Duration

Die Zeitverschiebung zwischen dem ersten und dem zweiten Ereignis. Sie kann negativ sein.

first_index

int32

Versandindex des ersten Ereignisses. Dieses Feld muss angegeben werden.

second_index

int32

Versandindex des „zweiten“ Ereignisses. Dieses Feld muss angegeben werden.

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 zwischen folgenden Begriffen unterscheiden:

  • „Punktuelle Ereignisse“, z. B. Start und Ende des Fahrzeugs sowie Start und Ende jedes Besuchs (d. h. Ankunft und Abfahrt). Sie treten zu einer bestimmten Sekunde auf.
  • „Zeitintervalle“, z. B. 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:

  • Bei n Besuchen gibt es n + 1 Übergänge.
  • Ein Besuch wird immer von einer vorherigen (gleicher Index) und einer nachfolgenden (Index + 1) Navigationsaktion umgeben.
  • Auf das Starten des Fahrzeugs folgt immer der Übergang 0.
  • Dem Ende des Fahrzeugs geht immer die Übergabe #n voraus.

Im Detail passiert bei einer Transition und einer 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 hier ist noch eine kurze Zusammenfassung, wie sich TRAVEL, BREAKS, DELAY und WAIT während eines Übergangs anordnen lassen.

  • Sie überschneiden sich nicht.
  • DELAY 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 den Beginn und das Ende zu ermitteln.
  • Die BREAKS sind zusammenhängende, nicht überlappende Zeiträume. Die Antwort gibt den Beginn und die Dauer jeder Pause an.
  • TRAVEL und WAIT sind „vorhersagbar“: Sie können während dieser Übergänge 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     |       |           |         |         ||
  ||     |       |           |       |           |         |         ||
--++-----------------------------------------------------------------++-->
Felder
vehicle_index

int32

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

vehicle_label

string

Label des Fahrzeugs, das diese Route fährt. Entspricht ShipmentModel.vehicles(vehicle_index).label, falls angegeben.

vehicle_start_time

Timestamp

Die Uhrzeit, zu der das Fahrzeug seine Route beginnt.

vehicle_end_time

Timestamp

Die Uhrzeit, zu der das Fahrzeug seine Route beendet.

visits[]

Visit

Eine geordnete Folge von Besuchen, die eine Route darstellen. „visits[i]“ ist der i-te Besuch in der Route. Wenn dieses Feld leer ist, gilt das Fahrzeug als nicht genutzt.

transitions[]

Transition

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

has_traffic_infeasibilities

bool

Wenn OptimizeToursRequest.consider_road_traffic auf „wahr“ gesetzt ist, gibt dieses Feld an, dass Inkonsistenzen bei den Routenzeiten mithilfe von verkehrsbasierten Schätzungen der Fahrtdauer vorhergesagt werden. Es kann sein, dass nicht genügend Zeit für die verkehrsbedingten Fahrten, Verzögerungen und Pausen zwischen den Besuchen vor dem ersten Besuch oder nach dem letzten Besuch bleibt, um die Zeitfenster für Besuche und Fahrzeuge einzuhalten. Beispiel:

  start_time(previous_visit) + duration(previous_visit) +
  travel_duration(previous_visit, next_visit) > start_time(next_visit)

Die Ankunft bei next_visit erfolgt aufgrund der erhöhten geschätzten Fahrtzeit von travel_duration(previous_visit, next_visit) aufgrund von Staus wahrscheinlich später als im aktuellen Zeitfenster. Außerdem kann es vorkommen, dass sich eine Pause aufgrund einer längeren geschätzten Fahrtzeit und Einschränkungen bei Besuchs- oder Pausenzeiträumen mit einem Besuch überschneidet.

route_polyline

EncodedPolyline

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

breaks[]

Break

Für das Fahrzeug, das diese Route fährt, geplante Pausen. Die Sequenz breaks steht für Zeitintervalle, die jeweils bei der entsprechenden start_time beginnen und duration Sekunden dauern.

metrics

AggregatedMetrics

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

route_costs

map<string, double>

Kosten der Route, aufgeschlüsselt nach kostenbezogenen Anfragefeldern. Die Schlüssel sind Proto-Pfade, bezogen auf die Eingabe OptimizeToursRequest, z. B. „model.shipments.pickups.cost“. Die Werte sind die Gesamtkosten, die durch das entsprechende Kostenfeld generiert wurden, aggregiert über die gesamte Route. Mit anderen Worten: „costs["model.shipments.pickups.cost"]“ ist die Summe aller Abholkosten auf der Route. Alle im Modell definierten Kosten werden hier ausführlich aufgeführt, mit Ausnahme der Kosten im Zusammenhang mit TransitionAttributes, die seit Januar 2022 nur noch zusammengefasst erfasst werden.

route_total_cost

double

Gesamtkosten der Route. Die Summe aller Kosten in der Kostenübersicht.

Pause

Daten, die die Ausführung einer Pause darstellen.

Felder
start_time

Timestamp

Beginn einer Pause.

duration

Duration

Dauer einer Pause.

EncodedPolyline

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

Felder
points

string

String, der codierte Punkte der Polylinie darstellt.

Wechsel

Übergang zwischen zwei Ereignissen auf der Route. Siehe Beschreibung von ShipmentRoute.

Wenn das Fahrzeug keine start_location und/oder end_location hat, sind die entsprechenden Fahrtmesswerte 0.

Felder
travel_duration

Duration

Reisedauer während dieser Umstellung.

travel_distance_meters

double

Zurückgelegte Strecke während der Umstellung.

traffic_info_unavailable

bool

Wenn Traffic über OptimizeToursRequest.consider_road_traffic angefordert wird und die Traffic-Informationen für eine Transition nicht abgerufen werden konnten, wird dieser boolesche Wert auf „wahr“ gesetzt. Dies kann vorübergehend (selten auftretender Fehler bei den Echtzeit-Verkehrsservern) oder dauerhaft (keine Daten für diesen Standort) sein.

delay_duration

Duration

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

break_duration

Duration

Summe der Dauer der Pausen, die während dieses Übergangs auftreten, falls vorhanden. Details zum Beginn und zur Dauer jeder Pause werden in ShipmentRoute.breaks gespeichert.

wait_duration

Duration

Die Wartezeit während dieser Umstellung. Die Wartezeit entspricht der Inaktivitätsdauer und schließt keine Pausen ein. Beachten Sie außerdem, dass diese Wartezeit in mehrere nicht zusammenhängende Intervalle unterteilt werden kann.

total_duration

Duration

Die Gesamtdauer der Umstellung, nur zur Information. Sie entspricht:

  • Nächster Besuch start_time (oder vehicle_end_time, wenn dies der letzte Übergang ist) – start_time für diesen Übergang;
  • Wenn ShipmentRoute.has_traffic_infeasibilities falsch ist, gilt zusätzlich Folgendes: „total_duration = travel_duration + delay_duration
  • break_duration + wait_duration`.
start_time

Timestamp

Startzeit dieses Übergangs.

route_polyline

EncodedPolyline

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

route_token

string

Nur Ausgabe. Ein undurchsichtiges Token, das an das Navigation SDK übergeben werden kann, um die Route während der Navigation neu zu erstellen und bei einer Umleitung die ursprüngliche Absicht beim Erstellen der Route zu berücksichtigen. Dieses Token als intransparenten Blob behandeln Vergleichen Sie den Wert nicht zwischen Anfragen, da er sich auch dann ändern kann, wenn der Dienst genau dieselbe Route zurückgibt. Dieses Feld wird nur ausgefüllt, wenn populate_transition_polylines auf „wahr“ gesetzt ist.

vehicle_loads

map<string, VehicleLoad>

Fahrzeuglasten während dieser Umstellung für jeden Typ, der entweder in der Vehicle.load_limits dieses Fahrzeugs aufgeführt ist oder für den bei einer Lieferung auf dieser Route ein Wert ungleich 0 für Shipment.load_demands angegeben ist.

Die Lasten während der ersten Umstellung sind die Anfangslasten der Fahrzeugroute. Nach jedem Besuch wird die load_demands des Besuchs entweder addiert oder subtrahiert, um die Lasten der nächsten Übergänge zu erhalten, je nachdem, ob es sich um einen Abhol- oder einen Liefertermin handelt.

VehicleLoad

Die tatsächliche Ladung des Fahrzeugs an einem bestimmten Punkt der Route für einen bestimmten Typ (siehe Transition.vehicle_loads).

Felder
amount

int64

Die Belastung des Fahrzeugs für den jeweiligen Typ. Die Maßeinheit der Last wird in der Regel durch den Typ angegeben. Transition.vehicle_loads ansehen.

Aufrufen

Ein Besuch, der während einer Route erfolgt. Dieser Besuch entspricht der Abholung oder Lieferung eines Shipment.

Felder
shipment_index

int32

Index des Felds shipments in der Quelle ShipmentModel.

is_pickup

bool

Wenn „wahr“ ist, entspricht der Besuch der Abholung eines Shipment. Andernfalls entspricht er einer Zustellung.

visit_request_index

int32

Index von VisitRequest im Feld „Abholung“ oder „Lieferung“ der Shipment (siehe is_pickup).

start_time

Timestamp

Beginn des Besuchs. Das Fahrzeug kann jedoch früher am Zielort eintreffen. Die Zeiten stimmen mit den ShipmentModel überein.

load_demands

map<string, Load>

Gesamte Nachfrage nach Besuchslast als Summe aus Sendung und Besuchsanfrage load_demands. Die Werte sind negativ, wenn es sich bei dem Besuch um eine Übermittlung handelt. Die Nachfrage wird für dieselben Typen wie Transition.loads erfasst (siehe dieses Feld).

detour

Duration

Zusätzliche Umwegzeit aufgrund der Sendungen, die vor dem Besuch auf der Route besucht wurden, und der potenziellen Wartezeit aufgrund von Zeitfenstern. Wenn es sich bei dem Besuch um eine Lieferung handelt, wird der Umweg vom entsprechenden Abholbesuch berechnet und entspricht folgendem Wert:

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

Andernfalls wird er anhand des Fahrzeugs start_location berechnet und entspricht:

start_time - vehicle_start_time - travel duration from
the vehicle's `start_location` to the visit.
shipment_label

string

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

visit_label

string

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

ShipmentTypeIncompatibility

Gibt Inkompatibilitäten zwischen Sendungen an, die sich auf den shipment_type beziehen. Die Anzeige inkompatibler Sendungen auf derselben Route ist je nach Inkompatibilitätsmodus eingeschränkt.

Felder
types[]

string

Liste der inkompatiblen Typen. Zwei Sendungen mit unterschiedlichen shipment_types-Werten sind „nicht kompatibel“.

incompatibility_mode

IncompatibilityMode

Modus, der auf die Inkompatibilität angewendet wird.

IncompatibilityMode

Modi, die festlegen, wie die Anzeige inkompatibler Sendungen auf derselben Route eingeschränkt wird.

Enums
INCOMPATIBILITY_MODE_UNSPECIFIED Nicht angegebener Inkompatibilitätsmodus. Dieser Wert sollte niemals verwendet werden.
NOT_PERFORMED_BY_SAME_VEHICLE In diesem Modus können zwei Sendungen mit inkompatiblen Typen niemals dasselbe Fahrzeug nutzen.
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY

Bei zwei Sendungen mit inkompatiblen Typen im NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY-Inkompatibilitätsmodus:

  • Wenn es sich bei beiden um Abholungen (keine Lieferungen) oder Lieferungen (keine Abholungen) handelt, können sie nicht dasselbe Fahrzeug nutzen.
  • Wenn eine der Sendungen zugestellt und die andere abgeholt werden soll, können die beiden Sendungen dasselbe Fahrzeug nutzen, sofern die erste Sendung zugestellt wird, bevor die zweite abgeholt wird.

ShipmentTypeRequirement

Hier werden die Anforderungen an Sendungen basierend auf ihrem „shipment_type“ angegeben. Die Details der Anforderung werden durch den Anforderungsmodus definiert.

Felder
required_shipment_type_alternatives[]

string

Liste der alternativen Versandtypen, die für die dependent_shipment_types erforderlich sind.

dependent_shipment_types[]

string

Für alle Sendungen mit einem Typ im Feld dependent_shipment_types muss auf derselben Route mindestens eine Sendung vom Typ required_shipment_type_alternatives besucht werden.

HINWEIS: Anforderungsketten, bei denen eine shipment_type von sich selbst abhängt, sind nicht zulässig.

requirement_mode

RequirementMode

Modus, der auf die Anforderung angewendet wird.

RequirementMode

Modi, die das Aussehen abhängiger Sendungen auf einer Route definieren.

Enums
REQUIREMENT_MODE_UNSPECIFIED Nicht angegebener Anforderungsmodus. Dieser Wert sollte niemals verwendet werden.
PERFORMED_BY_SAME_VEHICLE In diesem Modus müssen alle „abhängigen“ Sendungen dasselbe Fahrzeug wie mindestens eine ihrer „erforderlichen“ Sendungen nutzen.
IN_SAME_VEHICLE_AT_PICKUP_TIME

Im Modus IN_SAME_VEHICLE_AT_PICKUP_TIME muss sich zum Zeitpunkt der Abholung in jedem Fahrzeug mindestens eine „erforderliche“ Sendung befinden.

Für die Abholung einer „abhängigen“ Sendung muss daher Folgendes angegeben sein:

  • Eine „erforderliche“ Lieferung, die auf dem Weg nach oder
  • Eine „erforderliche“ Sendung, die auf der Route vor der abhängigen Sendung abgeholt wurde. Wenn die „erforderliche“ Sendung eine Zustellung hat, muss diese Zustellung nach der Abholung der abhängigen Sendung erfolgen.
IN_SAME_VEHICLE_AT_DELIVERY_TIME Wie bisher, mit der Ausnahme, dass die „abhängigen“ Sendungen zum Zeitpunkt der Lieferung eine „erforderliche“ Sendung im Fahrzeug haben müssen.

SkippedShipment

Gibt Details zu nicht ausgeführten Sendungen in einer Lösung an. Bei einfachen Fällen und/oder wenn wir die Ursache für das Überspringen ermitteln können, geben wir den Grund hier an.

Felder
index

int32

Der Index entspricht dem Index der Sendung in der Quelle ShipmentModel.

label

string

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

reasons[]

Reason

Eine Liste der Gründe, warum die Sendung übersprungen wurde. Siehe Kommentar oben Reason. Wenn wir nicht nachvollziehen können, warum eine Sendung übersprungen wurde, werden keine Gründe angegeben.

Grund

Wenn wir den Grund für das Überspringen der Sendung erklären können, wird er hier aufgeführt. Wenn der Grund nicht für alle Fahrzeuge gleich ist, enthält reason mehr als ein Element. Für eine übersprungene Sendung dürfen keine doppelten Gründe angegeben werden, d.h. alle Felder müssen mit Ausnahme von example_vehicle_index identisch sein. Beispiel:

reasons {
  code: DEMAND_EXCEEDS_VEHICLE_CAPACITY
  example_vehicle_index: 1
  example_exceeded_capacity_type: "Apples"
}
reasons {
  code: DEMAND_EXCEEDS_VEHICLE_CAPACITY
  example_vehicle_index: 3
  example_exceeded_capacity_type: "Pears"
}
reasons {
  code: CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT
  example_vehicle_index: 1
}

Der übersprungene Versand ist mit allen Fahrzeugen nicht kompatibel. Die Gründe können für alle Fahrzeuge unterschiedlich sein, aber die Kapazität für „Äpfel“ wird bei mindestens einem Fahrzeug überschritten (einschließlich Fahrzeug 1), die Kapazität für „Birnen“ wird bei mindestens einem Fahrzeug überschritten (einschließlich Fahrzeug 3) und die Entfernungsbeschränkung wird bei mindestens einem Fahrzeug überschritten (einschließlich Fahrzeug 1).

Felder
code

Code

Weitere Informationen finden Sie in den Kommentaren zum Code.

example_exceeded_capacity_type

string

Wenn der Grundcode DEMAND_EXCEEDS_VEHICLE_CAPACITY ist, wird ein Kapazitätstyp angegeben, der überschritten wurde.

example_vehicle_index

int32

Wenn der Grund mit einer Inkompatibilität zwischen Sendung und Fahrzeug zusammenhängt, enthält dieses Feld den Index eines entsprechenden Fahrzeugs.

Code

Code, der den Grundtyp angibt. Die Reihenfolge spielt hier keine Rolle. Insbesondere gibt es keinen Hinweis darauf, ob ein bestimmter Grund in der Lösung vor einem anderen erscheint, wenn beide zutreffen.

Enums
CODE_UNSPECIFIED Dieser Wert sollte nicht verwendet werden.
NO_VEHICLE Im Modell ist kein Fahrzeug vorhanden, sodass alle Lieferungen nicht möglich sind.
DEMAND_EXCEEDS_VEHICLE_CAPACITY Die Anforderungen der Sendung übersteigen die Kapazität eines Fahrzeugs für einige Kapazitätstypen, darunter example_exceeded_capacity_type.
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT

Die für die Durchführung dieser Lieferung erforderliche Mindeststrecke, d.h. von der start_location des Fahrzeugs zu den Abhol- und/oder Lieferorten der Sendung und zum Endort des Fahrzeugs, überschreitet die route_distance_limit des Fahrzeugs.

Für diese Berechnung werden die geodätischen Entfernungen verwendet.

CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT

Die für diese Lieferung erforderliche Mindestzeit, einschließlich Fahrzeit, Wartezeit und Servicezeit, überschreitet die route_duration_limit des Fahrzeugs.

Hinweis: Die Reisezeit wird im Best-Case-Szenario berechnet, nämlich als geodätische Entfernung × 36 m/s (ungefähr 130 km/h).

CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TRAVEL_DURATION_LIMIT Wie oben, aber wir vergleichen nur die minimale Reisezeit und die travel_duration_limit des Fahrzeugs.
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TIME_WINDOWS Das Fahrzeug kann diese Lieferung im Bestfall nicht ausführen (siehe CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT für die Zeitberechnung), wenn es zum frühestmöglichen Startzeitpunkt startet: Die Gesamtzeit würde dazu führen, dass das Fahrzeug nach seiner spätesten Endzeit endet.
VEHICLE_NOT_ALLOWED Das Feld allowed_vehicle_indices der Sendung ist nicht leer und dieses Fahrzeug gehört nicht dazu.

TimeWindow

Zeitfenster begrenzen die Zeit eines Ereignisses, z. B. die Ankunftszeit bei einem Besuch oder den Beginn und das Ende eines Fahrzeugs.

Die festen Zeitfenstergrenzen start_time und end_time erzwingen den frühesten und spätesten Zeitpunkt des Ereignisses, sodass start_time <= event_time <= end_time. Die untere Grenze des weichen Zeitfensters, soft_start_time, gibt an, dass das Ereignis am oder nach soft_start_time stattfinden soll. Die Kosten sind dabei proportional dazu, wie lange vor „soft_start_time“ das Ereignis eintritt. Die obere Grenze des weichen Zeitfensters, soft_end_time, gibt an, dass das Ereignis am oder vor soft_end_time stattfinden soll. Die Kosten sind proportional dazu, wie lange nach soft_end_time das Ereignis eintritt. start_time, end_time, soft_start_time und soft_end_time müssen innerhalb der globalen Zeitlimits liegen (siehe ShipmentModel.global_start_time und ShipmentModel.global_end_time) und Folgendes einhalten:

  0 <= `start_time` <= `end_time` and
  0 <= `start_time` <= `soft_start_time` and
  0 <= `soft_end_time` <= `end_time`.
Felder
start_time

Timestamp

Der Beginn des Zeitfensters. Wenn nicht angegeben, wird ShipmentModel.global_start_time verwendet.

end_time

Timestamp

Das Ende des Zeitfensters. Wenn nicht angegeben, wird ShipmentModel.global_end_time verwendet.

soft_start_time

Timestamp

Die Startzeit des Zeitfensters.

soft_end_time

Timestamp

Das ungefähre Ende des Zeitfensters.

cost_per_hour_before_soft_start_time

double

Kosten pro Stunde, die zu den anderen Kosten im Modell hinzugefügt werden, wenn das Ereignis vor „soft_start_time“ eintritt. Die Berechnung erfolgt so:

   max(0, soft_start_time - t.seconds)
                          * cost_per_hour_before_soft_start_time / 3600,
t being the time of the event.

Diese Kosten müssen positiv sein. Das Feld kann nur festgelegt werden, wenn „soft_start_time“ festgelegt wurde.

cost_per_hour_after_soft_end_time

double

Kosten pro Stunde, die den anderen Kosten im Modell hinzugefügt werden, wenn das Ereignis nach soft_end_time eintritt. Sie werden so berechnet:

   max(0, t.seconds - soft_end_time.seconds)
                    * cost_per_hour_after_soft_end_time / 3600,
t being the time of the event.

Diese Kosten müssen positiv sein. Das Feld kann nur festgelegt werden, wenn soft_end_time festgelegt wurde.

TransitionAttributes

Gibt Attribute von Übergängen zwischen zwei aufeinanderfolgenden Besuchen auf einer Route an. Für dieselbe Umstellung können mehrere TransitionAttributes gelten. In diesem Fall werden alle zusätzlichen Kosten addiert und die strengste Einschränkung oder das strengste Limit angewendet (entsprechend der natürlichen „AND“-Semantik).

Felder
src_tag

string

Tags, die die (src->dst)-Übergänge definieren, auf die diese Attribute angewendet werden.

Ein Quellbesuch oder Fahrzeugstart wird nur dann abgeglichen, wenn VisitRequest.tags oder Vehicle.start_tags entweder src_tag oder keine excluded_src_tag enthält (je nachdem, welches dieser beiden Felder nicht leer ist).

excluded_src_tag

string

src_tag ansehen. Genau eine von src_tag und excluded_src_tag darf nicht leer sein.

dst_tag

string

Ein Zielbesuch oder ein Fahrzeugende stimmt genau dann überein, wenn VisitRequest.tags oder Vehicle.end_tags entweder dst_tag oder nicht excluded_dst_tag enthält (je nachdem, welches dieser beiden Felder nicht leer ist).

excluded_dst_tag

string

dst_tag ansehen. Genau eine von dst_tag und excluded_dst_tag darf nicht leer sein.

cost

double

Gibt die Kosten für die Durchführung dieser Umwandlung an. Dieser Wert hat dieselbe Einheit wie alle anderen Kosten im Modell und darf nicht negativ sein. Sie wird auf alle anderen bestehenden Kosten aufgeschlagen.

cost_per_kilometer

double

Gibt einen Kostenpreis pro Kilometer an, der auf die zurückgelegte Strecke bei diesem Übergang angewendet wird. Sie wird zu allen Vehicle.cost_per_kilometer addiert, die für Fahrzeuge angegeben sind.

distance_limit

DistanceLimit

Gibt ein Limit für die zurückgelegte Strecke bei diesem Übergang an.

Seit Juni 2021 werden nur noch Softlimits unterstützt.

delay

Duration

Gibt eine Verzögerung an, die beim Ausführen dieses Übergangs auftritt.

Diese Verzögerung tritt immer nach dem Ende des Quellbesuchs und vor Beginn des Zielbesuchs auf.

Fahrzeug

Stellt ein Fahrzeug mit einem Versandproblem dar. Wenn Sie ein Versandproblem beheben, wird für dieses Fahrzeug eine Route von start_location nach end_location erstellt. Eine Route besteht aus einer Folge von Besuchen (siehe ShipmentRoute).

Felder
display_name

string

Der benutzerdefinierte Anzeigename des Fahrzeugs. Sie kann bis zu 63 Zeichen lang sein und UTF-8-Zeichen enthalten.

travel_mode

TravelMode

Die Mobilitätsform, die sich auf die für das Fahrzeug nutzbaren Straßen und die Geschwindigkeit auswirkt. Siehe auch travel_duration_multiple.

route_modifiers

RouteModifiers

Eine Reihe von Bedingungen, die erfüllt sein müssen und sich auf die Berechnung von Routen für das betreffende Fahrzeug auswirken.

start_location

LatLng

Geografische Position, an der das Fahrzeug startet, bevor es Sendungen abholt. Wenn keine Angabe erfolgt, beginnt das Fahrzeug bei der ersten Abholung. Wenn das Versandmodell Zeit- und Entfernungsmatrizen hat, darf start_location nicht angegeben werden.

start_waypoint

Waypoint

Wegpunkt, der einen geografischen Standort darstellt, an dem das Fahrzeug startet, bevor es Sendungen abholt. Wenn weder start_waypoint noch start_location angegeben ist, beginnt das Fahrzeug bei der ersten Abholung. Wenn das Versandmodell Zeit- und Entfernungsmatrizen hat, darf start_waypoint nicht angegeben werden.

end_location

LatLng

Geografische Position, an der das Fahrzeug endet, nachdem es seine letzte VisitRequest abgeschlossen hat. Wenn nicht angegeben, endet die ShipmentRoute des Fahrzeugs sofort, wenn es seine letzte VisitRequest abgeschlossen hat. Wenn das Versandmodell Zeit- und Entfernungsmatrizen hat, darf end_location nicht angegeben werden.

end_waypoint

Waypoint

Wegpunkt, der einen geografischen Ort darstellt, an dem das Fahrzeug anhält, nachdem es seine letzte VisitRequest abgeschlossen hat. Wenn weder end_waypoint noch end_location angegeben ist, endet die ShipmentRoute des Fahrzeugs sofort, wenn es seine letzte VisitRequest abgeschlossen hat. Wenn das Versandmodell Zeit- und Entfernungsmatrizen hat, darf end_waypoint nicht angegeben werden.

start_tags[]

string

Gibt Tags an, die am Anfang der Route des Fahrzeugs angebracht sind.

Leere oder doppelte Strings sind nicht zulässig.

end_tags[]

string

Gibt Tags an, die am Ende der Route des Fahrzeugs angehängt sind.

Leere oder doppelte Strings sind nicht zulässig.

start_time_windows[]

TimeWindow

Zeitfenster, in denen das Fahrzeug den Startort verlassen kann. Sie müssen innerhalb der globalen Zeitlimits liegen (siehe ShipmentModel.global_*-Felder). Wenn keine Angabe erfolgt, gibt es neben diesen globalen Zeitlimits keine weiteren Einschränkungen.

Zeitfenster, die zum selben wiederholten Feld gehören, dürfen sich nicht überschneiden. Sie müssen also nicht aneinandergrenzen und in chronologischer Reihenfolge angeordnet sein.

cost_per_hour_after_soft_end_time und soft_end_time können nur festgelegt werden, wenn es ein einzelnes Zeitfenster gibt.

end_time_windows[]

TimeWindow

Zeitfenster, in denen das Fahrzeug am Zielort ankommen kann. Sie müssen innerhalb der globalen Zeitlimits liegen (siehe ShipmentModel.global_*-Felder). Wenn keine Angabe erfolgt, gibt es neben diesen globalen Zeitlimits keine weiteren Einschränkungen.

Zeitfenster, die zum selben wiederholten Feld gehören, dürfen sich nicht überschneiden. Sie müssen also nicht aneinandergrenzen und in chronologischer Reihenfolge angeordnet sein.

cost_per_hour_after_soft_end_time und soft_end_time können nur festgelegt werden, wenn es nur ein Zeitfenster gibt.

unloading_policy

UnloadingPolicy

Für das Fahrzeug gilt eine Richtlinie für das Entladen.

load_limits

map<string, LoadLimit>

Kapazitäten des Fahrzeugs (z. B. Gewicht, Volumen, Anzahl der Paletten) Die Schlüssel in der Zuordnung sind die Kennungen der Art der Auslastung, die mit den Schlüsseln des Felds Shipment.load_demands übereinstimmen. Wenn ein bestimmter Schlüssel in dieser Zuordnung nicht vorhanden ist, wird die entsprechende Kapazität als unbegrenzt betrachtet.

cost_per_hour

double

Fahrzeugkosten: Alle Kosten müssen in derselben Einheit wie Shipment.penalty_cost angegeben werden und sich aufsummen.

Kosten pro Stunde der Fahrzeugroute. Diese Kosten werden auf die Gesamtzeit der Route angewendet und umfassen Fahrtzeit, Wartezeit und Besuchszeit. Die Verwendung von cost_per_hour anstelle von nur cost_per_traveled_hour kann zu einer zusätzlichen Latenz führen.

cost_per_traveled_hour

double

Kosten pro zurückgelegte Stunde der Fahrzeugroute. Diese Kosten werden nur auf die Fahrzeit der Route angewendet (d.h. die in ShipmentRoute.transitions angegebene Fahrzeit) und schließen Wartezeit und Besuchszeit aus.

cost_per_kilometer

double

Kosten pro Kilometer der Fahrzeugroute. Diese Kosten werden auf die in der ShipmentRoute.transitions angegebene Entfernung angewendet und nicht auf eine implizit zurückgelegte Entfernung vom arrival_location zum departure_location einer einzelnen VisitRequest.

fixed_cost

double

Pauschalkosten, die anfallen, wenn dieses Fahrzeug für die Bearbeitung einer Sendung verwendet wird.

used_if_route_is_empty

bool

Dieses Feld gilt nur für Fahrzeuge, deren Route keine Sendungen umfasst. Gibt an, ob das Fahrzeug in diesem Fall als gebraucht betrachtet werden soll oder nicht.

Wenn „wahr“ festgelegt ist, fährt das Fahrzeug vom Start- zum Zielort, auch wenn es keine Sendungen abwickelt. Die Zeit- und Entfernungskosten für die Fahrt vom Start- zum Zielort werden berücksichtigt.

Andernfalls fährt es nicht vom Start- zum Zielort und für dieses Fahrzeug sind keine break_rule oder Verzögerungen (von TransitionAttributes) geplant. In diesem Fall enthält die ShipmentRoute des Fahrzeugs keine Informationen mit Ausnahme des Fahrzeugindexes und des Labels.

route_duration_limit

DurationLimit

Limit für die Gesamtdauer der Route des Fahrzeugs. In einem bestimmten OptimizeToursResponse ist die Routendauer eines Fahrzeugs die Differenz zwischen vehicle_end_time und vehicle_start_time.

travel_duration_limit

DurationLimit

Beschränkung, die auf die Fahrtdauer der Route des Fahrzeugs angewendet wird. In einer bestimmten OptimizeToursResponse ist die Fahrzeit der Route die Summe aller transitions.travel_duration.

route_distance_limit

DistanceLimit

Beschränkung, die auf die Gesamtstrecke der Route des Fahrzeugs angewendet wird. In einer bestimmten OptimizeToursResponse ist die Streckenlänge die Summe aller transitions.travel_distance_meters.

extra_visit_duration_for_visit_type

map<string, Duration>

Hier wird eine Zuordnung von Strings vom Typ „visit_types“ zu Zeiträumen angegeben. Die Dauer ist die Zeit, die zusätzlich zu VisitRequest.duration bei Besuchen mit der angegebenen visit_types benötigt wird. Wenn cost_per_hour angegeben ist, fallen für diese zusätzliche Besuchsdauer Kosten an. Schlüssel (z.B. visit_types) dürfen keine leeren Strings sein.

Wenn eine Besuchsanfrage mehrere Typen hat, wird für jeden Typ auf der Karte eine Dauer hinzugefügt.

break_rule

BreakRule

Beschreibt den Pausenplan, der für dieses Fahrzeug gelten soll. Wenn das Feld leer ist, werden für dieses Fahrzeug keine Pausen geplant.

label

string

Gibt ein Label für dieses Fahrzeug an. Dieses Label wird in der Antwort als vehicle_label der entsprechenden ShipmentRoute angegeben.

ignore

bool

Wenn „true“ angegeben ist, muss used_if_route_is_empty „false“ sein. Dieses Fahrzeug wird nicht verwendet.

Wenn ein Versand von einem in injected_first_solution_routes ignorierten Fahrzeug durchgeführt wird, wird er in der ersten Lösung übersprungen, kann aber in der Antwort ausgeführt werden.

Wenn ein Versand von einem ignorierten Fahrzeug in injected_solution_constraint durchgeführt wird und die zugehörige Abholung/Lieferung am Fahrzeug verbleiben muss (d.h. nicht auf Stufe RELAX_ALL_AFTER_THRESHOLD gelockert wird), wird sie in der Antwort übersprungen. Wenn eine Sendung ein nicht leeres Feld allowed_vehicle_indices hat und alle zulässigen Fahrzeuge ignoriert werden, wird sie in der Antwort übersprungen.

travel_duration_multiple

double

Gibt einen Multiplikator an, mit dem die Fahrtzeiten dieses Fahrzeugs erhöht oder verringert werden können. Wenn Sie diesen Wert beispielsweise auf 2,0 festlegen, ist dieses Fahrzeug langsamer und die Fahrzeiten sind doppelt so lang wie bei Standardfahrzeugen. Dieser Multiplikator hat keine Auswirkungen auf die Besuchsdauer. Wenn cost_per_hour oder cost_per_traveled_hour angegeben ist, wirkt sich das auf die Kosten aus. Er muss im Bereich [0,001, 1.000,0] liegen. Wenn dieser Wert nicht festgelegt ist, ist das Fahrzeug standardmäßig und dieser Multiplikator wird als 1, 0 betrachtet.

WARNUNG: Die Fahrtzeiten werden nach Anwendung dieses Multiplikators, aber vor der Ausführung numerischer Vorgänge auf die nächste Sekunde gerundet. Ein kleiner Multiplikator kann daher zu einem Genauigkeitsverlust führen.

Weitere Informationen finden Sie unter extra_visit_duration_for_visit_type unten.

DurationLimit

Ein Limit, das die maximale Dauer der Route eines Fahrzeugs definiert. Sie kann hart oder weich sein.

Wenn ein Feld für den flexiblen Grenzwert definiert ist, müssen sowohl der Grenzwert für den flexiblen Maximalwert als auch die zugehörigen Kosten gemeinsam definiert werden.

Felder
max_duration

Duration

Ein starres Limit, das die Dauer auf maximal max_duration festlegt.

soft_max_duration

Duration

Ein weiches Limit, das keine maximale Dauer vorschreibt, aber bei dessen Überschreitung Kosten für die Route anfallen. Diese Kosten werden mit anderen im Modell definierten Kosten mit derselben Einheit addiert.

Falls angegeben, darf soft_max_duration nicht negativ sein. Wenn auch „max_duration“ definiert ist, muss soft_max_duration kleiner als „max_duration“ sein.

quadratic_soft_max_duration

Duration

Ein weiches Limit, das keine maximale Dauer vorschreibt, aber bei dessen Überschreitung für die Route Kosten anfallen, die quadratisch mit der Dauer ansteigen. Diese Kosten werden mit anderen im Modell definierten Kosten mit derselben Einheit addiert.

Falls angegeben, darf quadratic_soft_max_duration nicht negativ sein. Wenn auch max_duration definiert ist, muss quadratic_soft_max_duration kleiner als max_duration sein und der Unterschied darf nicht mehr als einen Tag betragen:

max_duration - quadratic_soft_max_duration <= 86400 seconds

cost_per_hour_after_soft_max

double

Kosten pro Stunde, die anfallen, wenn der Grenzwert von soft_max_duration überschritten wird. Die zusätzlichen Kosten betragen 0, wenn die Dauer unter der Schwelle liegt. Andernfalls hängen die Kosten von der Dauer ab:

  cost_per_hour_after_soft_max * (duration - soft_max_duration)

Die Kosten dürfen nicht negativ sein.

cost_per_square_hour_after_quadratic_soft_max

double

Kosten pro Quadratkilometer und Stunde, die anfallen, wenn der Grenzwert von quadratic_soft_max_duration überschritten wird.

Die zusätzlichen Kosten betragen 0, wenn die Dauer unter der Schwelle liegt. Andernfalls hängen die Kosten von der Dauer ab:

  cost_per_square_hour_after_quadratic_soft_max *
  (duration - quadratic_soft_max_duration)^2

Die Kosten dürfen nicht negativ sein.

LoadLimit

Definiert ein Ladelimit für ein Fahrzeug, z. B. „Dieser Lkw darf nur bis zu 3.500 kg laden“. load_limits ansehen.

Felder
soft_max_load

int64

Ein weiches Limit für die Auslastung. cost_per_unit_above_soft_max ansehen.

cost_per_unit_above_soft_max

double

Wenn die Auslastung auf der Route dieses Fahrzeugs soft_max_load überschreitet, gilt (nur einmal pro Fahrzeug) die folgende Kostenpauschale: (Auslastung – soft_max_load) * cost_per_unit_above_soft_max. Alle Kosten werden addiert und müssen in derselben Einheit wie Shipment.penalty_cost angegeben werden.

start_load_interval

Interval

Das zulässige Ladeintervall des Fahrzeugs zu Beginn der Route.

end_load_interval

Interval

Das zulässige Ladeintervall des Fahrzeugs am Ende der Route.

max_load

int64

Die maximal zulässige Auslastung.

Intervall

Intervall der zulässigen Lademengen.

Felder
min

int64

Eine akzeptable Mindestauslastung. Muss ≥ 0 sein. Wenn beide angegeben sind, muss min ≤ max sein.

max

int64

Eine maximal zulässige Auslastung. Muss ≥ 0 sein. Wenn keine Angabe gemacht wird, ist die maximale Auslastung durch diese Nachricht nicht eingeschränkt. Wenn beide angegeben sind, muss min ≤ max sein.

TravelMode

Mobilitätsformen, die von Fahrzeugen genutzt werden können.

Diese sollten eine Teilmenge der bevorzugten Mobilitätsarten der Google Maps Platform Routes API sein. Weitere Informationen finden Sie unter https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode.

Enums
TRAVEL_MODE_UNSPECIFIED Nicht angegebene Mobilitätsform, entspricht DRIVING.
DRIVING Mobilitätsform, die der Wegbeschreibung für Pkw entspricht (Auto, …).
WALKING Mobilitätsform, die der Wegbeschreibung für Fußgänger entspricht.

UnloadingPolicy

Richtlinie zum Entladen eines Fahrzeugs. Gilt nur für Sendungen, die sowohl eine Abholung als auch eine Lieferung umfassen.

Andere Sendungen können unabhängig von unloading_policy an jeder beliebigen Stelle auf der Route erfolgen.

Enums
UNLOADING_POLICY_UNSPECIFIED Keine Angabe zu Entladerichtlinien; Lieferungen müssen direkt nach den entsprechenden Abholungen erfolgen.
LAST_IN_FIRST_OUT Die Lieferungen müssen in umgekehrter Reihenfolge der Abholungen erfolgen.
FIRST_IN_FIRST_OUT Die Lieferungen müssen in derselben Reihenfolge wie die Abholungen erfolgen.

Zwischenstopp

Kapselt einen Wegpunkt ein. Wegpunkte markieren die Ankunfts- und Abfahrtsorte von Besuchsanfragen sowie die Start- und Endpunkte von Fahrzeugen.

Felder
side_of_road

bool

Optional. Gibt an, dass das Fahrzeug am Standort dieses Wegpunkts an einer bestimmten Straßenseite halten soll. Wenn Sie diesen Wert festlegen, führt die Route durch den Standort, damit das Fahrzeug an der Straßenseite anhalten kann, die vom Standort aus gesehen auf der rechten Seite der Straße liegt. Diese Option funktioniert nicht für den Mobilitätsmodus „ZU FUSS“.

Union-Feld location_type. Verschiedene Möglichkeiten, einen Standort darzustellen. Für location_type ist nur einer der folgenden Werte zulässig:
location

Location

Ein Punkt, der anhand von geografischen Koordinaten angegeben ist, einschließlich einer optionalen Richtung.

place_id

string

Die POI-Orts-ID, die mit dem Wegpunkt verknüpft ist.