In diesem Dokument erfahren Sie, wie Sie Ihre erste Anfrage an die Route Optimization API mit einem Anwendungsfall aus der Praxis senden.
Der Einfachheit halber 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
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 die Aufgabe 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 das Optimierungstool nicht viel Zeit, um auf Ihre Anfrage zu antworten. Verwenden Sie daher die folgenden Einstellungen:
- Legen Sie den
timeoutParameter auf 2 Sekunden fest. - Behalten Sie die Standardeinstellungen für die Frist bei, die für REST-Anfragen 60 Sekunden beträgt.
2. Inhalt der Anfragenachricht erstellen
Nachdem Sie die blockierende optimizeTours Methode ausgewählt und die Einstellungen für das Zeitlimit
und die Frist definiert haben, müssen Sie als Nächstes den Text der Anfrage
Nachricht erstellen.
In diesem Szenario ist die Anfrage eine OptimizeToursRequest-Nachricht, die in der REST API als JSON codiert ist.
So erstellen Sie die Anfragenachricht:
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 Schlüsselkonzepten für die Basisstruktur (ShipmentModel, Shipment und Vehicle).
Sendungen definieren. Fügen Sie im Feld
shipmentseineShipmentNachricht für jeden Hund hinzu, der am Morgen abgeholt und abgeliefert werden muss. 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.Erstellen Sie für jeden Hund eine
VisitRequestfü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
arrivalWaypointauf den Abholort des Hundes fest (Coit Tower für den Berner Sennenhund oder South Sunset Playground Park für den Chihuahua) und dietimeWindowsauf die vom Hundehalter gewünschte Abholzeit (7:30 Uhr bis 9:30 Uhr).Legen Sie bei der Lieferung
arrivalWaypointauf die Hundetagesstätte undtimeWindowsauf die erforderliche Abgabe zeit (9:30 Uhr bis 11:30 Uhr) fest.
Weitere Informationen zu Zeitfenstern finden Sie unter Zeitfenster.
Sie können mit dem Feld
labeleine Kennung für jede Sendung hinzufügen, z. B. „Berner Sennenhund“ und „Chihuahua“. So können Sie die Sendungen in der Antwort identifizieren.
Weitere Informationen zum Definieren von Sendungen finden Sie unter Sendung.
Fahrzeuge definieren. Fügen Sie im Feld
vehicleseineVehicleNachricht für Ihren Lieferwagen mit der Hundetagesstätte als Start- und End punkt, den Kosten für den Lohn des Fahrers und den Betriebszeiten für den Lieferwagen hinzu.Legen Sie die
startWaypointundendWaypointfür den Lieferwagen auf die Start- und Endorte des Tages fest, also die Hundetagesstä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 das Fahren des Lieferwagens der Hundetagesstätte zahlen. Weitere Informationen zu Kostenparametern finden Sie unter Kostenmodell.Damit das Optimierungstool eine Route innerhalb der Betriebs zeiten des Lieferwagens erstellt, definieren Sie
startTimeWindowsfür den zulässigen Zeitraum, in dem der Fahrer den Lieferwagen in Betrieb nehmen kann, undendTimeWindowsfü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.
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
globalStartTimeauf 7:00 Uhr undglobalEndTimeauf 19:00 Uhr für den 13. Februar 2024 fest. Das sind die Betriebszeiten Ihrer Hundetagesstätte.
3. Anfrage senden
Das folgende Beispiel zeigt 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.
| Hat Kinder | Parameter | Property-Typ | Beschreibung |
|---|---|---|---|
OptimizeToursRequest |
model |
object (ShipmentModel) |
Das 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. Legen Sie für kleine und schnelle Anfragen wie in diesem Szenario für die 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 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 | Das 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 in Betrieb nehmen kann, also 7:00 Uhr am 13. Februar 2024. | |
globalEndTime |
Zeitstempel | Das 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) |
Das ist eine Liste aller möglichen Abholoptionen für die Sendung. Das Optimierungstool 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) |
Das ist eine Liste aller möglichen Abgabeoptionen für die Sendung. Das Optimierungstool 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 | Das 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[] |
object (Waypoint) |
Das ist der Ort eines bestimmten Besuchs auf der Route. Sie können diesen mit Breiten- und Längengradkoordinaten, einer Orts-ID oder einer Ausrichtung definieren. Legen Sie in diesem Szenario für die Hundetagesstätte den Ort fest, der vom Hundehalter für
pickups
angegeben wurde, und die Adresse der Hundetagesstätte für
deliveries. |
timeWindows[] |
Array von Objekten (TimeWindow) |
Das ist ein Array von Objekten, die die Zeitbeschränkungen für eine Abholung oder Lieferung definieren. Verwenden Sie dies 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[] |
object (Waypoint) |
Das ist der Startort der Route des Fahrzeugs, definiert mit Breiten- und Längengradkoordinaten oder einer Orts-ID. Dieser Parameter gibt dem Optimierungstool an, wo das Fahrzeug die Route beginnen muss. Wenn Sie diesen Wegpunkt nicht definieren, wählt das Optimierungstool 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[] |
object (Waypoint) |
Das ist das Ziel der Route des Fahrzeugs, definiert mit Breiten- und Längengradkoordinaten oder einer Orts-ID. Dieser Parameter gibt dem Optimierungstool an, wo das Fahrzeug die Route beenden muss. Wenn Sie diesen Wegpunkt nicht definieren, wählt das Optimierungstool 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 | Das sind die Kosten, die für jede Stunde anfallen, in der ein Fahrzeug verwendet wird, unabhängig davon, ob es fährt oder steht. Verwenden Sie dies in diesem Szenario für die Hundetagesstätte, um den Stundenlohn eines Fahrers zu modellieren. | |
startTimeWindows[] |
Array von Objekten (TimeWindow) |
Das ist das zulässige Fenster, in dem der Fahrer den Lieferwagen für die Abholungen der Hunde am Morgen in Betrieb nehmen kann. | |
endTimeWindows[] |
Array von Objekten (TimeWindow) |
Das ist das zulässige Fenster, in dem der Fahrer den Lieferwagen abstellen und in der Hundetagesstätte parken muss. |