Stellen Sie Ihre erste Routenoptimierungsanfrage.

Entwickler im Europäischen Wirtschaftsraum (EWR)

In diesem Dokument erfahren Sie, wie Sie Ihre erste Anfrage an die Route Optimization API mit einem Anwendungsfall aus der Praxis senden.

Zur Vereinfachung wird im Beispiel HTTP und JSON verwendet, um die REST API zu veranschaulichen. Für Ihre Produktionsumgebung empfehlen wir jedoch gRPC , da es eine bessere Leistung bietet. Für gRPC ist jedoch eine Installation erforderlich. Weitere Informationen finden Sie unter Route Optimization API-Clientbibliotheken.

Szenario

Eine Karte von San Francisco mit Markierungen für den Coit Tower, den Mission Dolores Park und den South Sunset Playground Park

Sie betreiben in San Francisco von 7:00 Uhr bis 19:00 Uhr eine Hundetagesstätte. Heute Morgen müssen Sie zwei Hunde von verschiedenen Orten in der Stadt abholen. Beide Hundehalter haben Ihnen ein Zeitfenster für die Abholung zwischen 7:30 Uhr und 9:30 Uhr angegeben.

Sie haben einen Lieferwagen für den Job und zahlen dem Fahrer 27 $ pro Stunde. Der Fahrer und der Lieferwagen beginnen den Tag um 7:00 Uhr in Ihrer Hundetagesstätte und müssen bis 12:00 Uhr von den Abholungen am Morgen zurück sein, um eine Mittagspause zu machen.

Heute ist der 13. Februar 2024 und der Fahrer hat folgende Aufgaben:

  • Den Berner Sennenhund in der Nähe des Coit Tower abholen.
  • Den Chihuahua im South Sunset Playground Park abholen.
  • Beide Hunde in der Hundetagesstätte im Mission Dolores Park abgeben.

Sie benötigen eine Route, die die Zeit minimiert, die die Hunde im Lieferwagen verbringen, und gleichzeitig die Anforderungen für die Abholung und Abgabe erfüllt.

Hinweis

Wenn Sie den Code in diesem Beispielszenario ausführen möchten, müssen Sie zuerst die Anleitung unter Route Optimization API einrichten ausführen.

1. Ansatz für die Routenoptimierung auswählen

Die Route Optimization API bietet je nach Komplexität Ihres Optimierungsproblems mehrere Methoden zur Auswahl.

Da es sich bei diesem Szenario für die Hundetagesstätte um eine kleine und einfache Anfrage handelt, verwenden Sie eine blockierende Methode wie optimizeTours, die schnell Ergebnisse liefert für kleine Anfragen. Weitere Informationen zu den Methoden der Route Optimization API finden Sie unter Synchrone und asynchrone Endpunkte.

Verwenden Sie die folgende URL, um eine HTTP-POST-Anfrage an die optimizeTours Methode zu senden:

https://routeoptimization.googleapis.com/v1/projects/PROJECT_OR_ID:optimizeTours

Sie müssen auch die Einstellungen für das Zeitlimit und die Frist kurz halten, um unnötige Wartezeiten zu vermeiden. Für dieses Szenario für die Hundetagesstätte benötigt der Optimierer nicht viel Zeit, um auf Ihre Anfrage zu antworten. Verwenden Sie daher die folgenden Einstellungen:

  • Setzen Sie den timeout Parameter auf 2 Sekunden.
  • Behalten Sie die Standardeinstellungen für die Frist bei, die für REST-Anfragen 60 Sekunden beträgt.

2. Anfragetext erstellen

Nachdem Sie die blockierende optimizeTours Methode ausgewählt und die Einstellungen für das Zeitlimit und die Frist definiert haben, müssen Sie den Text der Anfrage erstellen.

In diesem Szenario ist die Anfrage eine OptimizeToursRequest-Nachricht, die in der REST API als JSON codiert ist.

So erstellen Sie die Anfragenachricht:

  1. Beginnen Sie mit der grundlegenden Anfragestruktur, die wie folgt aussieht:

    {
      "timeout": ...,
      "model": {
        "shipments": [...],
        "vehicles": [...],
        "globalStartTime": "...",
        "globalEndTime": "..."
      }
    }
    

    Weitere Informationen zur Struktur finden Sie im Leitfaden zu den wichtigsten Konzepten unter Grundstruktur (ShipmentModel, Shipment und Vehicle).

  2. Sendungen definieren. Fügen Sie im Feld shipments für jeden Hund, der am Morgen abgeholt und abgeliefert werden muss, eine Shipment Nachricht hinzu. Hier definieren Sie den bevorzugten Abholort und die bevorzugte Abholzeit jedes Hundehalters sowie den Ort und die Zeit der Hundetagesstätte, an der die Hunde abgeliefert werden sollen.

    1. Erstellen Sie für jeden Hund eine VisitRequest für die Abholung und eine weitere für die Lieferung, die in diesem Szenario als Abgabe in der Hundetagesstätte bezeichnet wird.

      • Legen Sie bei der Abholung arrivalWaypoint auf den Abholort des Hundes fest (Coit Tower für den Berner Sennenhund oder South Sunset Playground Park für den Chihuahua) und die timeWindows auf die vom Hundehalter gewünschte Abholzeit (7:30 Uhr bis 9:30 Uhr).

      • Legen Sie bei der Lieferung arrivalWaypoint auf die Hundetagesstätte und timeWindows auf die erforderliche Abgabe zeit (9:30 Uhr bis 11:30 Uhr) fest.

      Weitere Informationen zu Zeitfenstern finden Sie unter Zeitfenster.

    2. Sie können im Feld label eine Kennung für jede Sendung hinzufügen, z. B. „Berner Sennenhund“ und „Chihuahua“. So können Sie die Sendungen in der Antwort leichter identifizieren.

    Weitere Informationen zum Definieren von Sendungen finden Sie unter Versand.

  3. Fahrzeuge definieren. Fügen Sie im Feld vehicles eine Vehicle Nachricht für Ihren Lieferwagen hinzu, wobei die Hundetagesstätte als Start- und Endpunkt, die Kosten für den Lohn des Fahrers und die Öffnungszeiten für den Lieferwagen angegeben werden.

    1. Legen Sie für startWaypoint und endWaypoint des Lieferwagens den Start- und Endort des Tages fest, also die Hundetagesstätte in der Nähe des Mission Dolores Park.

    2. Um Ihre Betriebskosten zu minimieren, müssen Sie die Kostenbeschränkungen Ihres Unternehmens definieren. Setzen Sie den Kostenparameter costPerHour auf 27. Das ist der Betrag, den Sie dem Fahrer für das Fahren des Lieferwagens der Hundetagesstätte zahlen. Weitere Informationen zu Kostenparametern finden Sie unter Kostenmodell.

    3. Damit der Optimierer eine Route innerhalb der Betriebszeiten des Lieferwagens erstellt, definieren Sie startTimeWindows für den zulässigen Zeitraum, in dem der Fahrer mit dem Lieferwagen fahren kann, und endTimeWindows für den zulässigen Zeitraum, in dem der Fahrer zur Hundetagesstätte zurückkehren muss. Weitere Informationen zu Zeitfenstern finden Sie unter Zeitfenster.

    Weitere Informationen zum Definieren von Fahrzeugen finden Sie unter Fahrzeug.

  4. Globales Zeitfenster festlegen. Das globale Zeitfenster stellt den Zeitraum dar, in dem der Lieferwagen den ganzen Tag über Abholungen und Abgaben für Ihre Hundetagesstätte durchführen kann. Legen Sie für dieses Szenario globalStartTime auf 7:00 Uhr und globalEndTime auf 19:00 Uhr für den 13. Februar 2024 fest. Diese Zeiten entsprechen den Öffnungszeiten Ihrer Hundetagesstätte.

3. Anfrage senden

Im Folgenden sehen Sie eine einfache curl-Anfrage, die auf dem Szenario für die Hundetagesstätte basiert und die blockierende Methode optimizeTours verwendet.

Ersetzen Sie vor dem Senden der Anfrage im Beispielcode PROJECT_NUMBER_OR_ID durch Ihre Google Cloud-Projekt-ID.

curl -X POST 'https://routeoptimization.googleapis.com/v1/projects/PROJECT_NUMBER_OR_ID:optimizeTours' \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
--data @- << EOM
{
  "timeout": "2s",
  "model": {
    "shipments": [
      {
        "pickups": [
          {
            "arrivalWaypoint": {
              "location": {
                "latLng": {
                  "latitude": 37.802395,
                  "longitude": -122.405822
                }
              }
            },
            "timeWindows": [
              {
                "startTime": "2024-02-13T07:30:00Z",
                "endTime": "2024-02-13T09:30:00Z"
              }
            ]
          }
        ],
        "deliveries": [
          {
            "arrivalWaypoint": {
              "location": {
                "latLng": {
                  "latitude": 37.760202,
                  "longitude": -122.426796
                }
              }
            },
            "timeWindows": [
              {
                "startTime": "2024-02-13T09:30:00Z",
                "endTime": "2024-02-13T11:30:00Z"
              }
            ]
          }
        ],
        "label": "Bernese mountain dog"
      },
      {
        "pickups": [
          {
            "arrivalWaypoint": {
              "location": {
                "latLng": {
                  "latitude": 37.738067,
                  "longitude": -122.498593
                }
              }
            },
            "timeWindows": [
              {
                "startTime": "2024-02-13T07:30:00Z",
                "endTime": "2024-02-13T09:30:00Z"
              }
            ]
          }
        ],
        "deliveries": [
          {
            "arrivalWaypoint": {
              "location": {
                "latLng": {
                  "latitude": 37.760202,
                  "longitude": -122.426796
                }
              }
            },
            "timeWindows": [
              {
                "startTime": "2024-02-13T09:30:00Z",
                "endTime": "2024-02-13T11:30:00Z"
              }
            ]
          }
        ],
        "label": "Chihuahua"
      }
    ],
    "vehicles": [
      {
        "startWaypoint": {
          "location": {
            "latLng": {
              "latitude": 37.760202,
              "longitude": -122.426796
            }
          }
        },
        "endWaypoint": {
          "location": {
            "latLng": {
              "latitude": 37.760202,
              "longitude": -122.426796
            }
          }
        },
        "costPerHour": 27,
        "startTimeWindows": [
          {
            "startTime": "2024-02-13T07:00:00Z",
            "endTime": "2024-02-13T07:15:00Z"
          }
        ],
        "endTimeWindows": [
          {
            "startTime": "2024-02-13T11:45:00Z",
            "endTime": "2024-02-13T12:00:00Z"
          }
        ]
      }
    ],
    "globalStartTime": "2024-02-13T07:00:00Z",
    "globalEndTime": "2024-02-13T19:00:00Z"
  }
}
EOM

In der Anfrage verwendete Anfrageparameter

In der folgenden Tabelle werden die Anfrageparameter beschrieben, die im Anfragetext des Beispielszenarios verwendet werden. Sie können die Inhalte nach übergeordnetem Element oder nach Textsuche filtern.

Elternteil Parameter Property-Typ Beschreibung
OptimizeToursRequest model Objekt (ShipmentModel) Dies ist der Kern Ihrer Anfrage. Es ist ein einzelnes Objekt, in dem Sie Ihr gesamtes Problem definieren, einschließlich aller Hunde, die Sie abholen und abliefern müssen (shipments) und des Lieferwagens in Ihrer Flotte (vehicles). Stellen Sie es sich als vollständige Blaupause für das Problem vor, das Sie optimieren müssen.
timeout Dauer Dieser Parameter gibt die maximale Zeit an, die der Server für die Bearbeitung einer Anfrage benötigt, bevor er eine Antwort zurückgibt. Mit diesem Parameter können Sie die Wartezeit verkürzen. Bei kleinen und schnellen Anfragen wie in diesem Szenario für die Hundetagesstätte setzen Sie diesen Wert auf 2 Sekunden.
ShipmentModel shipments[] Array von Objekten (Shipment) Dies ist ein Array von Objekten, wobei jedes Objekt einen Hund darstellt, der abgeholt oder abgeliefert werden muss.
vehicles[] Array von Objekten (Vehicle) Dies ist ein Array von Objekten, wobei jedes Objekt ein Fahrzeug in Ihrer Flotte definiert. Hier beschreiben Sie Ihre Ressourcen, z. B. den Lieferwagen, der die Abholungen und Abgaben durchführt. Sie müssen mindestens ein Fahrzeug definieren, um eine optimierte Route zu erhalten.
globalStartTime Zeitstempel Dies ist die frühestmögliche Zeit für ein Ereignis in Ihrem gesamten Modell. Dieser Parameter schränkt das Optimierungsproblem zeitlich ein, was für genaue Verkehrs- und Routen Berechnungen entscheidend ist. Legen Sie für dieses Szenario für die Hundetagesstätte die früheste Zeit fest, zu der der Fahrer den Lieferwagen an diesem Tag fahren kann, also 7:00 Uhr am 13. Februar 2024.
globalEndTime Zeitstempel Dies ist die spätestmögliche Zeit für ein Ereignis in Ihrem gesamten Modell. Legen Sie für dieses Szenario für die Hundetagesstätte die Zeit fest, zu der der Lieferwagen voraussichtlich seinen Betrieb einstellt, also 19:00 Uhr am 13. Februar 2024.
Shipment pickups[] Array von Objekten (VisitRequest) Dies ist eine Liste aller möglichen Abholoptionen für die Sendung. Der Optimierer wählt die beste Option aus, um Ihr Problem zu lösen. Listen Sie für dieses Szenario für die Hundetagesstätte die Abholorte und Zeitfenster auf, die jeder Hundehalter für jeden Hund angegeben hat.
deliveries[] Array von Objekten (VisitRequest) Dies ist eine Liste aller möglichen Abgabeoptionen für die Sendung. Der Optimierer wählt die beste Option aus, um Ihr Problem zu lösen. Listen Sie für dieses Szenario für die Hundetagesstätte den Ort der Hundetagesstätte und das Zeitfenster auf, in dem der Fahrer für die Mittagspause zurückkehren muss.
label String Dies ist eine Kennung für eine bestimmte Sendung in Ihrer Anfrage. Sie können in Ihrer Anfrage Labels angeben, um die Antwort leichter lesen zu können. Verwenden Sie für dieses Szenario für die Hundetagesstätte einen beschreibenden String wie „Chihuahua“, „Berner Sennenhund“ oder den Namen des Hundes, um die Lösung mit Ihrer Eingabe abzugleichen, wenn Sie die API-Antwort erhalten.
VisitRequest arrivalWaypoint[] Objekt (Waypoint) Dies ist der Ort eines bestimmten Besuchs auf der Route. Sie können diesen Ort mit Breiten- und Längengradkoordinaten, einer Orts-ID oder einer Überschrift definieren. Legen Sie in diesem Szenario für die Hundetagesstätte den vom Hundehalter angegebenen Ort für pickups und die Adresse der Hundetagesstätte für deliveries fest.
timeWindows[] Array von Objekten (TimeWindow) Dies ist ein Array von Objekten, die die Zeitbeschränkungen für eine Abholung oder Lieferung definieren. Verwenden Sie diesen Parameter in diesem Szenario, um das Abholfenster für jeden der Hunde und das zulässige Fenster für die Abgabe der Hunde in der Hundetagesstätte zu definieren.
Vehicle startWaypoint[] Objekt (Waypoint) Dies ist der Startort der Route des Fahrzeugs, definiert mit Breiten- und Längengradkoordinaten oder einer Orts-ID. Dieser Parameter gibt dem Optimierer an, wo das Fahrzeug die Route beginnen muss. Wenn Sie diesen Wegpunkt nicht definieren, wählt der Optimierer eine der Abholungen oder Lieferungen als den Startort aus. Da der Fahrer in diesem Szenario für die Hundetagesstätte den Tag in der Hundetagesstätte beginnt, verwenden Sie die Koordinaten für den Mission Dolores Park.
endWaypoint[] Objekt (Waypoint) Dies ist das endgültige Ziel der Route des Fahrzeugs, definiert mit Breiten- und Längengradkoordinaten oder einer Orts-ID. Dieser Parameter gibt dem Optimierer an, wo das Fahrzeug die Route beenden muss. Wenn Sie diesen Wegpunkt nicht definieren, wählt der Optimierer eine der Abholungen oder Lieferungen als das Ende der Route aus. Da der Fahrer in diesem Szenario für die Hundetagesstätte den Tag in der Hundetagesstätte beenden muss, verwenden Sie die Koordinaten für den Mission Dolores Park.
costPerHour Zahl Dies sind die Kosten, die pro Stunde für die Nutzung eines Fahrzeugs anfallen, unabhängig davon, ob es fährt oder steht. Verwenden Sie diesen Parameter in diesem Szenario für die Hundetagesstätte, um den Stundenlohn eines Fahrers zu modellieren.
startTimeWindows[] Array von Objekten (TimeWindow) Dies ist das zulässige Fenster, in dem der Fahrer mit dem Lieferwagen für die Abholungen der Hunde am Morgen fahren kann.
endTimeWindows[] Array von Objekten (TimeWindow) Dies ist das zulässige Fenster, in dem der Fahrer mit dem Lieferwagen fahren und in der Hundetagesstätte parken kann.

Weiter

Antwort interpretieren