Method: projects.locations.optimizeToursLongRunning

Dies ist eine Variante der locations.optimizeTours-Methode, die für Optimierungen mit großen Zeitlimitwerten entwickelt wurde. Sie sollte für Optimierungen, die länger als ein paar Minuten dauern, der Methode locations.optimizeTours vorgezogen werden.

Der zurückgegebene long-running operation (LRO) hat einen Namen im Format <parent>/operations/<operation_id> und kann verwendet werden, um den Fortschritt der Berechnung zu verfolgen. Der Feldtyp metadata ist OptimizeToursLongRunningMetadata. Der Feldtyp response ist OptimizeToursResponse, wenn der Vorgang erfolgreich war.

HTTP-Anfrage

POST https://routeoptimization.googleapis.com/v1/{parent=projects/*/locations/*}:optimizeToursLongRunning

Die URL verwendet die Syntax der gRPC-Transcodierung.

Pfadparameter

Parameter
parent

string

Erforderlich. Zielprojekt oder Standort zum Anrufen festlegen.

Format:

  • projects/{project-id}
  • projects/{project-id}/locations/-

Regionale {location-id}-Werte werden nicht unterstützt.

Anfragetext

Der Anfragetext enthält Daten mit folgender Struktur:

JSON-Darstellung
{
  "timeout": string,
  "model": {
    object (ShipmentModel)
  },
  "solvingMode": enum (SolvingMode),
  "searchMode": enum (SearchMode),
  "injectedFirstSolutionRoutes": [
    {
      object (ShipmentRoute)
    }
  ],
  "injectedSolutionConstraint": {
    object (InjectedSolutionConstraint)
  },
  "refreshDetailsRoutes": [
    {
      object (ShipmentRoute)
    }
  ],
  "interpretInjectedSolutionsUsingLabels": boolean,
  "considerRoadTraffic": boolean,
  "populatePolylines": boolean,
  "populateTransitionPolylines": boolean,
  "allowLargeDeadlineDespiteInterruptionRisk": boolean,
  "useGeodesicDistances": boolean,
  "label": string,
  "geodesicMetersPerSecond": number,
  "maxValidationErrors": integer
}
Felder
timeout

string (Duration format)

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

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

model

object (ShipmentModel)

Zu lösendes Sendungsmodell.

solvingMode

enum (SolvingMode)

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

searchMode

enum (SearchMode)

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

injectedFirstSolutionRoutes[]

object (ShipmentRoute)

Den Optimierungsalgorithmus anleiten, eine erste Lösung zu finden, die einer vorherigen Lösung ähnelt.

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

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

  • Für alle Routen muss vehicleIndex im Bereich liegen und darf nicht dupliziert werden.
  • Für alle Besuche müssen shipmentIndex und visitRequestIndex im Bereich liegen.
  • Eine Sendung darf nur auf einer Route referenziert werden.
  • Die Abholung einer Abhol- und Lieferlieferung muss vor der Lieferung erfolgen.
  • darf maximal eine Abhol- oder Lieferalternative für eine Sendung durchgeführt werden.
  • für alle Routen die Zeiten zunehmen (d.h. vehicleStartTime <= visits[0].start_time <= visits[1].start_time ... <= vehicleEndTime).
  • Eine Sendung darf nur mit einem zulässigen Fahrzeug ausgeführt werden. Ein Fahrzeug ist zulässig, wenn Shipment.allowed_vehicle_indices leer ist oder der Wert für vehicleIndex in Shipment.allowed_vehicle_indices enthalten ist.

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

injectedSolutionConstraint

object (InjectedSolutionConstraint)

Schränken Sie den Optimierungsalgorithmus ein, um eine endgültige Lösung zu finden, die einer vorherigen Lösung ähnelt. Damit können beispielsweise Teile von Routen eingefroren werden, die bereits abgeschlossen sind oder die abgeschlossen werden sollen, aber nicht geändert werden dürfen.

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

refreshDetailsRoutes[]

object (ShipmentRoute)

Wenn das Feld nicht leer ist, werden die angegebenen Routen aktualisiert, ohne dass die zugrunde liegende Reihenfolge der Besuche oder die Fahrzeiten geändert werden. Es werden nur andere Details aktualisiert. Das Modell wird dadurch nicht gelöst.

Seit November 2020 werden damit nur die Polylinien von nicht leeren Routen ausgefüllt. Außerdem muss populatePolylines auf „true“ gesetzt sein.

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

Dieses Feld darf nicht zusammen mit injectedFirstSolutionRoutes oder injectedSolutionConstraint verwendet werden.

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

interpretInjectedSolutionsUsingLabels

boolean

Wenn „true“:

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

Wenn „true“, dürfen Labels in den folgenden Kategorien höchstens einmal in ihrer Kategorie vorkommen:

Wenn ein vehicleLabel in der eingefügten Lösung nicht einem Fahrzeug in der Anfrage entspricht, wird die entsprechende Route zusammen mit den zugehörigen Besuchen aus der Lösung entfernt. Wenn ein shipmentLabel in der eingefügten Lösung keiner angeforderten Sendung entspricht, wird der entsprechende Besuch aus der Lösung entfernt. Wenn ein SkippedShipment.label in der eingefügten Lösung keiner Sendung in der Anfrage entspricht, wird der SkippedShipment aus der Lösung entfernt.

Wenn Sie Routenbesuche oder ganze Routen aus einer eingefügten Lösung entfernen, kann sich das auf die implizierten Einschränkungen auswirken. Dies kann zu einer Änderung der Lösung, zu Validierungsfehlern oder zu einer Unmöglichkeit der Ausführung führen.

HINWEIS: Der Aufrufer muss dafür sorgen, dass jedes Vehicle.label (bzw. Shipment.label) identifiziert eindeutig eine Fahrzeug- (bzw. Sendungs-)Entität, die in den beiden relevanten Anfragen verwendet wird: der früheren Anfrage, die die in der eingefügten Lösung verwendete OptimizeToursResponse erzeugt hat, und der aktuellen Anfrage, die die eingefügte Lösung enthält. Die oben beschriebenen Eindeutigkeitsprüfungen reichen nicht aus, um diese Anforderung zu erfüllen.

considerRoadTraffic

boolean

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

populatePolylines

boolean

Wenn „true“, werden Polylinien in den ShipmentRoutes der Antwort eingefügt.

populateTransitionPolylines

boolean

Wenn „true“, werden Polylinien und Routentokens in der Antwort ShipmentRoute.transitions ausgefüllt.

allowLargeDeadlineDespiteInterruptionRisk

boolean

Wenn diese Option festgelegt ist, kann die Anfrage eine Frist (siehe https://grpc.io/blog/deadlines) von bis zu 60 Minuten haben. Andernfalls beträgt die maximale Frist nur 30 Minuten. Beachten Sie, dass langlebige Anfragen ein deutlich größeres (aber immer noch geringes) Risiko für Unterbrechungen haben.

useGeodesicDistances

boolean

Wenn „true“, werden Entfernungen anhand von geodätischen Entfernungen anstelle von Google Maps-Entfernungen berechnet. Die Reisezeiten werden anhand von geodätischen Entfernungen mit einer durch geodesicMetersPerSecond definierten Geschwindigkeit berechnet.

label

string

Label, das zur Identifizierung dieser Anfrage verwendet werden kann und in der OptimizeToursResponse.request_label zurückgegeben wird.

geodesicMetersPerSecond

number

Wenn useGeodesicDistances auf „true“ gesetzt ist, muss dieses Feld festgelegt werden. Es definiert die Geschwindigkeit, die zur Berechnung der Reisedauer verwendet wird. Der Wert muss mindestens 1,0 Meter/Sekunde betragen.

maxValidationErrors

integer

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

Antworttext

Wenn der Vorgang erfolgreich abgeschlossen wurde, enthält der Antworttext eine Instanz von Operation.

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.