Package google.maps.routeoptimization.v1

Index

RouteOptimization

Ein Dienst zur Optimierung von Fahrzeugtouren.

Gültigkeit bestimmter Feldtypen:

  • google.protobuf.Timestamp
    • Zeitangaben sind in Unix-Zeit: Sekunden seit 1970-01-01T00:00:00+00:00.
    • Sekunden müssen in [0, 253402300799] angegeben werden, d.h. in [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00].
    • Nanos müssen nicht festgelegt oder auf 0 gesetzt sein.
  • google.protobuf.Duration
    • Sekunden müssen in [0, 253402300799] angegeben werden, d.h. in [1970-01-01T00:00:00+00:00, 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/in Cloud Storage gelesen/geschrieben. Wie bei der Methode OptimizeTours enthält jede OptimizeToursRequest eine ShipmentModel und gibt eine OptimizeToursResponse mit ShipmentRoutes zurück. Dabei handelt es sich um 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 Feld done des LRO auf „false“ (falsch) gesetzt ist, wird mindestens eine Anfrage noch verarbeitet. Andere Anfragen wurden möglicherweise erfolgreich ausgeführt. Die Ergebnisse sind in GCS verfügbar.

Wenn das Feld done des LRO auf „true“ gesetzt ist, wurden alle Anfragen verarbeitet. Die Ergebnisse aller erfolgreich verarbeiteten Anfragen sind in GCS verfügbar. Für fehlgeschlagene Anfragen sind die Ergebnisse nicht in GCS verfügbar. Wenn das Feld error des LRO festgelegt ist, enthält es den Fehler aus 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)

Sendet eine OptimizeToursRequest mit einem ShipmentModel und gibt eine OptimizeToursResponse mit ShipmentRoutes zurück. Dies sind eine Reihe von Routen, die von Fahrzeugen ausgeführt werden sollen, um so die Gesamtkosten zu minimieren.

Ein ShipmentModel-Modell besteht hauptsächlich aus Shipments, die ausgeführt werden müssen, und Vehicles, die für den Transport der Shipments verwendet werden können. Die ShipmentRoute weisen den Vehicle-Werten Shipment-Werte 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.

Das Ziel besteht darin, eine Zuweisung von ShipmentRoutes zu Vehicles bereitzustellen, um die Gesamtkosten zu minimieren, wenn bei den Kosten viele Komponenten 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. OptimizeToursResponse für alle Transition- und/oder Visit-Elemente (bzw. für alle ShipmentRoute)

Felder
performed_shipment_count

int32

Anzahl der ausgeführten Sendungen. Beachten Sie, dass ein Abhol- und Lieferpaar nur einmal gezählt wird.

travel_duration

Duration

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

wait_duration

Duration

Gesamtwartezeit für eine Route oder Lösung.

delay_duration

Duration

Gesamtverzögerungsdauer für eine Route oder eine Lösung.

break_duration

Duration

Gesamtunterbrechungsdauer für eine Route oder eine Lösung.

visit_duration

Duration

Gesamtbesuchsdauer für eine Route oder Lösung.

total_duration

Duration

Die Gesamtdauer sollte der Summe aller oben genannten Dauern entsprechen. Für Routen entspricht er außerdem:

[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

Gesamte Entfernung für eine Route oder eine Lösung.

max_loads

map<string, VehicleLoad>

Maximale Belastung auf der gesamten Route (bzw. Lösung) für jede Menge auf dieser Route (bzw. Lösung), berechnet als Maximum über alle 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. Kann von Nutzern als Alias verwendet werden, um Modelle nachzuverfolgen.

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 BatchOptimizeToursRequest. Sie wird im lang andauernden Vorgang zurückgegeben, nachdem der Vorgang abgeschlossen ist.

BreakRule

Regeln zum Generieren von Zeitpausen 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 keinen Besuch durchführen kann. Es kann zu einer Unterbrechung kommen:

  • während der Reise zwischen zwei Besuchen (einschließlich der Zeit unmittelbar vor oder unmittelbar nach einem Besuch, aber nicht während eines Besuchs). In diesem Fall wird die entsprechende Laufzeit zwischen den Besuchen verlängert.
  • oder vor dem Start (das Fahrzeug startet möglicherweise nicht mitten in der Pause). In diesem Fall wirkt sich dies nicht auf die Fahrzeugstartzeit aus.
  • oder nach dem Fahrzeugende (ditto mit der Endzeit des Fahrzeugs).
Felder
break_requests[]

BreakRequest

Reihenfolge der Unterbrechungen Siehe die Meldung BreakRequest.

frequency_constraints[]

FrequencyConstraint

Es können mehrere FrequencyConstraint gelten. Sie müssen alle mit den BreakRequests dieser BreakRule zufrieden sein. Siehe FrequencyConstraint.

BreakRequest

Die Reihenfolge der Pausen (Anzahl und Reihenfolge), die für jedes Fahrzeug gelten, muss im Voraus bekannt sein. Die wiederholten BreakRequests 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. Untergrenze (einschließlich) zu Beginn der Unterbrechung.

latest_start_time

Timestamp

Erforderlich. Obergrenze (einschließlich) zu Beginn der Unterbrechung.

min_duration

Duration

Erforderlich. Minimale Dauer der Pause 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“. Unter der Annahme, dass dies als „In einem fließenden Zeitfenster von 12 Stunden muss mindestens eine Pause von mindestens einer Stunde vorhanden sein“ interpretiert werden kann, würde sich dieses Beispiel so ergeben: FrequencyConstraint:

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

Beim Timing und bei der Dauer der Pausen in der Lösung werden alle diese Einschränkungen berücksichtigt, zusätzlich zu den bereits in BreakRequest angegebenen Zeitfenstern und Mindestdauern.

Ein FrequencyConstraint kann in der Praxis auch für nicht aufeinanderfolgende Unterbrechungen gelten. Im folgenden Zeitplan wird beispielsweise die „1h alle 12h“ berücksichtigt. Beispiel:

  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. Minimale Unterbrechungsdauer 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 enthält. Muss positiv sein.

DataFormat

Datenformate für Ein- und Ausgabedateien.

Enums
DATA_FORMAT_UNSPECIFIED Ungültiger Wert, das Format darf nicht UNSPECIFIED sein.
JSON JavaScript Object Notation.
PROTO_TEXT Protokollzwischenspeicher-Textformat. Weitere Informationen finden Sie unter https://protobuf.dev/reference/protobuf/textformat-spec/.

DistanceLimit

Ein Limit, das eine maximale Strecke definiert, die zurückgelegt werden kann. Er kann entweder 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 werden und nicht negativ sein.

Felder
max_meters

int64

Ein fester Grenzwert, der den Abstand auf maximal „max_meters“ beschränkt. Der Grenzwert darf nicht negativ sein.

soft_max_meters

int64

Ein weicher Grenzwert, bei dem kein maximales Entfernungslimit durchgesetzt wird, aber ein Verstoß führt zu Kosten, die zu anderen im Modell definierten Kosten mit derselben Einheit addiert werden.

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

cost_per_kilometer_below_soft_max

double

Die Kosten pro angefallenem Kilometer werden mit folgender Formel um bis zu soft_max_meters erhöht:

  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 Strecke über dem Limit von soft_max_meters liegt. Die zusätzlichen Kosten sind 0, wenn die Entfernung unter dem Limit liegt. Andernfalls lautet die Formel zur Berechnung der Kosten wie folgt:

  (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, in 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 eingefügte Lösung mit Informationen dazu, welche Besuche eingeschränkt werden müssen und wie sie eingeschränkt werden müssen

Felder
routes[]

ShipmentRoute

Routen der einzuschleusenden Lösung. Einige Routen können in der ursprünglichen Lösung weggelassen werden. Die Routen und übersprungenen Sendungen müssen die grundlegenden Gültigkeitsannahmen erfüllen, die für injected_first_solution_routes aufgeführt sind.

skipped_shipments[]

SkippedShipment

Übersprungene Lieferungen der einzuschleusenden Lösung. Einige können in der ursprünglichen Lösung weggelassen werden. Weitere Informationen finden Sie im Feld routes.

constraint_relaxations[]

ConstraintRelaxation

Gibt für null oder mehr Fahrzeuggruppen an, wann und wie stark 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, an welchen Schwellenwerten die Beschränkungen für Besuche gelockert werden und bis zu welcher Ebene. Lieferungen, die im Feld skipped_shipment aufgeführt sind, können nur übersprungen werden. d.h. sie können nicht ausgeführt werden.

Felder
relaxations[]

Relaxation

Alle Lockerungen der Besuchsbeschränkung, die auf Besuche auf Routen mit Fahrzeugen in vehicle_indices angewendet werden.

vehicle_indices[]

int32

Gibt die Fahrzeugindizes an, für die die Besuchsbeschränkung relaxations gilt. Wenn das Feld leer ist, gilt dies als Standardeinstellung und die relaxations gilt für alle Fahrzeuge, die nicht in den anderen constraint_relaxations angegeben sind. Es kann höchstens einen Standardwert geben, d.h., es darf höchstens ein Feld zur Einschränkung der Einschränkung leer sein vehicle_indices. Ein Fahrzeugindex kann nur einmal aufgeführt werden, auch innerhalb mehrerer constraint_relaxations.

Ein Fahrzeugindex wird genauso kartiert wie ShipmentRoute.vehicle_index, 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 die Start- und Endzeit eines Fahrzeugs in routes vollständig begrenzt, es sei denn, das Fahrzeug ist leer, d.h. es hat keine Besuche und used_if_route_is_empty ist im Modell auf „false“ gesetzt.

relaxations(i).level gibt das Grad der Einschränkung der Einschränkung an, das auf einen Besuch #j angewendet wird, auf den Folgendes zutrifft:

  • 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 entspannt, wenn Folgendes erfüllt ist:
  • 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, wird die ruhigere Stufe angewendet. Dadurch wird das Entspannungsniveau vom Start des Fahrzeugs über die Besuche der Route bis zum Ende entspannter: Das heißt, das Entspannungsniveau nimmt im Verlauf der Route nicht ab.

Das Timing und die Abfolge von Routenbesuchen, die die Schwellenwertbedingungen von relaxations nicht erfüllen, sind vollständig eingeschränkt. In diese Sequenzen können keine Besuche 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 ab threshold_time UND mindestens threshold_visit_count erfüllt sind.

threshold_time

Timestamp

Der Zeitpunkt, zu oder nach dem die Lockerung 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 route.visits_size() + 1 festgelegt ist, darf level nur auf das Fahrzeugende angewendet werden. Wenn er größer als route.visits_size() + 1 ist, wird level nicht auf diese Route angewendet.

Level

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

Die folgende Aufzählung erfolgt in der Reihenfolge, in der die Lockerung zunimmt.

Enums
LEVEL_UNSPECIFIED

Implizierte Standardlockerung: Es gibt keine Beschränkungen, die gelockert werden, d.h. alle Besuche sind vollständig eingeschränkt.

Dieser Wert darf nicht explizit in level verwendet werden.

RELAX_VISIT_TIMES_AFTER_THRESHOLD Besuchsbeginn und Start-/Endzeiten des Fahrzeugs werden gelockert, aber jeder Besuch bleibt an dasselbe Fahrzeug gebunden und die Besuchssequenz muss eingehalten werden: Es können keine Besuche zwischen ihnen oder davor eingefügt werden.
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD Wie bei „RELAX_VISIT_TIMES_AFTER_THRESHOLD“, aber die Besuchssequenz ist ebenfalls entspannt: Besuche können nur von diesem Fahrzeug durchgeführt werden, können aber möglicherweise unterbrochen werden.
RELAX_ALL_AFTER_THRESHOLD Wie bei RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD, aber das Fahrzeug ist auch entspannt: Besuche sind zum Zeitpunkt des Grenzwerts oder danach völlig kostenlos und können möglicherweise keine Leistung erzielen.

InputConfig

Geben Sie eine Eingabe 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

Ein Google Cloud Storage-Speicherort. Dabei muss es sich um ein einzelnes Objekt (Datei) handeln.

Standort

Kapselt einen Standort ein (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 als Start- und Zielpunkt verwendet werden soll. Ausrichtungswerte können zwischen 0 und 360 liegen, wobei 0 eine Richtung nach Norden, 90 eine Richtung nach Osten usw. angibt.

OptimizeToursRequest

Die Anfrage wird an einen Lösungsmanager für die Touroptimierung gesendet, der das zu lösende Versandmodell sowie die Optimierungsparameter definiert.

Felder
parent

string

Erforderlich. Zielprojekt oder -ort für den Aufruf.

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 überschritten oder die Serverfrist für synchrone Anfragen erreicht ist, je nachdem, was früher eintritt.

Bei asynchronen Anfragen generiert der Server (wenn möglich) vor Ablauf des Zeitlimits eine Lösung.

model

ShipmentModel

Zu lösendes Versandmodell.

solving_mode

SolvingMode

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

search_mode

SearchMode

Suchmodus, der zum Lösen der Anfrage verwendet wird.

injected_first_solution_routes[]

ShipmentRoute

Leiten Sie den Optimierungsalgorithmus an, um eine erste Lösung zu finden, die einer vorherigen Lösung ähnelt.

Das Modell wird beim Erstellen der ersten Lösung eingeschränkt. 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 innerhalb des Bereichs liegen.
  • Eine Sendung darf nur auf einer Route referenziert werden.
  • die Abholung einer Lieferung zur Abholung und Lieferung muss vor der Lieferung erfolgen.
  • Es darf nicht mehr als eine Abhol- oder Lieferalternative einer Sendung ausgeführt werden.
  • steigen die Fahrzeiten für alle Routen (d.h. vehicle_start_time <= visits[0].start_time <= visits[1].start_time ... <= vehicle_end_time).
  • Ein Versand darf nur mit einem zulässigen Fahrzeug durchgeführt werden. Ein Fahrzeug ist zulässig, wenn Shipment.allowed_vehicle_indices leer ist oder vehicle_index in Shipment.allowed_vehicle_indices enthalten ist.

Wenn die injizierte Lösung nicht durchführbar ist, wird nicht unbedingt ein Validierungsfehler zurückgegeben. Stattdessen wird möglicherweise ein Fehler zurückgegeben, der die Nichtdurchführbarkeit anzeigt.

injected_solution_constraint

InjectedSolutionConstraint

Schränken Sie den Optimierungsalgorithmus ein, um eine endgültige Lösung zu finden, die einer vorherigen Lösung ähnelt. Dies kann beispielsweise verwendet werden, um Teile von Routen zu fixieren, die bereits abgeschlossen sind oder noch abgeschlossen werden müssen, 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 das Feld nicht leer ist, werden die angegebenen Routen aktualisiert, ohne dass die zugrunde liegende Abfolge von Besuchen oder Fahrtzeiten geändert wird. Es werden nur andere Details aktualisiert. Das Modell wird dadurch nicht gelöst.

Seit dem 11. Dezember 2020 werden damit nur Polylinien nicht leerer Routen gefüllt und populate_polylines muss auf „true“ gesetzt sein.

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

Dieses Feld darf nicht zusammen mit injected_first_solution_routes oder injected_solution_constraint verwendet werden.

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

interpret_injected_solutions_using_labels

bool

Falls 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 Versand- 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 der Anfrage hinzugefügt wurden.

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

Wenn eine vehicle_label in der injizierten Lösung nicht einem Anfragefahrzeug entspricht, wird die entsprechende Route zusammen mit den zugehörigen Besuchen aus der Lösung entfernt. Wenn ein shipment_label in der injizierten Lösung nicht mit einer Versandanfrage übereinstimmt, wird der entsprechende Besuch aus der Lösung entfernt. Wenn eine SkippedShipment.label in der injizierten Lösung nicht mit einer Versandanfrage übereinstimmt, wird die SkippedShipment aus der Lösung entfernt.

Das Entfernen von Routenbesuchen oder ganzer Routen aus einer eingefügten Lösung kann sich auf die implizierten Einschränkungen auswirken, was zu einer Änderung der Lösung, Validierungsfehlern oder Undurchführbarkeit führen kann.

HINWEIS: Der Aufrufer muss sicherstellen, dass jedes Vehicle.label (bzw. Shipment.label) identifiziert eindeutig ein Fahrzeug- bzw. Versandentität, die in den beiden relevanten Anfragen verwendet wird: die vergangene Anfrage, die die in der eingeschleusten Lösung verwendete OptimizeToursResponse generiert hat, und die aktuelle Anfrage, die die eingeschleuste Lösung enthält. Die oben beschriebenen Eindeutigkeitsprüfungen reichen nicht aus, um diese Anforderung zu erfüllen.

consider_road_traffic

bool

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

populate_polylines

bool

Bei Einstellung auf „true“ werden Polylinien in Antwort-ShipmentRoutes ausgefüllt.

populate_transition_polylines

bool

Falls wahr, werden Polylinien in der Antwort ShipmentRoute.transitions ausgefüllt.

allow_large_deadline_despite_interruption_risk

bool

Wenn dieser festgelegt ist, kann die Anfrage ein Zeitlimit (siehe https://grpc.io/blog/deadlines) von bis zu 60 Minuten haben. Andernfalls beträgt die maximale Frist nur 30 Minuten. Beachten Sie, dass bei langlebigen Anfragen ein erheblich größeres, aber dennoch geringes Unterbrechungsrisiko besteht.

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 „true“ gesetzt ist, muss dieses Feld festgelegt werden und definiert die Geschwindigkeit, die zur Berechnung von Fahrtzeiten verwendet wird. Der Wert muss mindestens 1,0 Meter/Sekunden betragen.

max_validation_errors

int32

Kürzt die Anzahl der zurückgegebenen Validierungsfehler. Diese Fehler werden in der Regel als BadRequest-Fehlerdetail an die Fehlernutzlast INVALID_ARGUMENT angehängt (https://cloud.google.com/apis/design/errors#error_details). Es sei denn, solutions_mode=VALIDATE_ONLY: Siehe Feld OptimizeToursResponse.validation_errors. Der Standardwert ist 100 und ist auf 10.000 begrenzt.

SearchMode

Modus, der das Verhalten der Suche definiert und dabei Latenz im Vergleich zur Lösungsqualität abwägt. In allen Modi wird das globale Zeitlimit für 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 die Zeit, um nach besseren Lösungen zu suchen.

SolvingMode

Definiert, wie der Matherechner die Anfrage verarbeiten soll. In allen Modi außer VALIDATE_ONLY erhalten Sie bei einer ungültigen Anfrage den Fehler INVALID_REQUEST. Unter max_validation_errors erfahren Sie, wie Sie die Anzahl der zurückgegebenen Fehler begrenzen.

Enums
DEFAULT_SOLVE Löse das Modell. Warnungen können in [OptimizeToursResponse.validation_errors][google.cloud.Optimization.v1.OptimizeToursResponse.validation_errors] ausgegeben werden.
VALIDATE_ONLY Validiert nur das Modell, ohne es zu lösen: Es werden so viele OptimizeToursResponse.validation_errors wie möglich ausgefüllt.
DETECT_SOME_INFEASIBLE_SHIPMENTS

Wertet nur OptimizeToursResponse.validation_errors oder OptimizeToursResponse.skipped_shipments und löst nicht den Rest der Anfrage (status und routes sind in der Antwort nicht festgelegt). Wenn in injected_solution_constraint-Routen Inkompatibilitäten festgestellt werden, werden sie in das Feld OptimizeToursResponse.validation_errors eingefügt und OptimizeToursResponse.skipped_shipments bleibt leer.

WICHTIG: Nicht alle nicht durchführbaren Sendungen werden an diese Stelle zurückgesendet, sondern nur solche, die bei der Vorverarbeitung als nicht durchführbar erkannt werden.

OptimizeToursResponse

Antwort nach der Lösung eines Problems zur Optimierung der Tour mit den Routen, denen jedes Fahrzeug folgt, den übersprungenen Sendungen und den Gesamtkosten der Lösung.

Felder
routes[]

ShipmentRoute

Routen, die für jedes Fahrzeug berechnet werden die i-te Route dem i-ten Fahrzeug im Modell entspricht.

request_label

string

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

skipped_shipments[]

SkippedShipment

Die Liste aller übersprungenen Sendungen.

validation_errors[]

OptimizeToursValidationError

Liste aller Validierungsfehler, die unabhängig erkannt wurden. Siehe "MEHRERE FEHLER" Erklärung für die OptimizeToursValidationError-Nachricht. Statt Fehlern werden auch Warnungen angezeigt, wenn solving_mode den Wert DEFAULT_SOLVE hat.

metrics

Metrics

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

Messwerte

Gesamtmesswerte, zusammengefasst für 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 obligatorischen Sendungen übersprungen.

used_vehicle_count

int32

Anzahl der genutzten Fahrzeuge. Hinweis: Wenn eine Fahrzeugroute leer ist und Vehicle.used_if_route_is_empty „true“ ist, wird das Fahrzeug als genutzt betrachtet.

earliest_vehicle_start_time

Timestamp

Die früheste Startzeit für ein gebrauchtes Fahrzeug, berechnet als Minimum aller gebrauchten Fahrzeuge in der Kategorie „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, relativ zur Eingabe von OptimizeToursRequest. Beispiel: „model.shipments.pickups.cost“. Die Werte sind die Gesamtkosten, die vom entsprechenden Kostenfeld generiert und über die gesamte Lösung aggregiert wurden. Mit anderen Worten: „cost“["model.shipments.pickups.cost"] ist die Summe aller Abholkosten der Lösung. Alle im Modell definierten Kosten werden hier detailliert aufgeführt, mit Ausnahme von Kosten im Zusammenhang mit Übergangsattributen, die seit dem 01.01.2022 nur in aggregierter Form gemeldet werden.

total_cost

double

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

OptimizeToursValidationError

Beschreibt einen Fehler oder eine Warnung, die beim Validieren eines OptimizeToursRequest aufgetreten ist.

Felder
code

int32

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

Die anderen Felder (unten) liefern weitere Informationen zum Fehler.

MEHRERE FEHLER: Bei mehreren Fehlern wird bei der Validierung versucht, mehrere davon auszugeben. Ähnlich wie ein Compiler ist dies ein nicht perfekter Prozess. Einige Validierungsfehler sind „schwerwiegend“, das heißt, sie stoppen den gesamten Validierungsprozess. Dies gilt unter anderem für display_name="UNSPECIFIED"-Fehler. Einige können dazu führen, dass bei der Validierung andere Fehler übersprungen werden.

Stabilität: code und display_name sollten sehr stabil sein. Im Laufe der Zeit können jedoch neue Codes und Anzeigenamen erscheinen. Dies kann dazu führen, dass eine bestimmte (ungültige) Anfrage zu einem anderen Paar (code, display_name) führt, da im neuen Fehler das alte Paar ausgeblendet wurde (siehe „MULTIPLE ERRORS“).

REFERENZ: Eine Liste aller (Code, Name)-Paare:

  • UNSPECIFIED = 0;
  • VALIDATION_TIMEOUT_ERROR = 10; Die Validierung konnte nicht innerhalb der Frist abgeschlossen werden.
  • REQUEST_OPTIONS_ERROR = 12;

    • REQUEST_OPTIONS_INVALID_SOLVING_MODE = 1201;
    • REQUEST_OPTIONS_INVALID_MAX_VALIDATION_ERRORS = 1203;
    • REQUEST_OPTIONS_INVALID_GEODESIC_METERS_PER_SECOND = 1204;
    • REQUEST_OPTIONS_GEODESIC_METERS_PER_SECOND_TOO_SMALL = 1205;
    • REQUEST_OPTIONS_MISSING_GEODESIC_METERS_PER_SECOND = 1206;
    • REQUEST_OPTIONS_POPULATE_PATHFINDER_TRIPS_AND_GEODESIC_DISTANCE = 1207;
    • REQUEST_OPTIONS_COST_MODEL_OPTIONS_AND_GEODESIC_DISTANCE = 1208;
    • REQUEST_OPTIONS_TRAVEL_MODE_INCOMPATIBLE_WITH_TRAFFIC = 1211;
    • REQUEST_OPTIONS_MULTIPLE_TRAFFIC_FLAVORS = 1212;
    • REQUEST_OPTIONS_INVALID_TRAFFIC_FLAVOR = 1213;
    • REQUEST_OPTIONS_TRAFFIC_ACTIVE_WITHOUT_GLOBAL_START_TIME = 1214;
    • REQUEST_OPTIONS_TRAFFIC_ACTIVE_WITH_PRECEDENCES = 1215;
    • REQUEST_OPTIONS_TRAFFIC_PREFILL_MODE_INVALID = 1216;
    • REQUEST_OPTIONS_TRAFFIC_PREFILL_ENABLED_WITHOUT_TRAFFIC = 1217;
  • INJECTED_SOLUTION_ERROR = 20;
    • INJECTED_SOLUTION_MISSING_LABEL = 2000;
    • INJECTED_SOLUTION_DUPLICATE_LABEL = 2001;
    • INJECTED_SOLUTION_AMBIGUOUS_INDEX = 2002;
    • INJECTED_SOLUTION_INFEASIBLE_AFTER_GETTING_TRAVEL_TIMES = 2003;
    • INJECTED_SOLUTION_TRANSITION_INCONSISTENT_WITH_ACTUAL_TRAVEL = 2004;
    • INJECTED_SOLUTION_CONCURRENT_SOLUTION_TYPES = 2005;
    • INJECTED_SOLUTION_MORE_THAN_ONE_PER_TYPE = 2006;
    • INJECTED_SOLUTION_REFRESH_WITHOUT_POPULATE = 2008;
    • INJECTED_SOLUTION_CONSTRAINED_ROUTE_PORTION_INFEASIBLE = 2010;
  • SHIPMENT_MODEL_ERROR = 22;
    • SHIPMENT_MODEL_TOO_LARGE = 2200;
    • SHIPMENT_MODEL_TOO_MANY_CAPACITY_TYPES = 2201;
    • SHIPMENT_MODEL_GLOBAL_START_TIME_NEGATIVE_OR_NAN = 2202;
    • SHIPMENT_MODEL_GLOBAL_END_TIME_TOO_LARGE_OR_NAN = 2203;
    • SHIPMENT_MODEL_GLOBAL_START_TIME_AFTER_GLOBAL_END_TIME = 2204;
    • SHIPMENT_MODEL_GLOBAL_DURATION_TOO_LONG = 2205;
    • SHIPMENT_MODEL_MAX_ACTIVE_VEHICLES_NOT_POSITIVE = 2206;
    • SHIPMENT_MODEL_DURATION_MATRIX_TOO_LARGE = 2207;
  • INDEX_ERROR = 24;
  • TAG_ERROR = 26;
  • TIME_WINDOW_ERROR = 28;
    • TIME_WINDOW_INVALID_START_TIME = 2800;
    • TIME_WINDOW_INVALID_END_TIME = 2801;
    • TIME_WINDOW_INVALID_SOFT_START_TIME = 2802;
    • TIME_WINDOW_INVALID_SOFT_END_TIME = 2803;
    • TIME_WINDOW_OUTSIDE_GLOBAL_TIME_WINDOW = 2804;
    • TIME_WINDOW_START_TIME_AFTER_END_TIME = 2805;
    • TIME_WINDOW_INVALID_COST_PER_HOUR_BEFORE_SOFT_START_TIME = 2806;
    • TIME_WINDOW_INVALID_COST_PER_HOUR_AFTER_SOFT_END_TIME = 2807;
    • TIME_WINDOW_COST_BEFORE_SOFT_START_TIME_WITHOUT_SOFT_START_TIME = 2808;
    • TIME_WINDOW_COST_AFTER_SOFT_END_TIME_WITHOUT_SOFT_END_TIME = 2809;
    • TIME_WINDOW_SOFT_START_TIME_WITHOUT_COST_BEFORE_SOFT_START_TIME = 2810;
    • TIME_WINDOW_SOFT_END_TIME_WITHOUT_COST_AFTER_SOFT_END_TIME = 2811;
    • TIME_WINDOW_OVERLAPPING_ADJACENT_OR_EARLIER_THAN_PREVIOUS = 2812;
    • TIME_WINDOW_START_TIME_AFTER_SOFT_START_TIME = 2813;
    • TIME_WINDOW_SOFT_START_TIME_OUTSIDE_GLOBAL_TIME_WINDOW = 2819;
    • TIME_WINDOW_SOFT_END_TIME_OUTSIDE_GLOBAL_TIME_WINDOW = 2820;
    • TIME_WINDOW_SOFT_END_TIME_AFTER_END_TIME = 2816;
    • TIME_WINDOW_COST_BEFORE_SOFT_START_TIME_SET_AND_MULTIPLE_WINDOWS = 2817;
    • TIME_WINDOW_COST_AFTER_SOFT_END_TIME_SET_AND_MULTIPLE_WINDOWS = 2818;
    • TRANSITION_ATTRIBUTES_ERROR = 30;
    • TRANSITION_ATTRIBUTES_INVALID_COST = 3000;
    • TRANSITION_ATTRIBUTES_INVALID_COST_PER_KILOMETER = 3001;
    • TRANSITION_ATTRIBUTES_DUPLICATE_TAG_PAIR = 3002;
    • TRANSITION_ATTRIBUTES_DISTANCE_LIMIT_MAX_METERS_UNSUPPORTED = 3003;
    • TRANSITION_ATTRIBUTES_UNSPECIFIED_SOURCE_TAGS = 3004;
    • TRANSITION_ATTRIBUTES_CONFLICTING_SOURCE_TAGS_FIELDS = 3005;
    • TRANSITION_ATTRIBUTES_UNSPECIFIED_DESTINATION_TAGS = 3006;
    • TRANSITION_ATTRIBUTES_CONFLICTING_DESTINATION_TAGS_FIELDS = 3007;
    • TRANSITION_ATTRIBUTES_DELAY_DURATION_NEGATIVE_OR_NAN = 3008;
    • TRANSITION_ATTRIBUTES_Delay_DURATION_EXCEEDS_GLOBAL_DURATION = 3009;
  • AMOUNT_ERROR = 31;
    • AMOUNT_NEGATIVE_VALUE = 3100;
  • LOAD_LIMIT_ERROR = 33;
    • LOAD_LIMIT_INVALID_COST_ABOVE_SOFT_MAX = 3303;
    • LOAD_LIMIT_SOFT_MAX_WITHOUT_COST_ABOVE_SOFT_MAX = 3304;
    • LOAD_LIMIT_COST_ABOVE_SOFT_MAX_WITHOUT_SOFT_MAX = 3305;
    • LOAD_LIMIT_NEGATIVE_SOFT_MAX = 3306;
    • LOAD_LIMIT_MIXED_DEMAND_TYPE = 3307;
    • LOAD_LIMIT_MAX_LOAD_NEGATIVE_VALUE = 3308;
    • LOAD_LIMIT_SOFT_MAX_ABOVE_MAX = 3309;
  • INTERVAL_ERROR = 34;
    • INTERVAL_MIN_EXCEEDS_MAX = 3401;
    • INTERVAL_NEGATIVE_MIN = 3402;
    • INTERVAL_NEGATIVE_MAX = 3403;
    • INTERVAL_MIN_EXCEEDS_CAPACITY = 3404;
    • INTERVAL_MAX_EXCEEDS_CAPACITY = 3405;
  • DISTANCE_LIMIT_ERROR = 36;
    • DISTANCE_LIMIT_INVALID_COST_AFTER_SOFT_MAX = 3601;
    • DISTANCE_LIMIT_SOFT_MAX_WITHOUT_COST_AFTER_SOFT_MAX = 3602;
    • DISTANCE_LIMIT_COST_AFTER_SOFT_MAX_WITHOUT_SOFT_MAX = 3603;
    • DISTANCE_LIMIT_NEGATIVE_MAX = 3604;
    • DISTANCE_LIMIT_NEGATIVE_SOFT_MAX = 3605;
    • DISTANCE_LIMIT_SOFT_MAX_LARGER_THAN_MAX = 3606;
  • DURATION_LIMIT_ERROR = 38;
    • DURATION_LIMIT_MAX_DURATION_NEGATIVE_OR_NAN = 3800;
    • DURATION_LIMIT_SOFT_MAX_DURATION_NEGATIVE_OR_NAN = 3801;
    • DURATION_LIMIT_INVALID_COST_PER_HOUR_AFTER_SOFT_MAX = 3802;
    • DURATION_LIMIT_SOFT_MAX_WITHOUT_COST_AFTER_SOFT_MAX = 3803;
    • DURATION_LIMIT_COST_AFTER_SOFT_MAX_WITHOUT_SOFT_MAX = 3804;
    • DURATION_LIMIT_QUADRATIC_SOFT_MAX_DURATION_NEGATIVE_OR_NAN = 3805;
    • DURATION_LIMIT_INVALID_COST_AFTER_QUADRATIC_SOFT_MAX = 3806;
    • DURATION_LIMIT_QUADRATIC_SOFT_MAX_WITHOUT_COST_PER_SQUARE_HOUR = 3807;
    • DURATION_LIMIT_COST_PER_SQUARE_HOURS_WITHOUT_QUADRATIC_SOFT_MAX = 3808;
    • DURATION_LIMIT_QUADRATIC_SOFT_MAX_WITHOUT_MAX = 3809;
    • DURATION_LIMIT_SOFT_MAX_LARGER_THAN_MAX = 3810;
    • DURATION_LIMIT_QUADRATIC_SOFT_MAX_LARGER_THAN_MAX = 3811;
    • DURATION_LIMIT_DIFF_BETWEEN_MAX_AND_QUADRATIC_SOFT_MAX_TOO_LARGE = 3812;
    • DURATION_LIMIT_MAX_DURATION_EXCEEDS_GLOBAL_DURATION = 3813;
    • DURATION_LIMIT_SOFT_MAX_DURATION_EXCEEDS_GLOBAL_DURATION = 3814;
    • DURATION_LIMIT_QUADRATIC_SOFT_MAX_DURATION_EXCEEDS_GLOBAL_DURATION = 3815;
  • SHIPMENT_ERROR = 40;
    • SHIPMENT_PD_LIMIT_WITHOUT_PICKUP_AND_DELIVERY = 4014;
    • SHIPMENT_PD_ABSOLUTE_DETOUR_LIMIT_DURATION_NEGATIVE_OR_NAN = 4000;
    • SHIPMENT_PD_ABSOLUTE_DETOUR_LIMIT_DURATION_EXCEEDS_GLOBAL_DURATION = 4001;
    • SHIPMENT_PD_RELATIVE_DETOUR_LIMIT_INVALID = 4015;
    • SHIPMENT_PD_DETOUR_LIMIT_AND_EXTRA_VISIT_DURATION = 4016;
    • SHIPMENT_PD_TIME_LIMIT_DURATION_NEGATIVE_OR_NAN = 4002;
    • SHIPMENT_PD_TIME_LIMIT_DURATION_EXCEEDS_GLOBAL_DURATION = 4003;
    • SHIPMENT_EMPTY_SHIPMENT_TYPE = 4004;
    • SHIPMENT_NO_PICKUP_NO_DELIVERY = 4005;
    • SHIPMENT_INVALID_PENALTY_COST = 4006;
    • SHIPMENT_ALLOWED_VEHICLE_INDEX_OUT_OF_BOUNDS = 4007;
    • SHIPMENT_DUPLICATE_ALLOWED_VEHICLE_INDEX = 4008;
    • SHIPMENT_INCONSISTENT_COST_FOR_VEHICLE_SIZE_WITHOUT_INDEX = 4009;
    • SHIPMENT_INCONSISTENT_COST_FOR_VEHICLE_SIZE_WITH_INDEX = 4010;
    • SHIPMENT_INVALID_COST_FOR_VEHICLE = 4011;
    • SHIPMENT_COST_FOR_VEHICLE_INDEX_OUT_OF_BOUNDS = 4012;
    • SHIPMENT_DUPLICATE_COST_FOR_VEHICLE_INDEX = 4013;
  • VEHICLE_ERROR = 42;
    • VEHICLE_EMPTY_REQUIRED_OPERATOR_TYPE = 4200;
    • VEHICLE_DUPLICATE_REQUIRED_OPERATOR_TYPE = 4201;
    • VEHICLE_NO_OPERATOR_WITH_REQUIRED_OPERATOR_TYPE = 4202;
    • VEHICLE_EMPTY_START_TAG = 4203;
    • VEHICLE_DUPLICATE_START_TAG = 4204;
    • VEHICLE_EMPTY_END_TAG = 4205;
    • VEHICLE_DUPLICATE_END_TAG = 4206;
    • VEHICLE_EXTRA_VISIT_DURATION_NEGATIVE_OR_NAN = 4207;
    • VEHICLE_EXTRA_VISIT_DURATION_EXCEEDS_GLOBAL_DURATION = 4208;
    • VEHICLE_EXTRA_VISIT_DURATION_EMPTY_KEY = 4209;
    • VEHICLE_FIRST_SHIPMENT_INDEX_OUT_OF_BOUNDS = 4210;
    • VEHICLE_FIRST_SHIPMENT_IGNORED = 4211;
    • VEHICLE_FIRST_SHIPMENT_NOT_BOUND = 4212;
    • VEHICLE_LAST_SHIPMENT_INDEX_OUT_OF_BOUNDS = 4213;
    • VEHICLE_LAST_SHIPMENT_IGNORED = 4214;
    • VEHICLE_LAST_SHIPMENT_NOT_BOUND = 4215;
    • VEHICLE_IGNORED_WITH_used_IF_ROUTE_IS_EMPTY = 4216;
    • VEHICLE_INVALID_COST_PER_KILOMETER = 4217;
    • VEHICLE_INVALID_COST_PER_HOUR = 4218;
    • VEHICLE_INVALID_COST_PER_TRAVELED_HOUR = 4219;
    • VEHICLE_INVALID_FIXED_COST = 4220;
    • VEHICLE_INVALID_TRAVEL_DURATION_MULTIPLE = 4221;
    • VEHICLE_TRAVEL_DURATION_MULTIPLE_WITH_SHIPMENT_PD_DETOUR_LIMITS = 4223;
    • VEHICLE_MATRIX_INDEX_WITH_SHIPMENT_PD_DETOUR_LIMITS = 4224;
    • VEHICLE_MINIMUM_DURATION_LONGER_THAN_DURATION_LIMIT = 4222;
  • VISIT_REQUEST_ERROR = 44;
    • VISIT_REQUEST_EMPTY_TAG = 4400;
    • VISIT_REQUEST_DUPLICATE_TAG = 4401;
    • VISIT_REQUEST_DURATION_NEGATIVE_OR_NAN = 4404;
    • VISIT_REQUEST_DURATION_EXCEEDS_GLOBAL_DURATION = 4405;
  • PRECEDENCE_ERROR = 46;
    • PRECEDENCE_RULE_MISSING_FIRST_INDEX = 4600;
    • PRECEDENCE_RULE_MISSING_SECOND_INDEX = 4601;
    • PRECEDENCE_RULE_FIRST_INDEX_OUT_OF_BOUNDS = 4602;
    • PRECEDENCE_RULE_SECOND_INDEX_OUT_OF_BOUNDS = 4603;
    • PRECEDENCE_RULE_DUPLICATE_INDEX = 4604;
    • PRECEDENCE_RULE_INEXISTENT_FIRST_VISIT_REQUEST = 4605;
    • PRECEDENCE_RULE_INEXISTENT_SECOND_VISIT_REQUEST = 4606;
  • BREAK_ERROR = 48;
    • BREAK_RULE_EMPTY = 4800;
    • BREAK_REQUEST_UNSPECIFIED_DURATION = 4801;
    • BREAK_REQUEST_UNSPECIFIED_EARLIEST_START_TIME = 4802;
    • BREAK_REQUEST_UNSPECIFIED_LATEST_START_TIME = 4803;
    • BREAK_REQUEST_DURATION_NEGATIVE_OR_NAN = 4804; = 4804;
    • BREAK_REQUEST_LATEST_START_TIME_BEFORE_EARLIEST_START_TIME = 4805;
    • BREAK_REQUEST_EARLIEST_START_TIME_BEFORE_GLOBAL_START_TIME = 4806;
    • BREAK_REQUEST_LATEST_END_TIME_AFTER_GLOBAL_END_TIME = 4807;
    • BREAK_REQUEST_NON_SCHEDULABLE = 4808;
    • BREAK_FREQUENCY_MAX_INTER_BREAK_DURATION_NEGATIVE_OR_NAN = 4809;
    • BREAK_FREQUENCY_MIN_BREAK_DURATION_NEGATIVE_OR_NAN = 4810;
    • BREAK_FREQUENCY_MIN_BREAK_DURATION_EXCEEDS_GLOBAL_DURATION = 4811;
    • BREAK_FREQUENCY_MAX_INTER_BREAK_DURATION_EXCEEDS_GLOBAL_DURATION = 4812;
    • BREAK_REQUEST_DURATION_EXCEEDS_GLOBAL_DURATION = 4813;
    • BREAK_FREQUENCY_MISSING_MAX_INTER_BREAK_DURATION = 4814;
    • BREAK_FREQUENCY_MISSING_MIN_BREAK_DURATION = 4815;
  • SHIPMENT_TYPE_INCOMPATIBILITY_ERROR = 50;
    • SHIPMENT_TYPE_INCOMPATIBILITY_EMPTY_TYPE = 5001;
    • SHIPMENT_TYPE_INCOMPATIBILITY_LESS_THAN_TWO_TYPES = 5002;
    • SHIPMENT_TYPE_INCOMPATIBILITY_DUPLICATE_TYPE = 5003;
    • SHIPMENT_TYPE_INCOMPATIBILITY_INVALID_INCOMPATIBILITY_MODE = 5004;
    • SHIPMENT_TYPE_INCOMPATIBILITY_TOO_MANY_INCOMPATIBILITIES = 5005;
  • SHIPMENT_TYPE_REQUIREMENT_ERROR = 52;
    • SHIPMENT_TYPE_REQUIREMENT_NO_REQUIRED_TYPE = 52001;
    • SHIPMENT_TYPE_REQUIREMENT_NO_DEPENDENT_TYPE = 52002;
    • SHIPMENT_TYPE_REQUIREMENT_INVALID_REQUIREMENT_MODE = 52003;
    • SHIPMENT_TYPE_REQUIREMENT_TOO_MANY_REQUIREMENTS = 52004;
    • SHIPMENT_TYPE_REQUIREMENT_EMPTY_REQUIRED_TYPE = 52005;
    • SHIPMENT_TYPE_REQUIREMENT_DUPLICATE_REQUIRED_TYPE = 52006;
    • SHIPMENT_TYPE_REQUIREMENT_NO_REQUIRED_TYPE_FOUND = 52007;
    • SHIPMENT_TYPE_REQUIREMENT_EMPTY_DEPENDENT_TYPE = 52008;
    • SHIPMENT_TYPE_REQUIREMENT_DUPLICATE_DEPENDENT_TYPE = 52009;
    • SHIPMENT_TYPE_REQUIREMENT_SELF_DEPENDENT_TYPE = 52010;
    • SHIPMENT_TYPE_REQUIREMENT_GRAPH_HAS_CYCLES = 52011;
  • VEHICLE_OPERATOR_ERROR = 54;
    • VEHICLE_OPERATOR_EMPTY_TYPE = 5400;
    • VEHICLE_OPERATOR_MULTIPLE_START_TIME_WINDOWS = 5401;
    • VEHICLE_OPERATOR_SOFT_START_TIME_WINDOW = 5402;
    • VEHICLE_OPERATOR_MULTIPLE_END_TIME_WINDOWS = 5403;
    • VEHICLE_OPERATOR_SOFT_END_TIME_WINDOW = 5404;
  • DURATION_SECONDS_MATRIX_ERROR = 56;
    • DURATION_SECONDS_MATRIX_DURATION_NEGATIVE_OR_NAN = 5600;
    • DURATION_SECONDS_MATRIX_DURATION_EXCEEDS_GLOBAL_DURATION = 5601;
  • WARNING = 9;
    • WARNING_INJECTED_FIRST_SOLUTION = 90;
      • WARNING_INJECTED_FIRST_SOLUTION_INFEASIBLE_SHIPMENTS_REMOVED = 9000;
      • WARNING_INJECTED_FIRST_SOLUTION_INFEASIBLE_AFTER_GETTING_TRAVEL_TIMES = 9001;
display_name

string

Der Anzeigename des Fehlers.

fields[]

FieldReference

Ein Fehlerkontext kann in den meisten Fällen 0, 1 oder mehr Felder enthalten. Wenn Sie sich zum Beispiel auf Fahrzeug 4 und Lieferung 2 beziehen, können Sie dies wie folgt tun:

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

Beachten Sie jedoch, dass sich die Kardinalität von fields für einen bestimmten Fehlercode nicht ändern sollte.

error_message

string

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 für eine bestimmte code kann sich im Laufe der Zeit ändern (zur Klarstellung sei erwähnt) 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 auf keinen Fall darauf verlassen und nur zum manuellen Debuggen von Modellen verwenden.

FieldReference

Gibt einen Kontext für den Validierungsfehler an. Ein FieldReference verweist immer auf ein bestimmtes Feld in dieser Datei und hat dieselbe hierarchische Struktur. Beispielsweise können wir Element 2 von start_time_windows von Fahrzeug 5 wie folgt 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 eine Überfüllung der Nachricht zu vermeiden.

Felder
name

string

Name des Felds, z.B. „Fahrzeuge“.

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

key

string

Key, wenn das Feld eine Zuordnung ist.

OutputConfig

Geben Sie ein Ziel für [BatchOptimizeTours][google.maps.routeOptimization.v1.RouteOptimizationService.BatchOptimizeTours]-Ergebnisse 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

Schließt eine Reihe optionaler Bedingungen ein, die bei der Berechnung von Fahrzeugrouten erfüllt werden müssen. Dies ähnelt 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 gegebenenfalls vermieden werden. Routen ohne Mautstraßen werden bevorzugt. Gilt nur für motorisierte Fortbewegungsarten.

avoid_highways

bool

Gibt an, ob Autobahnen vermieden werden sollen, sofern dies sinnvoll ist. Vorzug wird Routen gegeben, die keine Autobahnen enthalten. Gilt nur für motorisierte Fortbewegungsarten.

avoid_ferries

bool

Gibt an, ob Fähren gegebenenfalls vermieden werden sollen. Routen, die keine Fähren enthalten, werden bevorzugt. Gilt nur für motorisierte Fortbewegungsarten.

avoid_indoor

bool

Optional. Gibt an, ob das Fahren in Innenräumen angemessen ist. Routen, die keine Indoor-Navigationssysteme enthalten, haben Vorrang. Gilt nur für die Mobilitätsform WALKING.

Versand

Der Versand eines einzelnen Artikels von einer Abholstelle zu einer Lieferstelle. Damit die Sendung als ausgeführt gilt, muss ein einzelnes Fahrzeug einen Abholort anfahren (und die freien Kapazitäten entsprechend reduzieren) und dann später einen der Lieferorte aufsuchen (und die freien Kapazitäten entsprechend erhöhen).

Felder
display_name

string

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

pickups[]

VisitRequest

Eine Reihe von Alternativen für die Abholung, die der Sendung zugeordnet sind. Wenn nicht angegeben, muss das Fahrzeug nur einen Lieferort aufsuchen.

deliveries[]

VisitRequest

Gruppe von Lieferalternativen für die Lieferung. Wenn nicht angegeben, muss das Fahrzeug nur zu einem Ort aufsuchen, an dem die Abholung stattfindet.

load_demands

map<string, Load>

Die Anforderungen der Sendung (z. B. Gewicht, Menge, 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. Beispiel: „weight_kg“, „volumen_gallons“, „pallet_count“ usw. Wenn ein bestimmter Schlüssel nicht auf der Karte erscheint, wird die entsprechende Last als null betrachtet.

allowed_vehicle_indices[]

int32

Die Fahrzeuge, die diese Sendung ausführen können. Wenn das Feld leer ist, kann die Aktion von allen Fahrzeugen ausgeführt werden. Fahrzeuge sind gemäß ihrem Index in der vehicles-Liste von ShipmentModel angegeben.

costs_per_vehicle[]

double

Gibt die Kosten an, die anfallen, wenn diese Sendung von jedem Fahrzeug zugestellt wird. 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.
  • wie viele Fahrzeuge im Modell enthalten. Das i-te Element entspricht der Fahrzeugnummer i des Modells.

Diese Kosten müssen sich in derselben Einheit wie penalty_cost befinden 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 an Elementen wie „costs_per_vehicle“ haben. Ein Fahrzeugindex kann nur einmal angegeben werden. Wenn ein Fahrzeug von costs_per_vehicle_indices ausgeschlossen ist, betragen die Kosten null.

pickup_to_delivery_absolute_detour_limit

Duration

Gibt die maximale absolute Umwegzeit im Vergleich zum kürzesten Weg von Abholung bis Lieferung an. Wenn angegeben, muss er ein positiver Wert sein und die Sendung muss mindestens eine Abholung und eine Lieferung enthalten.

Es sollte beispielsweise die kürzeste Zeit sein, die von der ausgewählten Abholoption direkt zur ausgewählten Lieferalternative benötigt wird. 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 Lieferung sowohl relative als auch absolute Grenzwerte angegeben sind, wird für jedes mögliche Paar aus Abholung und Lieferung das restriktivere Limit verwendet. Seit dem 10. Oktober 2017 werden Umleitungen nur noch unterstützt, wenn die Reisedauer nicht von den Fahrzeugen abhängig ist.

pickup_to_delivery_time_limit

Duration

Gibt die maximale Dauer vom Beginn der Abholung bis zum Beginn der Lieferung einer Sendung an. Wenn angegeben, muss der Wert nicht negativ sein und die Sendung muss mindestens eine Abholung und eine Zustellung enthalten. Dies hängt nicht davon ab, welche Alternativen für Abholung und Lieferung ausgewählt werden, oder 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

Ein nicht leerer String zur Angabe eines „Typs“ für diese Lieferung. Mit dieser Funktion können Inkompatibilitäten oder Anforderungen zwischen shipment_types definiert werden (siehe shipment_type_incompatibilities und shipment_type_requirements in ShipmentModel).

unterscheidet sich von „visit_types“, das für einen einzelnen Besuch angegeben ist: Alle Abhol-/Lieferungen, die zur selben Sendung gehören, haben dieselbe shipment_type.

label

string

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

ignore

bool

Wenn wahr, überspringen Sie diese Sendung, aber wenden Sie keine penalty_cost an.

Wenn eine Sendung ignoriert wird, tritt ein Validierungsfehler auf, wenn shipment_type_requirements im Modell vorhanden ist.

Das Ignorieren einer Lieferung, die in injected_first_solution_routes oder injected_solution_constraint durchgeführt wird, ist zulässig. Der Matherechner entfernt die entsprechenden Abhol-/Lieferbesuche aus der entsprechenden Route. precedence_rules, die auf ignorierte Sendungen verweisen, werden ebenfalls ignoriert.

penalty_cost

double

Wenn die Lieferung nicht abgeschlossen wird, wird diese Vertragsstrafe auf die Gesamtkosten der Routen aufgeschlagen. Eine Sendung gilt als abgeschlossen, wenn eine ihrer Abhol- und Lieferoptionen aufgerufen 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., der Versand muss abgeschlossen sein.

pickup_to_delivery_relative_detour_limit

double

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

Es sollte beispielsweise die kürzeste Zeit sein, die von der ausgewählten Abholoption direkt zur ausgewählten Lieferalternative benötigt wird. Dann wird durch das Festlegen von pickup_to_delivery_relative_detour_limit Folgendes erzwungen:

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

Wenn für dieselbe Lieferung sowohl relative als auch absolute Grenzwerte angegeben sind, wird für jedes mögliche Paar aus Abholung und Lieferung das restriktivere Limit verwendet. Seit dem 10. Oktober 2017 werden Umleitungen nur noch unterstützt, wenn die Reisedauer nicht von den Fahrzeugen abhängig ist.

Laden

Bei einem Abholtermin wird unter Umständen ein vordefinierter Betrag zur Fahrzeugauslastung hinzugerechnet, wenn es sich um einen Abholservice handelt, oder einen Abzugsbetrag, wenn es sich um eine Lieferung handelt. In dieser Nachricht wird ein solcher Betrag definiert. load_demands ansehen.

Felder
amount

int64

Der Auslastungsgrad des Fahrzeugs für den entsprechenden Besuch variiert. Da es sich um eine Ganzzahl handelt, sollten Nutzer eine geeignete Einheit auswählen, um Abweichungen bei der Genauigkeit 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 Standort, an dem das Fahrzeug beim Ausführen dieser VisitRequest ankommt. Wenn das Versandmodell eine Distanzmatrikel für die Dauer hat, darf arrival_location nicht angegeben werden.

arrival_waypoint

Waypoint

Der Wegpunkt, an dem das Fahrzeug bei dieser VisitRequest ankommt. 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 er mit arrival_location identisch ist. Wenn das Versandmodell eine Distanzmatrikel für die Dauer hat, darf departure_location nicht angegeben werden.

departure_waypoint

Waypoint

Der Wegpunkt, an dem das Fahrzeug nach Abschluss dieser VisitRequest abfährt. Kann weggelassen werden, wenn er mit arrival_waypoint identisch ist. Wenn das Versandmodell eine Distanzmatrikel für die Dauer hat, 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. Beachten Sie, dass ein Fahrzeug möglicherweise außerhalb der Ankunftszeit abfahren kann, d.h. Ankunftszeit und Dauer müssen nicht innerhalb eines Zeitfensters liegen. 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 sich nicht überschneiden oder 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 Bearbeitung dieser Besuchsanfrage auf einer Fahrzeugroute. Damit können unterschiedliche Kosten für jede alternative Abholung oder Lieferung einer Sendung bezahlt werden. 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 für diese 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 des Besuchs an. Damit kann zusätzliche Zeit zugewiesen werden, die ein Fahrzeug für diesen Besuch benötigt (siehe Vehicle.extra_visit_duration_for_visit_type).

Ein Typ kann nur einmal vorkommen.

label

string

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

ShipmentModel

Ein Versandmodell enthält eine Reihe von Sendungen, die von einer Gruppe von Fahrzeugen durchgeführt werden müssen und dabei die Gesamtkosten, die sich aus der folgenden Summe ergeben, zu minimieren:

  • die Kosten für die Routenplanung der Fahrzeuge (Summe der Kosten pro Gesamtzeit, Kosten pro Fahrtzeit und Fixkosten für alle Fahrzeuge).
  • die nicht erfüllten Versandstrafen.
  • die Kosten der globalen Dauer der Lieferungen
Felder
shipments[]

Shipment

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

vehicles[]

Vehicle

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

global_start_time

Timestamp

Globale Start- und Endzeit des Modells: Zeiten außerhalb dieses Bereichs können nicht als gültig angesehen 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 maximal 31.536.000 Sekunden voneinander entfernt sein.

Wenn Sie cost_per_*hour-Felder verwenden, können Sie für dieses Fenster ein kleineres Intervall festlegen, um die Leistung zu steigern. Wenn Sie z. B. einen einzelnen Tag modellieren, sollten Sie die globalen Zeitbeschränkungen auf diesen Tag festlegen. Ist die Richtlinie nicht konfiguriert, wird standardmäßig 00:00:00 UTC, der 1. Januar 1970 (Sekunden: 0, Nanos: 0) verwendet.

global_end_time

Timestamp

Wenn kein Wert festgelegt ist, wird standardmäßig 00:00:00 UTC, der 1. Januar 1971 (Sekunden: 31536000, Nanos: 0) verwendet.

global_duration_cost_per_hour

double

Die „globale Dauer“ des Gesamtplans ist die Differenz zwischen der frühesten effektiven Startzeit und der letzten effektiven Endzeit aller Fahrzeuge. Nutzende können dieser Menge Kosten pro Stunde zuweisen, um beispielsweise zu versuchen, den frühesten Abschluss eines Auftrags zu optimieren. Diese Kosten müssen in derselben Einheit wie Shipment.penalty_cost liegen.

duration_distance_matrices[]

DurationDistanceMatrix

Gibt die im Modell verwendeten Matrizen für Dauer und Entfernung 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 „true“ 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 startet und an locA endet.
  • 1 Anfrage für einen Abholtermin am Standort „locB“.
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 beginnt seine Route an locA und endet an locB, unter Verwendung der Matrix „fast“.
  • 1 Fahrzeug, das seine Route an locB startet und an locB endet, unter Verwendung der Matrix „langsam“.
  • 1 Fahrzeug startet seine Route an locB und endet an locB, unter Verwendung der Matrix „fast“.
  • 1 Anfrage für einen Abholtermin bei 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, mit denen die Quellen der Matrizen für Dauer und Entfernung definiert werden duration_distance_matrices(i).rows(j) definiert die Dauer und die Entfernungen 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 mit genau 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 duration_distance_matrices nicht leer sein.

duration_distance_matrix_dst_tags[]

string

Tags, mit denen die Ziele der Matrizen für Dauer und Entfernung definiert werden duration_distance_matrices(i).rows(j).durations(k) (Resp. duration_distance_matrices(i).rows(j).meters(k)) definiert die Dauer (bzw. die Entfernung) der Reise von Besuchen mit dem Tag duration_distance_matrix_src_tags(j) bis zu Besuchen mit dem Tag duration_distance_matrix_dst_tags(k) in der Matrix i.

Tags entsprechen VisitRequest.tags oder Vehicle.start_tags. Ein bestimmter VisitRequest oder Vehicle muss mit genau einem Tag in diesem Feld übereinstimmen. Die Quell-, Ziel- und Matrix-Tags einer Vehicle können identisch sein. 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 duration_distance_matrices nicht leer sein.

transition_attributes[]

TransitionAttributes

Dem Modell wurden Übergangsattribute hinzugefügt.

shipment_type_incompatibilities[]

ShipmentTypeIncompatibility

Sets inkompatibler „shipment_types“ (siehe ShipmentTypeIncompatibility).

shipment_type_requirements[]

ShipmentTypeRequirement

Gruppe von shipment_type-Anforderungen (siehe ShipmentTypeRequirement).

precedence_rules[]

PrecedenceRule

Satz von Prioritätsregeln, die im Modell erzwungen werden müssen.

max_active_vehicles

int32

Beschränkt die maximale Anzahl aktiver Fahrzeuge. Ein Fahrzeug ist aktiv, wenn auf seiner Route mindestens eine Sendung ausgeführt wird. Dies kann verwendet werden, um die Anzahl der Routen für den Fall zu begrenzen, dass es weniger Fahrer als Fahrzeuge gibt und der Fuhrpark heterogen ist. Bei der Optimierung wird dann die beste Teilmenge von Fahrzeugen ausgewählt. Muss streng positiv sein.

DurationDistanceMatrix

Gibt eine Matrix für die Dauer und die Entfernung zwischen Besuchs- und Fahrzeugstartstandorten und Zielstandorten an.

Felder
rows[]

Row

Gibt die Zeilen der Dauer- und Distanzmatrix an. Es muss so viele Elemente wie ShipmentModel.duration_distance_matrix_src_tags enthalten.

vehicle_start_tag

string

Tag, das definiert, für welche Fahrzeuge diese Matrix für Dauer und Distanz gilt. Wenn das Feld leer ist, gilt dies für alle Fahrzeuge und es kann nur eine 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 andere vehicle_start_tag haben.

Zeile

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

Felder
durations[]

Duration

Werte für die Dauer einer bestimmten Zeile. Es muss so viele Elemente wie ShipmentModel.duration_distance_matrix_dst_tags enthalten.

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 Lieferung einer Sendung): das „zweite“ Ereignis muss mindestens offset_duration nach dem „ersten“ beginnen hat begonnen.

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

Darüber hinaus gelten Vorrangstufen nur dann, wenn beide Lieferungen durchgeführt werden, und werden ansonsten ignoriert.

Felder
first_is_delivery

bool

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

second_is_delivery

bool

Gibt an, ob das „second“-Element ist eine Lieferung.

offset_duration

Duration

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

first_index

int32

Versandindex der ersten Angabe . Dieses Feld muss angegeben werden.

second_index

int32

Versandindex der „zweiten“ Antwort . Dieses Feld muss angegeben werden.

ShipmentRoute

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

  |            |            |          |       |  T[2], |        |      |
  | Transition |  Visit #0  |          |       |  V[2], |        |      |
  |     #0     |    aka     |   T[1]   |  V[1] |  ...   | V[n-1] | T[n] |
  |  aka T[0]  |    V[0]    |          |       | V[n-2],|        |      |
  |            |            |          |       | T[n-1] |        |      |
  ^            ^            ^          ^       ^        ^        ^      ^
vehicle    V[0].start   V[0].end     V[1].   V[1].    V[n].    V[n]. vehicle
 start     (arrival)   (departure)   start   end      start    end     end

Beachten Sie bitte Folgendes:

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

Invarianten:

  • Wenn es n Besuche gibt, gibt es n+1 Übergänge.
  • Ein Besuch wird immer von einer vorherigen (gleicher Index) und einer nachfolgenden (Index + 1) Transition umgeben.
  • Auf den Fahrzeugstart folgt immer der Übergang 0.
  • Dem Fahrzeugende geht immer der Übergang #n voraus.

Beim Heranzoomen passiert bei Transition und Visit Folgendes:

---+-------------------------------------+-----------------------------+-->
   |           TRANSITION[i]             |           VISIT[i]          |
   |                                     |                             |
   |  * TRAVEL: the vehicle moves from   |      PERFORM the visit:     |
   |    VISIT[i-1].departure_location to |                             |
   |    VISIT[i].arrival_location, which |  * Spend some time:         |
   |    takes a given travel duration    |    the "visit duration".    |
   |    and distance                     |                             |
   |                                     |  * Load or unload           |
   |  * BREAKS: the driver may have      |    some quantities from the |
   |    breaks (e.g. lunch break).       |    vehicle: the "demand".   |
   |                                     |                             |
   |  * WAIT: the driver/vehicle does    |                             |
   |    nothing. This can happen for     |                             |
   |    many reasons, for example when   |                             |
   |    the vehicle reaches the next     |                             |
   |    event's destination before the   |                             |
   |    start of its time window         |                             |
   |                                     |                             |
   |  * DELAY: *right before* the next   |                             |
   |    arrival. E.g. the vehicle and/or |                             |
   |    driver spends time unloading.    |                             |
   |                                     |                             |
---+-------------------------------------+-----------------------------+-->
   ^                                     ^                             ^
V[i-1].end                           V[i].start                    V[i].end

Und hier ist noch eine kurze Zusammenfassung, wie sich TRAVEL, BREAKS, DELAY und WAIT während eines Übergangs anordnen lassen.

  • Sie überschneiden sich nicht.
  • Die VERZÖGERUNG ist eindeutig und muss ein zusammenhängender Zeitraum direkt vor dem nächsten Besuch (oder dem Ende des Fahrzeugs) sein. Daher reicht es aus, die Verzögerungsdauer zu kennen, um den Beginn und das Ende zu ermitteln.
  • Die Pausen sind zusammenhängende, nicht überlappende Zeiträume. Die Antwort gibt den Beginn und die Dauer jeder Pause an.
  • TRAVEL und WAIT sind präemptiv und können während dieses Übergangs mehrmals unterbrochen werden. Kunden können davon ausgehen, dass die Fahrt „so bald wie möglich“ erfolgt und dass die verbleibende Zeit mit „warten“ gefüllt wird.

Ein (komplexes) Beispiel:

                               TRANSITION[i]
--++-----+-----------------------------------------------------------++-->
  ||     |       |           |       |           |         |         ||
  ||  T  |   B   |     T     |       |     B     |         |    D    ||
  ||  r  |   r   |     r     |   W   |     r     |    W    |    e    ||
  ||  a  |   e   |     a     |   a   |     e     |    a    |    l    ||
  ||  v  |   a   |     v     |   i   |     a     |    i    |    a    ||
  ||  e  |   k   |     e     |   t   |     k     |    t    |    y    ||
  ||  l  |       |     l     |       |           |         |         ||
  ||     |       |           |       |           |         |         ||
--++-----------------------------------------------------------------++-->
Felder
vehicle_index

int32

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

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

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

transitions[]

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. Unter Umständen reicht die Zeit nicht aus, um verkehrsangepasste Fahrten, Verspätungen und Pausen zwischen Besuchen, vor dem ersten oder nach dem letzten Besuch abzuschließen, ohne dabei die Zeitfenster für die Fahrt und die Fahrzeugzeit einzuhalten. Beispiel:

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

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

route_polyline

EncodedPolyline

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

breaks[]

Break

Geplante Pausen für das Fahrzeug, das auf dieser Route unterwegs ist. Die Sequenz breaks steht für Zeitintervalle, die jeweils bei der entsprechenden start_time beginnen und duration Sekunden dauern.

metrics

AggregatedMetrics

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

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 detailliert aufgeführt, mit Ausnahme von Kosten im Zusammenhang mit Übergangsattributen, die seit dem 01.01.2022 nur in aggregierter Form gemeldet werden.

route_total_cost

double

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

Pause

Daten zur Ausführung einer Pause.

Felder
start_time

Timestamp

Beginn einer Pause.

duration

Duration

Dauer einer Pause.

EncodedPolyline

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

Felder
points

string

String, der codierte Punkte der Polylinie darstellt.

Wechsel

Übergang zwischen zwei Ereignissen auf der Route. Weitere Informationen finden Sie in der 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

Die beim Übergang zurückgelegte Strecke.

traffic_info_unavailable

bool

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

delay_duration

Duration

Summe der Verzögerungszeiten, die auf diesen Übergang angewendet wurden. 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 zu Beginn und Dauer der einzelnen Pausen werden in ShipmentRoute.breaks gespeichert.

wait_duration

Duration

Wartezeit während dieser Umstellung. Die Wartezeit entspricht der Inaktivitätsdauer und schließt keine Pausen ein. Beachten Sie auch, dass diese Wartezeit in mehrere nicht aufeinanderfolgende Intervalle aufgeteilt werden kann.

total_duration

Duration

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

  • Nächster Besuch start_time (oder vehicle_end_time, wenn dies der letzte Übergang ist) - start_time dieses Übergangs;
  • Wenn ShipmentRoute.has_traffic_infeasibilities „false“ ist, gilt zusätzlich Folgendes: „total_duration“ = „travel_duration + delay_duration“
  • Pause_duration +wait_duration.
start_time

Timestamp

Startzeit dieses Übergangs.

route_polyline

EncodedPolyline

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

vehicle_loads

map<string, VehicleLoad>

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

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

VehicleLoad

Meldet die tatsächliche Auslastung 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 Lasteinheit wird normalerweise durch den Typ angegeben. Transition.vehicle_loads ansehen.

Aufrufen

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

Felder
shipment_index

int32

Index des Felds shipments in der Quelle ShipmentModel.

is_pickup

bool

Falls wahr, 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

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

load_demands

map<string, Load>

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

detour

Duration

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

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 des entsprechenden Shipment.label, sofern in Shipment angegeben.

visit_label

string

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

ShipmentTypeIncompatibility

Gibt Inkompatibilitäten zwischen Sendungen in Abhängigkeit von ihrem „shipment_type“ an. Inkompatible Sendungen auf derselben Route sind aufgrund des Inkompatibilitätsmodus eingeschränkt.

Felder
types[]

string

Liste der inkompatiblen Typen. Zwei Sendungen mit unterschiedlichen shipment_types sind „inkompatibel“.

incompatibility_mode

IncompatibilityMode

Modus, der auf die Inkompatibilität angewendet wird.

IncompatibilityMode

Mobilitätsformen, mit denen das Auftreten inkompatibler Sendungen auf derselben Route eingeschränkt werden.

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 nicht dasselbe Fahrzeug teilen.
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY

Für zwei Sendungen mit inkompatiblen Typen mit dem Inkompatibilitätsmodus NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY:

  • Wenn beide nur Abholung (keine Lieferungen) oder nur Lieferungen (keine Abholungen) sind, können sie sich nicht dasselbe Fahrzeug teilen.
  • 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

Gibt Anforderungen zwischen Sendungen basierend auf ihrem „shipment_type“ an. Die Details der Anforderung werden durch den Anforderungsmodus definiert.

Felder
required_shipment_type_alternatives[]

string

Liste alternativer Versandtypen, die von der dependent_shipment_types gefordert werden.

dependent_shipment_types[]

string

Alle Sendungen eines Typs im Feld dependent_shipment_types erfordern mindestens eine Sendung vom Typ required_shipment_type_alternatives, die auf derselben Route besucht werden muss.

HINWEIS: Anforderungsketten, die davon abhängen, ein shipment_type-Objekt, sind nicht zulässig.

requirement_mode

RequirementMode

Modus wurde auf die Anforderung angewendet.

RequirementMode

Mobilitätsformen, mit denen das Erscheinungsbild abhängiger Sendungen auf einer Route bestimmt wird.

Enums
REQUIREMENT_MODE_UNSPECIFIED Nicht angegebener Anforderungsmodus. Dieser Wert sollte niemals verwendet werden.
PERFORMED_BY_SAME_VEHICLE In diesem Modus sind alle "abhängigen" Sendungen müssen dasselbe Fahrzeug verwenden wie mindestens eines ihrer Lieferungen.
IN_SAME_VEHICLE_AT_PICKUP_TIME

Im IN_SAME_VEHICLE_AT_PICKUP_TIME-Modus sind alle „abhängigen“ Sendungen müssen mindestens eine Fahrzeug zum Zeitpunkt der Abholung versendet wird.

Ein „abhängiges“ Die Abholung der Sendung muss daher Folgendes enthalten:

  • Eine reine Lieferung „erforderlich“ Lieferung auf dem Weg danach oder
  • Ein „erforderlich“ auf der Route abgeholt wird und ob die "erforderlichen" Lieferung erfolgt, muss diese Lieferung nach dem "Abhängigen" erfolgen. Abholung der Sendung.
IN_SAME_VEHICLE_AT_DELIVERY_TIME Wie zuvor, mit Ausnahme von „Abhängigkeit“ Sendungen einen erforderlichen zum Zeitpunkt der Lieferung im Fahrzeug versendet wurde.

SkippedShipment

Gibt Details zu nicht ausgeführten Sendungen in einer Lösung an. In einfachen Fällen und/oder wenn wir den Grund 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 des entsprechenden Shipment.label, sofern in Shipment angegeben.

reasons[]

Reason

Eine Liste mit Gründen, 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

Falls wir erklären können, warum die Sendung übersprungen wurde, werden hier die Gründe aufgeführt. Wenn der Grund nicht für alle Fahrzeuge gleich ist, enthält reason mehr als ein Element. Eine übersprungene Sendung darf keine doppelten Gründe haben, d.h. alle Felder mit Ausnahme von example_vehicle_index müssen 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
}

Die übersprungene Sendung ist mit keinem Fahrzeug kompatibel. Die Gründe können für alle Fahrzeuge unterschiedlich sein, aber mindestens ein Fahrzeug hat die Bezeichnung „Äpfel“ Kapazität überschritten würde (einschließlich Fahrzeug 1), mindestens ein Fahrzeug „Birnen“ Kapazität (einschließlich Fahrzeug 3) überschritten und die Distanzbeschränkung für mindestens ein Fahrzeug überschritten wird (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 Versand und Fahrzeug zusammenhängt, wird in diesem Feld der Index eines relevanten Fahrzeugs angegeben.

Code

Code, der den Grundtyp identifiziert. Die Reihenfolge hier ist bedeutungslos. Insbesondere gibt sie keinen Hinweis darauf, ob ein bestimmter Grund in der Lösung vor einem anderen steht, wenn beide zutreffen.

Enums
CODE_UNSPECIFIED Dies sollte niemals verwendet werden.
NO_VEHICLE Das Modell enthält kein Fahrzeug, das Sendungen verhindert.
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

Der Mindestabstand, der für diese Sendung erforderlich ist, d.h. vom start_location des Fahrzeugs zu den Abhol- und/oder Lieferorten der Sendung und zum Endstandort des Fahrzeugs, überschreitet den route_distance_limit-Wert des Fahrzeugs.

Beachten Sie, dass wir für diese Berechnung die geodätischen Entfernungen verwenden.

CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT

Die für den Versand erforderliche Mindestzeit, einschließlich Reise-, 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 x 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 Sendung im Best-Case-Szenario (siehe CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT zur Zeitberechnung) nicht ausführen, wenn es zum frühesten Startzeitpunkt startet: Die Gesamtzeit würde das Fahrzeug nach der letzten Endzeit enden.
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 Grenzen des festen Zeitfensters (start_time und end_time) erzwingen die früheste und letzte Zeit des Ereignisses, z. B. start_time <= event_time <= end_time. Die Untergrenze des weichen Zeitfensters (soft_start_time) drückt aus, dass das Ereignis am oder nach dem soft_start_time eintreten soll, indem Kosten proportional zur Zeit vor dem Ereignis „soft_start_time“ anfallen. Die Obergrenze des weichen Zeitfensters soft_end_time gibt an, dass das Ereignis am oder vor dem soft_end_time eintreten soll, indem Kosten proportional zur Zeit nach soft_end_time des Ereignisses anfallen. 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

Die Startzeit des schweren Zeitfensters. Wenn kein Wert angegeben ist, wird er auf ShipmentModel.global_start_time festgelegt.

end_time

Timestamp

Das Ende des Zeitfensters. Wenn kein Wert angegeben ist, wird er auf ShipmentModel.global_end_time festgelegt.

soft_start_time

Timestamp

Die Startzeit des Zeitfensters.

soft_end_time

Timestamp

Die weiche Endzeit 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. Der Wert wird wie folgt berechnet:

   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 zu den anderen Kosten im Modell hinzugefügt werden, wenn das Ereignis nach dem soft_end_time auftritt. 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 und 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 denselben Übergang können mehrere TransitionAttributes gelten: In diesem Fall summieren sich alle zusätzlichen Kosten und es gilt die strengste Einschränkung oder Grenze gemäß der natürlichen „AND“-Semantik.

Felder
src_tag

string

Tags, mit denen die Gruppe der (src->dst)-Übergänge definiert wird, für die diese Attribute gelten.

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 entweder src_tag oder excluded_src_tag muss ausgefüllt werden.

dst_tag

string

Ein Zielbesuch oder ein Fahrzeugende stimmt ü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 entweder dst_tag oder excluded_dst_tag muss ausgefüllt werden.

cost

double

Gibt die Kosten für diese Umstellung an. Diese Einheit entspricht allen anderen Kosten im Modell und darf nicht negativ sein. Er wird zusätzlich zu allen anderen bestehenden Kosten angewendet.

cost_per_kilometer

double

Gibt die Kosten pro Kilometer an, die auf die beim Wechsel zurückgelegte Strecke angewendet werden. Die Summe ergibt alle Vehicle.cost_per_kilometer für Fahrzeuge.

distance_limit

DistanceLimit

Gibt eine Grenze für die zurückgelegte Strecke an, die während dieses Übergangs zurückgelegt wird.

Seit dem 06.06.2021 werden nur weiche Limits unterstützt.

delay

Duration

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

Diese Verzögerung tritt immer nach dem Abschluss des Quellbesuchs und vor dem Start des Zielbesuchs auf.

Fahrzeug

Modelliert ein Fahrzeug bei einem Versandproblem. Wenn du ein Versandproblem löst, wird für dieses Fahrzeug eine Route erstellt, die bei start_location beginnt und um end_location endet. Eine Route besteht aus einer Abfolge von Besuchen (siehe ShipmentRoute).

Felder
display_name

string

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

travel_mode

TravelMode

Die Mobilitätsform, die sich auf die vom Fahrzeug nutzbaren Straßen und seine 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 nicht angegeben, beginnt das Fahrzeug bei der ersten Abholung. Wenn das Versandmodell Matrizen für Dauer und Entfernung enthält, darf start_location nicht angegeben werden.

start_waypoint

Waypoint

Wegpunkt, der einen geografischen Standort darstellt, an dem das Fahrzeug startet, bevor eine Sendung abgeholt wird. Wenn weder start_waypoint noch start_location angegeben ist, startet das Fahrzeug bei der ersten Abholung. Wenn das Versandmodell Matrizen für Dauer und Entfernung enthält, darf start_waypoint nicht angegeben werden.

end_location

LatLng

Der geografische Standort, an dem das Fahrzeug endet, nachdem es seine letzte VisitRequest beendet hat. Wenn nicht angegeben, endet die ShipmentRoute des Fahrzeugs sofort nach der letzten VisitRequest. Wenn das Versandmodell Matrizen für Dauer und Entfernung enthält, darf end_location nicht angegeben werden.

end_waypoint

Waypoint

Wegpunkt, der einen geografischen Standort darstellt, an dem das Fahrzeug endet, nachdem es seine letzte VisitRequest beendet hat. Wenn weder end_waypoint noch end_location angegeben ist, endet die ShipmentRoute des Fahrzeugs sofort nach der letzten VisitRequest. 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 vom Startort losfahren kann. Sie müssen innerhalb der globalen Zeitbeschränkungen liegen (siehe Felder „ShipmentModel.global_*“). Wenn nicht angegeben, gibt es neben diesen globalen Zeitlimits keine Einschränkungen.

Zeitfenster, die zum selben wiederholten Feld gehören, müssen disjunkt sein, d. h., kein Zeitfenster darf sich mit einem anderen überschneiden oder aneinander liegen. Außerdem müssen sie in chronologischer Reihenfolge angegeben 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 Endstandort ankommt. Sie müssen innerhalb der globalen Zeitbeschränkungen liegen (siehe Felder „ShipmentModel.global_*“). Wenn nicht angegeben, gibt es neben diesen globalen Zeitlimits keine Einschränkungen.

Zeitfenster, die zum selben wiederholten Feld gehören, müssen disjunkt sein, d. h., kein Zeitfenster darf sich mit einem anderen überschneiden oder aneinander liegen. Außerdem müssen sie in chronologischer Reihenfolge angegeben 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

Die Richtlinie zum Entladen wird für das Fahrzeug erzwungen.

load_limits

map<string, LoadLimit>

Kapazität des Fahrzeugs (z. B. Gewicht, Volumen, Anzahl der Paletten). Die Schlüssel in der Zuordnung sind die IDs des Ladetyps, die mit den Schlüsseln im Feld 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 werden addiert und müssen in derselben Einheit wie Shipment.penalty_cost angegeben werden.

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 statt nur cost_per_traveled_hour kann zu einer zusätzlichen Latenz führen.

cost_per_traveled_hour

double

Kosten pro Stunde der Fahrzeugroute. Diese Kosten werden nur auf die Reisezeit der Route angewendet (d. h. die in ShipmentRoute.transitions angegebene Zeit). Wartezeit und Besuchszeit werden nicht berücksichtigt.

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 bedient. Gibt an, ob das Fahrzeug in diesem Fall als gebraucht gilt oder nicht.

Falls wahr, bewegt sich das Fahrzeug vom Start bis zum Ziel, auch wenn es keine Sendungen bedient, sowie die aus dem Start entstehenden Zeit- und Entfernungskosten --> Endreise berücksichtigt werden.

Andernfalls wird das Fahrzeug nicht vom Start- zum Zielort bewegt und für dieses Fahrzeug sind keine break_rule oder Verspätungen (ab TransitionAttributes) geplant. In diesem Fall enthält die ShipmentRoute des Fahrzeugs keine Informationen außer Fahrzeugindex und -etikett.

route_duration_limit

DurationLimit

Das Limit wird auf die Gesamtdauer der Route des Fahrzeugs angewendet. In einer bestimmten OptimizeToursResponse ist die Routendauer eines Fahrzeugs die Differenz zwischen vehicle_end_time und vehicle_start_time.

travel_duration_limit

DurationLimit

Die Beschränkung gilt für die Reisedauer der Route des Fahrzeugs. In einer bestimmten OptimizeToursResponse ist die Fahrzeit der Route die Summe aller transitions.travel_duration.

route_distance_limit

DistanceLimit

Die Begrenzung wird auf die Gesamtstrecke der Fahrzeugroute angewendet. In einer bestimmten OptimizeToursResponse ist die Routenentfernung die Summe aller zugehörigen transitions.travel_distance_meters.

extra_visit_duration_for_visit_type

map<string, Duration>

Gibt eine Zuordnung von Visit_types-Strings zur Dauer an. Die Dauer ist zusätzlich zu VisitRequest.duration Zeit für Besuche mit dem angegebenen visit_types. Durch diese zusätzliche Besuchsdauer entstehen zusätzliche Kosten, wenn cost_per_hour angegeben ist. Schlüssel (z.B. visit_types) dürfen keine leeren Strings sein.

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

break_rule

BreakRule

Beschreibt den Pausenzeitplan, der für dieses Fahrzeug erzwungen werden 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 des entsprechenden ShipmentRoute gemeldet.

ignore

bool

Falls wahr, muss used_if_route_is_empty „falsch“ sein und das Fahrzeug bleibt ungenutzt.

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 eine Sendung von einem ignorierten Fahrzeug in injected_solution_constraint durchgeführt wird und damit verbundene Abhol-/Lieferungen nur im Fahrzeug verbleiben (d.h. nicht auf Level RELAX_ALL_AFTER_THRESHOLD gelockert werden), 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 multiplikativen Faktor an, mit dem die Fahrtzeit dieses Fahrzeugs erhöht oder verringert werden kann. Wenn Sie diesen Wert beispielsweise auf 2,0 festlegen, ist dieses Fahrzeug langsamer und hat doppelt so hohe Fahrzeiten wie bei Standardfahrzeugen. Dieser Multiplikator wirkt sich nicht auf die Besuchsdauer aus. Es wirkt sich auf die Kosten aus, wenn cost_per_hour oder cost_per_traveled_hour angegeben ist. Er muss im Bereich [0,001, 1.000,0] liegen. Wird kein Wert festgelegt, ist das Fahrzeug ein Standardfahrzeug und dieses Vielfache wird als 1, 0 betrachtet.

WARNUNG: Die Fahrtzeiten werden auf die nächste Sekunde gerundet, nachdem dieses Vielfache angewendet wurde, aber vor der Durchführung numerischer Operationen. Daher kann ein kleines Vielfaches zu einem Genauigkeitsverlust führen.

Siehe auch extra_visit_duration_for_visit_type unten.

DurationLimit

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

Wenn ein Feld für weiches Limit definiert ist, müssen sowohl der Schwellenwert für das weiche Limit als auch die zugehörigen Kosten gemeinsam definiert werden.

Felder
max_duration

Duration

Ein festes Limit, das die Dauer auf maximal „max_duration“ beschränkt.

soft_max_duration

Duration

Bei einem weichen Limit, das keine maximale Dauer erzwingt, fallen bei einem Verstoß für die Route Kosten an. Diese Kosten werden mit anderen im Modell definierten Kosten mit derselben Einheit addiert.

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

quadratic_soft_max_duration

Duration

Bei einem weichen Limit, das keine maximale Dauer erzwingt, fallen bei einem Verstoß für die Route Kosten mit quadratischer Dauer an. Diese Kosten summieren sich zu den anderen im Modell definierten Kosten mit derselben Einheit.

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, wenn der Grenzwert soft_max_duration verletzt wird. Die zusätzlichen Kosten sind 0, wenn die Dauer unter dem Grenzwert liegt. Andernfalls hängen die Kosten wie folgt 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

Die Kosten pro Quadratstunde, die beim Verstoß gegen den Grenzwert von quadratic_soft_max_duration anfallen.

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 Lastlimit für ein Fahrzeug, z.B. „Der Lkw darf nur bis zu 3.500 kg tragen“. load_limits ansehen.

Felder
soft_max_load

int64

Ein weiches Limit der Last. cost_per_unit_above_soft_max ansehen.

cost_per_unit_above_soft_max

double

Wenn die Last auf der Route dieses Fahrzeugs jemals soft_max_load überschreitet, gilt die folgende Kostenstrafe (nur einmal pro Fahrzeug): (Belastung – soft_max_load) × cost_per_unit_above_soft_max. Alle Kosten werden addiert und müssen in derselben Einheit wie Shipment.penalty_cost liegen.

start_load_interval

Interval

Das akzeptable Ladeintervall des Fahrzeugs zu Beginn der Route.

end_load_interval

Interval

Das akzeptable Ladeintervall des Fahrzeugs am Ende der Route.

max_load

int64

Die maximal zulässige Auslastung.

Intervall

Intervall akzeptabler Lademengen.

Felder
min

int64

Eine akzeptable Mindestlast. Muss ≥ 0 sein. Wenn beide angegeben sind, muss minmax sein.

max

int64

Eine maximal zulässige Auslastung. Muss ≥ 0 sein. Wenn nicht angegeben, wird die maximale Last durch diese Nachricht nicht eingeschränkt. Wenn beide angegeben sind, muss minmax sein.

TravelMode

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

Diese sollten eine Teilmenge der Mobilitätsformen der Google Maps Platform Routes Preferred API sein, siehe https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode.

Enums
TRAVEL_MODE_UNSPECIFIED Mobilitätsform ohne Angabe, entspricht DRIVING.
DRIVING Mobilitätsform, die der Route entspricht (Auto, ...).
WALKING Mobilitätsform, die der Fußgängerroute entspricht.

UnloadingPolicy

Richtlinie zum Entladen eines Fahrzeugs. Gilt nur für Sendungen mit Abholung und Lieferung.

Andere Lieferungen sind unabhängig von unloading_policy überall auf der Route kostenlos.

Enums
UNLOADING_POLICY_UNSPECIFIED Nicht spezifizierte Entladerichtlinie; Lieferungen müssen unmittelbar nach der entsprechenden Abholung erfolgen.
LAST_IN_FIRST_OUT Lieferungen müssen in umgekehrter Reihenfolge der Abholung erfolgen.
FIRST_IN_FIRST_OUT Die Lieferungen müssen in derselben Reihenfolge wie die Abholungen erfolgen.

Zwischenstopp

Schließt einen Wegpunkt ein. Wegpunkte kennzeichnen die Ankunfts- und Abfahrtsorte von VisitRequests sowie Start- und Endpositionen von Fahrzeugen.

Felder
side_of_road

bool

Optional. Gibt an, dass der Standort dieses Wegpunkts das Fahrzeug bevorzugt an einer bestimmten Straßenseite halten soll. Wenn Sie diesen Wert festlegen, verläuft die Route durch den Standort, sodass das Fahrzeug an der Straßenseite anhalten kann, zu der der Standort gewichtet ist. Diese Option funktioniert bei "WALKING" nicht Mobilitätsform.

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 mithilfe geografischer Koordinaten angegeben wird, einschließlich einer optionalen Richtung.

place_id

string

Die mit dem Wegpunkt verknüpfte POI-Orts-ID.