Auf dieser Seite wird der Lebenszyklus eines Routenplans mit der Route Optimization API beschrieben, beginnend mit der Ermittlung Ihrer Routinganforderungen bis hin zu einem integrierten Routenplan in Ihrem System.
Wenn Sie die Phasen des Routenplans befolgen, können Sie die folgenden Ziele erreichen:
- Flottenbetrieb abbilden:Übersetzen Sie Ihre physische Flotte, komplexe Einschränkungen und Geschäftsziele in Code für die API.
- Routenpläne für Ihr Unternehmen optimieren:Hier erfahren Sie, wie Sie Ihren Routenplan so optimieren, dass Sie Ihre Ziele erreichen und Ihre täglichen Abläufe verbessern können.
- In der Produktion bereitstellen: Implementieren Sie Ihren Routenplan, indem Sie ihn in Ihre täglichen Abläufe einbinden.
Das folgende Diagramm zeigt den Lebenszyklus eines Routenplans.
Die Implementierungsphase eines Routenplans findet statt, wenn Sie die API zum ersten Mal einbinden oder wenn sich Ihre Geschäftsanforderungen erheblich ändern. Es deckt die Phasen 1 bis 5 ab.
Die Phase des täglichen Betriebs ist weniger aufwendig und die Optimierung ist minimal. Sie umfasst die Phasen 2 bis 4.
Die Phasen des Lebenszyklus einer Route sind:
- Problem eingrenzen: Identifizieren und organisieren Sie Ihre Ziele, Ressourcen, Aufgaben und Einschränkungen, um sich ein vollständiges Bild Ihrer Abläufe zu machen, bevor Sie die API verwenden.
- Daten zuordnen:Übersetzen Sie Ihre geschäftlichen Anforderungen in API-Parameter, damit der Routenplan die gewünschte Arbeitsweise Ihrer Flotte widerspiegelt.
- Anfrage erstellen und Routenplan abrufen:Geben Sie Ihre Daten in die API ein und rufen Sie Ihren optimierten Routenplan ab.
- Routenplan optimieren:Testen Sie Ihren Routenplan und passen Sie ihn an, indem Sie die Einschränkungen und Ziele anpassen, um sicherzustellen, dass er alle Ihre Anforderungen erfüllt.
- Routenplan einbinden:Verbinden Sie den Routenplan mit Ihren vorhandenen Systemen, um eine umsetzbare Navigation zu ermöglichen.
Problem eingrenzen
Bevor Sie die API verwenden können, müssen Sie die Details Ihrer täglichen Abläufe in klaren Datenkategorien organisieren. So können Sie den Implementierungsprozess mit einem klaren Verständnis Ihrer aktuellen Ressourcen und Aufgaben, der Einschränkungen und der Ziele, die Sie mit Ihrer Flotte erreichen möchten, beginnen.
Ressourcen und Aufgaben identifizieren
Ein wichtiger Schritt bei der Planung Ihrer Route ist die Identifizierung Ihrer Ressourcen und Aufgaben, d. h. Ihrer Fahrzeuge und Sendungen.
| Die Fahrzeuge | Die Lieferungen |
|---|---|
|
|
Einschränkungen identifizieren
Einschränkungen sind die Limits und Beschränkungen für die Nutzung Ihrer Fahrzeuge und die Handhabung Ihrer Sendungen. Sie bestimmen den Großteil Ihrer Abläufe und sind für die Erstellung eines optimierten Routenplans von entscheidender Bedeutung.
Einschränkungen lassen sich im Allgemeinen in zwei Kategorien unterteilen:
| Harte Einschränkungen | Weiche Einschränkungen |
|---|---|
| Diese Limits können nicht überschritten werden. Beispielsweise kann ein Lkw nicht mehr Gewicht transportieren als seine maximale Kapazität, und ein Fahrer kann keine Abholung vornehmen, nachdem ein Geschäft geschlossen wurde. | Diese Einstellungen können bei Bedarf verletzt werden, in der Regel gegen eine Strafgebühr. Beispielsweise möchten Sie einen Lkw nur zu 80% beladen oder vor einer Zielzeit liefern, aber Sie sind damit einverstanden, diese Limits zu überschreiten, um eine bessere Route zu erhalten. |
Zu den häufigsten Einschränkungen gehören:
- Kapazitätslimits:Das maximale Gewicht, Volumen oder die maximale Anzahl von Artikeln, die ein Fahrzeug transportieren kann.
- Zeitfenster: Die spezifischen Zeitfenster, in denen ein Ort für einen Besuch geöffnet ist, oder die spezifischen Schichtzeiten eines Fahrers.
- Kosten: Die Kosten für den Betrieb eines Fahrzeugs oder das Auslassen einer Sendung. Eines der Hauptziele der API ist es, einen kostengünstigen Routenplan zu erstellen.
- Pausen für Fahrer:Ruhezeiten für Fahrer, die nach einer bestimmten Anzahl von Arbeitsstunden in der Regel gesetzlich vorgeschrieben sind.
Geschäftsziele festlegen
Nachdem Sie Ihre Ressourcen und Aufgaben sowie deren Einschränkungen festgelegt haben, müssen Sie bestimmen, welche Messwerte für Ihr Unternehmen am wichtigsten sind. Diese Ziele gehen Hand in Hand mit Einschränkungen und helfen Ihnen, bei der Routenplanung die wichtigsten Faktoren zu berücksichtigen.
Hier einige Beispiele für Geschäftsziele:
| Fuhrpark-/Flottengröße | Entfernung | Zeit | Kosten |
|---|---|---|---|
| Möchten Sie die Anzahl der verwendeten Fahrzeuge minimieren oder Ihre gesamte Flotte einsetzen, um den Arbeitstag früher zu beenden? | Möchten Sie die kürzeste Route, um Kraftstoff zu sparen, oder bevorzugen Sie eine schnellere Route, die aufgrund der Nutzung von Autobahnen möglicherweise länger ist? | Möchten Sie die Gesamtarbeitszeit minimieren oder die Ankunft zu bestimmten Zeiten priorisieren, was die Zeit auf der Route verlängern kann? | Möchten Sie Betriebskosten wie Löhne und Kraftstoff minimieren oder höhere Kosten in Kauf nehmen, um strenge Fristen einzuhalten? |
Daten zuordnen
Nachdem Sie Ihre Daten erfasst haben, ordnen Sie sie den Attributen der API zu. So erhält der Optimierer alle Informationen, die er benötigt, um einen Routenplan zu erstellen, der Ihre geschäftlichen Gegebenheiten berücksichtigt.
Verwenden Sie die Parameter in den folgenden Tabellen, um die Ressourcen, Aufgaben, Einschränkungen und Ziele zuzuordnen, die Sie im Abschnitt Problem eingrenzen zugeordnet haben.
Variablenzuordnung
| Konzept aus der Praxis | API-Parameter | Beschreibung |
|---|---|---|
| Fahrer oder Fahrzeug | model.vehicles[] |
Stellt ein einzelnes Fahrzeug in Ihrer Flotte dar. |
| Depotstandorte |
vehicles[].startWaypointvehicles[].endWaypoint
|
Der Ort, an dem das Fahrzeug seine Route beginnt und beendet. |
| Ihre Öffnungszeiten |
model.globalStartTimemodel.globalEndTime
|
Der früheste Beginn und das späteste Ende für den Betrieb der gesamten Flotte. |
| Aufgabe oder Paket | model.shipments[] |
Stellt einen Job dar. Kann ein pickup, ein delivery oder beides sein. |
| Aufgabenort |
pickups[].arrivalWaypointdeliveries[].arrivalWaypoint
|
Der geografische Standort, an dem der Job ausgeführt wird. |
| Dienstzeit |
pickups[].durationdeliveries[].duration
|
Die Zeit, die am Standort für die Erledigung der Aufgabe (z. B. Entladen) aufgewendet wird, ohne Fahrtzeit. |
Zuordnung von Einschränkungen
| Einschränkung in der Praxis | API-Parameter | Beschreibung |
|---|---|---|
| Fahrzeugkapazität | vehicles[].loadLimits |
Legt das harte oder weiche Limit für die Fahrzeugkapazität fest. Wenn die loadDemand einer Sendung das verbleibende Limit überschreitet, wird sie nicht zugewiesen. |
| Paketgröße | shipments[].loadDemands |
Die Fahrzeugkapazität, die eine Sendung verbraucht. |
| Fahrzeugeinschränkung | shipments[].allowedVehicleIndices |
Schränkt eine Sendung so ein, dass sie nur von bestimmten Fahrzeugen oder Fahrern abgeholt oder zugestellt werden kann. |
| Verfügbare Öffnungszeiten | shipments[].pickups[].timeWindows oder shipments[].deliveries[].timeWindows |
Legt die verfügbaren Zeiten für den Besuch eines Standorts fest. Wenn ein Fahrzeug nicht innerhalb dieses Zeitfensters ankommen kann, wird die Sendung übersprungen. |
| Maximale Schichtdauer | vehicles[].routeDurationLimit |
Legt eine harte oder weiche Obergrenze für die Arbeitszeit eines bestimmten Fahrers fest (z. B. maximal 8 Stunden), unabhängig von der globalen Endzeit. |
| Pausen der Fahrer | vehicles[].breakRule |
Erzwingt bestimmte Ruhezeiten, z. B. obligatorische Pausen nach einer bestimmten Anzahl von Arbeitsstunden. |
| Straßenbeschränkungen | vehicles[].travelMode |
Gibt die Mobilitätsform an (z. B. DRIVE oder BICYCLE). Dadurch wird die Route auf zulässige Straßen beschränkt und die Geschwindigkeiten für die Berechnung der Fahrtzeiten werden festgelegt. |
Zielzuordnung
| Ziel in der Praxis | API-Parameter | Beschreibung |
|---|---|---|
| Flottengröße minimieren | vehicles[].fixedCost |
Wendet einmalige Kosten für die Nutzung eines Fahrzeugs an. Hohe Fixkosten zwingen eine Route dazu, die Verwendung von weniger Fahrzeugen gegenüber einer Erhöhung der Gesamtstrecke oder der Arbeitszeit zu priorisieren. |
| Entfernung minimieren | vehicles[].costPerKilometer |
Es werden Kosten für jeden zurückgelegten Kilometer berechnet. Priorisiert kürzere Routen, um Kraftstoff zu sparen und den Verschleiß zu reduzieren. |
| Gesamtzeit minimieren | vehicles[].costPerHour |
Es werden Kosten für jede Stunde berechnet, in der das Fahrzeug aktiv ist (einschließlich Fahr- und Wartezeit). Priorisiert eine schnellere Fertigstellung. |
| Fahrzeit minimieren | vehicles[].costPerTraveledHour |
Wendet Kosten speziell für die Zeit an, die für die Bewegung aufgewendet wird. So wird zwischen dem Stehen im Verkehr (teuer) und dem Warten an einer Haltestelle(potenziell günstiger) unterschieden. |
| Bestimmte Aufgaben priorisieren | shipments[].penaltyCost |
Wendet Kosten an, wenn eine bestimmte Sendung übersprungen wird. Wenn Sie diesen Wert hoch ansetzen, werden kritische Aufgaben gegenüber optionalen Aufgaben priorisiert. |
Anfrage erstellen und Antwort erhalten
So erstellen Sie mit der Route Optimization API einen Routenplan:
- Umgebung konfigurieren: Richten Sie Ihr Google Cloud-Projekt ein, aktivieren Sie die API und konfigurieren Sie die Authentifizierung. Eine Anleitung finden Sie unter Erste Schritte. Sie müssen diesen Schritt nur einmal ausführen.
- Anfrage senden: Erstellen Sie den Anfragetext mit dem im vorherigen Abschnitt definierten Datenabgleich. Informationen zu Endpunkten, Headern und Anfrageformatierung finden Sie unter API-Anfrage stellen.
- Antwort verstehen:Sobald Sie eine Antwort von der API erhalten, sollten Sie den Routenplan und die Bedeutung der einzelnen Parameter nachvollziehen. Weitere Informationen finden Sie unter Antwort interpretieren.
Routenplan optimieren
Die Übersetzung realer Logistik in API-Kosten und -Einschränkungen ist eine komplexe Aufgabe. Ihr ursprünglicher Routenplan entspricht möglicherweise nicht Ihren Geschäftszielen oder den Erwartungen der Fahrer. Die Optimierung Ihres Routenplans ist ein iterativer Prozess, bei dem Sie die zurückgegebenen Routen testen und Ihre Parameter anpassen, bis Sie eine Konfiguration gefunden haben, die Ihren Zielen entspricht.
Ziele und Einschränkungen anpassen
Wenn der generierte Routenplan nicht Ihren Anforderungen entspricht, können Sie bestimmte Parameter ändern, um andere Ergebnisse zu erzielen. Durch das Verschärfen oder Lockern von Parametern wird die Art und Weise geändert, wie widersprüchliche Ziele im Routenplan gelöst werden. Das Lockern von Parametern ist eine effiziente Methode, um die Parameter zu ermitteln, die Fehler in Ihren Routenplänen verursachen.
In der folgenden Tabelle sind häufige Routingprobleme und die Parameter aufgeführt, die Sie anpassen können, um sie zu beheben.
| Szenario | Parameter | Anpassung | Beschreibung |
|---|---|---|---|
| Eine wichtige Lieferung wird übersprungen | shipments[].penaltyCost |
Erhöhen Sie den Wert oder fügen Sie anderen Sendungen Strafkosten hinzu. | Wenn die Sendung optional ist, erhöhen Sie die Strafkosten, um sie zu priorisieren. Wenn die Sendung obligatorisch ist (keine Strafkosten hat), fügen Sie Strafkosten zu anderen, weniger kritischen Sendungen hinzu. Dadurch sind sie optional, was Zeit und Kapazität für die wichtige Sendung freisetzt. |
| Lieferung aufgrund des Zeitpunkts übersprungen | softStartTime/softEndTime |
Weiche Zeitfenster hinzufügen | Bei harten Zeitfenstern werden Aufgaben verworfen, die auch nur eine Minute zu spät sind. Weiche Zeitfenster ermöglichen es dem Fahrer, etwas später als geplant anzukommen, indem er „Kosten“ zahlt, anstatt den Auftrag nicht zu erfüllen. |
| Lieferung aufgrund des Gewichts übersprungen | loadLimits[].softMaxLoad und costPerUnitAbove |
Anforderungen für weiche Last hinzufügen | Ermöglicht es einem Fahrzeug, seine ideale Kapazität geringfügig zu überschreiten (gegen eine Strafe), anstatt ein Paket zurückzulassen. |
| Lieferung aufgrund von Flottenüberlastung übersprungen | model.vehicles[] oder shipments[].timeWindows |
Fahrzeuge hinzufügen oder Zeitfenster lockern | Wenn es zu viele Lieferungen für die aktuelle Flotte gibt, insbesondere zu Zeiten hoher Nachfrage, sollten Sie mehr Fahrzeuge hinzufügen oder die Lieferzeitfenster erweitern, um die Arbeitslast zu verteilen. |
| Routen sind zu lang oder ineffizient | vehicles[].costPerKilometer/costPerHour |
Kosten hinzufügen oder ihren Wert erhöhen | Teilt der API mit, dass Fahrten teuer sind, und fordert sie auf, weit entfernte, isolierte Haltestellen zu ignorieren, um engere Routen für die Flotte zu erstellen. |
| Die Schichten der Fahrer sind zu lang | vehicles[].routeDurationLimit oder model.vehicles[] |
Dauerlimits hinzufügen oder Fahrzeuge und Limits hinzufügen | Erzwingt eine feste Obergrenze (z. B. 8 Stunden) für die Gesamtzeit, die ein Fahrer auf der Straße verbringt. Das Hinzufügen von Fahrzeugen allein führt nicht zu kürzeren Routen, es sei denn, Sie wenden auch Zeitlimits an, um den Solver zu zwingen, die Arbeitslast auf die größere Flotte zu verteilen. |
Routenplan aktualisieren
Häufig müssen Sie einen Routenplan aktualisieren, während die Basis gleich bleibt, z. B. wenn Sie dem Zeitplan eines aktiven Fahrers eine Abholung hinzufügen. Verwenden Sie dazu Injektionsparameter, die der API einen Startpunkt basierend auf Ihrer vorherigen Lösung bieten. So kann sie den vorhandenen Plan ändern, anstatt einen neuen von Grund auf zu berechnen.
Im Folgenden finden Sie verschiedene Möglichkeiten, einen Routenplan mit Injektionsparametern zu aktualisieren:
- Übergeben Sie die Routen aus einer vorherigen Antwort im Feld
injectedFirstSolutionRoutesIhrer neuen Anfrage. Dadurch wird die Optimierungssuche beschleunigt. Das ist nützlich, wenn Sie vor Beginn des täglichen Betriebs umplanen müssen, z. B. um Last-Minute-Sendungen zu integrieren. - Mit dem Feld
injectedSolutionConstraintkönnen Sie den Grad der Änderung steuern. Das ist nützlich, wenn die Fahrten bereits laufen. So können Sie die aktuelle Reihenfolge des Fahrers beibehalten oder Teile des Plans korrigieren, die bereits ausgeführt wurden. - Achten Sie darauf, dass die aktualisierte Route dem richtigen Fahrzeug zugewiesen bleibt, indem Sie
interpretInjectedSolutionsUsingLabelsauftruesetzen. Das ist nützlich, wenn Sie Sendungen und Fahrzeuge hinzufügen oder entfernen, da Routen anhand von Labels anstelle von Indexen abgeglichen werden. Dazu müssen alle Fahrzeug- und Versandlabel eindeutig sein.
Routenplan einbinden
Der endgültige Routenplan ist ein Datenobjekt, das eine optimierte Verwaltung Ihrer Ressourcen und Aufgaben darstellt und dabei Ihre Einschränkungen und Ziele berücksichtigt. Sie können diesen Routenplan in Ihre täglichen Abläufe einbinden, indem Sie ihn in Ihr System integrieren. Dazu gehört in der Regel, dass Sie Ihren Routenplan für Flottenmanager visualisieren und detaillierte Routenführungen an Fahrer senden.
Visualisierung
Damit Flottenmanager Ihren Routenplan prüfen und im Blick behalten können, haben Sie folgende Möglichkeiten, ihn zu visualisieren:
Damit Flottenmanager Ihren Routenplan prüfen und im Blick behalten können, können Sie ihn auf einer Dashboard-Karte anzeigen lassen. Je nach aktueller Entwicklungsphase können Sie Ihren Routenplan auf folgende Weise visualisieren:
- Ohne Code erkunden: Mit der Open-Source-Anwendung Route Optimization können Sie sich ansehen, wie die API Ihre Daten in physische Pfade auf einer Karte umwandelt. Diese Webanwendung dient als Tool, mit dem Sie Szenarien erstellen, Einschränkungsparameter anpassen und die resultierenden Routenpläne visuell darstellen können, bevor Sie Code schreiben.
- Reihenfolge der Besuche anzeigen:Sie können die Reihenfolge der Besuche als nummerierte Punkte auf einer Karte anzeigen lassen, um Ihre Optimierungs- und Versandpläne in Ihrem eigenen System zu bewerten. Suchen Sie dazu in jeder Route der API-Antwort das Array
visits. Die Elemente in diesem Array sind genau in der Reihenfolge angeordnet, in der der Fahrer sie ausführen soll. Sie können diese Liste durchgehen, dieshipmentIndexverwenden, um die Standortkoordinaten für jeden Halt abzurufen, und Ihre Kartenbibliothek verwenden, um nummerierte Markierungen auf der Karte basierend auf ihrer Reihenfolge in der Liste zu rendern. - Physische Route zeichnen: Sie können die genaue geplante Route auf einer Karte visualisieren, um nachzuvollziehen, warum der Optimierer eine bestimmte Reihenfolge ausgewählt hat. Diese Polylinie stellt den geplanten Pfad für die Planung und Bewertung dar, nicht die Echtzeitroute, die ein Fahrer nimmt. Legen Sie in Ihrer Anfrage
populatePolylines: truefest, um für jede Route einencodedPolyline-Feld zu erhalten, und decodieren Sie es mit der Methodegoogle.maps.geometry.encoding.decodePath()aus der Maps JavaScript API.
An Fahrer senden
Sie können die detaillierte Routenführung mithilfe des Navigation SDK in Ihre Fahrer-App einbinden oder Deeplinks zur Google Maps-App für Nutzer bereitstellen.
- Navigation SDK:Wenn Sie eine benutzerdefinierte Fahrer-App haben, können Sie das Navigation SDK for Android oder iOS für die detaillierte Routenführung in der App einbinden.
Sie können die Aufgabeninformationen aus der API-Antwort in Ihr System einbinden und das SDK für die Navigation verwenden. Wenn Sie die Routen aus der API-Antwort an das SDK übergeben möchten, legen Sie in Ihrer Anfrage
populateTransitionPolylines: truefest. Dadurch wird für jeden Übergang in der Antwort einrouteTokengeneriert. - Fleet Engine: Für ein erweitertes Flottenmanagement können Sie den von der API generierten Routenplan in die Fleet Engine importieren, um die Routenausführung in Echtzeit zu überwachen. Die API stellt zwar eine Polylinie des vorgesehenen Pfads zur Bewertung bereit, die Fleet Engine verknüpft jedoch die geplante Abfolge von Stopps mit der Live-Fahrzeugverfolgung.