In diesem Dokument erfahren Sie, wie Sie Ihre erste Anfrage an die Route Optimization API mit einem realen Anwendungsfallszenario stellen.
Zur Vereinfachung wird im Beispiel HTTP und JSON verwendet, um die REST API zu demonstrieren. 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
Sie betreiben in San Francisco eine Hundetagesstätte, die von 7:00 Uhr bis 19:00 Uhr geöffnet ist. Heute Morgen müssen Sie zwei Hunde von verschiedenen Orten in der Stadt abholen. Beide Hundehalter haben dir ein Abholzeitfenster zwischen 7:30 Uhr und 9:30 Uhr angegeben.
Sie haben einen Transporter für den Auftrag und zahlen dem Fahrer 27 $ pro Stunde. Der Fahrer und der Kleinbus starten um 7:00 Uhr an Ihrer Kindertagesstätte und müssen bis 12:00 Uhr von den morgendlichen Abholungen zurück sein, um eine Mittagspause einzulegen.
Heute ist der 13. Februar 2024 und der Fahrer hat die folgenden Aufgaben:
- Hole den Berner Sennenhund in der Nähe des Coit Tower ab.
- Hole den Chihuahua im South Sunset Playground Park ab.
- Bringe beide Hunde zur Hundetagesstätte im Mission Dolores Park.
Sie benötigen eine Route, die die Zeit minimiert, die die Hunde im Transporter verbringen, und gleichzeitig die Anforderungen an die Abholung und den Transport 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 zur Routenoptimierung auswählen
Die Route Optimization API bietet mehrere Methoden, aus denen Sie je nach Komplexität Ihres Optimierungsproblems auswählen können.
Da es sich bei diesem Szenario für eine Hundetagesstätte um eine kleine und unkomplizierte Anfrage handelt, verwenden Sie eine blockierende Methode wie optimizeTours, die schnell Ergebnisse für kleine Anfragen liefert. 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 Methode optimizeTours zu senden:
https://routeoptimization.googleapis.com/v1/projects/PROJECT_OR_ID:optimizeTours
Außerdem müssen Sie die Einstellungen für Zeitlimit und Frist so kurz wie möglich festlegen, um unnötige Wartezeiten zu vermeiden. In diesem Szenario mit der Hundetagesstätte muss der Optimierer nicht viel Zeit für die Antwort auf Ihre Anfrage aufwenden. Verwenden Sie daher die folgenden Einstellungen:
- Legen Sie für den Parameter
timeoutden Wert „2 Sekunden“ fest. - Behalten Sie die Standardeinstellungen für das Zeitlimit bei, das für REST-Anfragen 60 Sekunden beträgt.
2. Anfragetext erstellen
Nachdem Sie die optimizeTours-Blockierungsmethode ausgewählt und die Einstellungen für Zeitüberschreitung und Frist definiert haben, müssen Sie als Nächstes den Text der Anfragenachricht erstellen.
In diesem Szenario ist die Anfrage eine OptimizeToursRequest-Nachricht, die als JSON in der REST API codiert ist.
So erstellen Sie die Anfragenachricht:
Beginnen Sie mit der grundlegenden Anfragestruktur:
{ "timeout": ..., "model": { "shipments": [...], "vehicles": [...], "globalStartTime": "...", "globalEndTime": "..." } }Weitere Informationen zur Struktur finden Sie im Leitfaden zu den wichtigsten Konzepten für die Basisstruktur (ShipmentModel, Shipment und Vehicle).
Sendungen definieren: Fügen Sie im Feld
shipmentsfür jeden Hund, der morgens abgeholt und abgesetzt werden muss, eineShipment-Nachricht hinzu. Hier definieren Sie die bevorzugten Abholorte und ‑zeiten des Hundehalters sowie die Standorte und Zeiten der Hundetagesstätte für die Abgabe der Hunde.Erstellen Sie für jeden Hund ein
VisitRequestfür die Abholungen und ein weiteres für die Zustellungen, die in diesem Szenario als Abgabe in der Hundetagesstätte bezeichnet werden.Legen Sie bei Abholungen den
arrivalWaypointauf den Abholort des Hundes fest (Coit Tower für den Berner Sennenhund oder South Sunset Playground Park für den Chihuahua) und dentimeWindowsauf die vom Besitzer gewünschte Abholzeit (7:30 bis 9:30 Uhr).Legen Sie bei der Zustellung
arrivalWaypointauf die Kindertagesstätte undtimeWindowsauf die erforderliche Abgabezeit (9:30 bis 11:30 Uhr) fest.
Weitere Informationen zu Zeitfenstern finden Sie unter Zeitfenster.
Im Feld
labelkönnen Sie für jede Sendung eine Kennung 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 Sendung.
Fahrzeuge definieren: Fügen Sie im Feld
vehicleseineVehicle-Nachricht für Ihren einen Transporter mit der Kindertagesstätte als Start- und Endpunkt, den Lohn des Fahrers und die Betriebszeiten des Transporters hinzu.Legen Sie die
startWaypointundendWaypointfür den Transporter auf die Start- und Endorte des Tages fest, also die Kindertagesstätte in der Nähe des Mission Dolores Park.Um Ihre Betriebskosten zu minimieren, müssen Sie die Kostenbeschränkungen Ihres Unternehmens definieren. Legen Sie den Kostenparameter
costPerHourauf 27 fest. Das ist der Betrag, den Sie dem Fahrer für die Fahrt mit dem Transporter der Hundetagesstätte zahlen. Weitere Informationen zu Kostenparametern finden Sie unter Kostenmodell.Damit der Optimierer eine Route innerhalb der Betriebszeiten des Transporters erstellt, definieren Sie
startTimeWindowsals akzeptablen Zeitraum für den Fahrer, um den Transporter zu starten, undendTimeWindowsals akzeptablen Zeitraum für die Rückkehr des Fahrers zur Kindertagesstätte. Weitere Informationen zu Zeitfenstern finden Sie unter Zeitfenster.
Weitere Informationen zum Definieren von Fahrzeugen finden Sie unter Fahrzeug.
Globalen Zeitraum festlegen Das globale Zeitfenster gibt den Zeitraum an, in dem der Transporter den ganzen Tag über Kinder für Ihre Kindertagesstätte abholen und absetzen kann. Legen Sie für dieses Szenario für den 13. Februar 2024
globalStartTimeauf 7:00 Uhr undglobalEndTimeauf 19:00 Uhr fest. Das sind die Öffnungszeiten Ihrer Hundetagesstätte.
3. Anfrage senden
Im Folgenden sehen Sie eine einfache curl-Anfrage basierend auf dem Szenario mit der Hundetagesstätte, bei der die blockierende Methode optimizeTours verwendet wird.
Bevor Sie die Anfrage senden, ersetzen Sie PROJECT_NUMBER_OR_ID im Beispielcode 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 per Textsuche filtern.
| Elternteil | Parameter | Property-Typ | Beschreibung |
|---|---|---|---|
OptimizeToursRequest |
model |
object (ShipmentModel) |
Das ist der Kern Ihrer Anfrage. Es handelt sich um ein einzelnes Objekt, in dem Sie das gesamte Problem definieren, einschließlich aller Hunde, die Sie abholen und absetzen müssen (shipments), und des Transporters in Ihrer Flotte (vehicles). Es ist sozusagen der vollständige Plan für das Problem, 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 Beispiel mit der Hundetagesstätte, legen Sie diesen Wert auf 2 Sekunden fest. | |
ShipmentModel |
shipments[] |
Array von Objekten (Shipment) |
Dies ist ein Array von Objekten, wobei jedes Objekt einen Hund darstellt, der abgeholt oder abgesetzt werden muss. |
vehicles[] |
Array von Objekten (Vehicle) |
Dies ist ein Array von Objekten, wobei jedes Objekt ein Fahrzeug in Ihrem Fuhrpark definiert. Hier beschreiben Sie Ihre Ressourcen, z. B. den Lieferwagen, mit dem die Abholungen und Zustellungen erfolgen. Sie müssen mindestens ein Fahrzeug definieren, um eine optimierte Route zu erhalten. | |
globalStartTime |
Zeitstempel | Das ist der frühestmögliche Zeitpunkt für ein Ereignis in Ihrem gesamten Modell. Dieser Parameter schränkt das Optimierungsproblem zeitlich ein, was für genaue Berechnungen von Traffic und Routen entscheidend ist. In diesem Beispiel für eine Hundetagesstätte legen Sie als frühesten Zeitpunkt fest, zu dem der Fahrer den Transporter an diesem Tag nutzen kann, also 7:00 Uhr am 13. Februar 2024. | |
globalEndTime |
Zeitstempel | Das ist der spätestmögliche Zeitpunkt für ein Ereignis in Ihrem gesamten Modell. In diesem Beispiel für die Hundetagesstätte legen Sie den Wert auf den Zeitpunkt fest, zu dem der Transporter voraussichtlich seine Fahrt beendet, also am 13. Februar 2024 um 19:00 Uhr. | |
Shipment |
pickups[] |
Array von Objekten (VisitRequest) |
Dies ist eine Liste aller möglichen Abholoptionen für die Sendung. Der Optimierer wählt die beste aus, um Ihr Problem zu lösen. Erstelle für dieses Szenario mit der Hundetagesstätte eine Liste der Abholorte und Zeitfenster, die jeder Besitzer 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 aus, um Ihr Problem zu lösen. Geben Sie für dieses Szenario mit der Hundetagesstätte den Standort der Hundetagesstätte und das Zeitfenster an, in dem der Fahrer für jedes Tier zum Mittagessen zurückkehren muss. | |
label |
String | Dies ist eine Kennung für eine bestimmte Sendung in Ihrer Anfrage. Sie können Labels in Ihrer Anfrage angeben, um die Antwort leichter lesbar zu machen. Verwenden Sie für dieses Szenario mit der Hundetagesstätte einen beschreibenden String wie „Chihuahua“, „Berner Sennenhund“ oder den Namen des Hundes, um die Lösung in der API-Antwort an Ihren Input anzupassen. | |
VisitRequest |
arrivalWaypoint[] |
object (Waypoint) |
Dies ist der Ort eines bestimmten Besuchs auf der Route. Sie können den Startpunkt mit Breiten- und Längengradkoordinaten, einer Orts-ID oder einer Richtung definieren. Legen Sie in diesem Szenario für die Hundetagesstätte den Wert für pickups auf den vom Inhaber angegebenen Ort und den Wert für deliveries auf die Adresse der Tagesstätte fest. |
timeWindows[] |
Array von Objekten (TimeWindow) |
Dies ist ein Array von Objekten, die die Zeitbeschränkungen für eine Abholung oder Lieferung definieren. In diesem Szenario definieren Sie damit das Abholzeitfenster für jeden Hund und das zulässige Zeitfenster für das Absetzen der Hunde in der Hundetagesstätte. | |
Vehicle |
startWaypoint[] |
object (Waypoint) |
Dies ist der Startort der Fahrzeugroute, der mit Breiten- und Längengradkoordinaten oder einer Orts-ID definiert wird. Mit diesem Parameter wird dem Optimierungstool mitgeteilt, wo die Route für das Fahrzeug beginnen muss. Wenn Sie diesen Wegpunkt nicht definieren, wählt der Optimierer einen der Abhol- oder Zustellorte als Startort aus. Da der Fahrer in diesem Szenario mit der Hundetagesstätte beginnt, verwenden Sie die Koordinaten für Mission Dolores Park. |
endWaypoint[] |
object (Waypoint) |
Dies ist das endgültige Ziel der Fahrzeugroute, das mit Breiten- und Längengradkoordinaten oder einer Orts-ID definiert wird. Mit diesem Parameter wird dem Optimierungstool mitgeteilt, wo die Route enden muss. Wenn Sie diesen Wegpunkt nicht definieren, wählt der Optimierer einen der Abhol- oder Zustellorte als Ende der Route aus. Da der Fahrer in diesem Szenario für die Hundetagesstätte den Tag in der Einrichtung beenden muss, verwenden Sie die Koordinaten für Mission Dolores Park. | |
costPerHour |
Zahl | Dies sind die Kosten, die für jede Stunde anfallen, in der ein Fahrzeug verwendet wird, unabhängig davon, ob es fährt oder steht. In diesem Beispiel für eine Hundetagesstätte wird damit der Stundenlohn eines Fahrers modelliert. | |
startTimeWindows[] |
Array von Objekten (TimeWindow) |
Das ist das akzeptable Zeitfenster für den Fahrer, um mit den morgendlichen Hundeabholungen zu beginnen. | |
endTimeWindows[] |
Array von Objekten (TimeWindow) |
Das ist der zulässige Zeitraum, in dem der Fahrer den Transporter fahren und wieder am Hunde-Tagesbetreuungszentrum parken kann. |