Auf dieser Seite wird der Lebenszyklus eines Routenplans mit der Route Optimization API beschrieben. Er beginnt mit der Ermittlung Ihrer Routenanforderungen und endet mit einem integrierten Routenplan in Ihrem System.
Wenn Sie die Phasen des Routenplans durchlaufen, können Sie die folgenden Ziele erreichen:
- Fuhrparkbetrieb abbilden:Übertragen Sie Ihren physischen Fuhrpark, komplexe Einschränkungen und Geschäftsziele in Code für die API.
- Routenpläne für Ihr Unternehmen optimieren:Erfahren Sie, wie Sie Ihren Routenplan optimieren, damit er Ihre Ziele erfüllt und Ihre täglichen Abläufe verbessert.
- In der Produktion bereitstellen:Implementieren Sie Ihren Routenplan, indem Sie ihn in Ihre täglichen Abläufe einbeziehen.
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äftlichen Anforderungen erheblich ändern. Sie umfasst die Phasen 1 bis 5.
Die Phase des täglichen Betriebs ist leichter und die Optimierung ist minimal. Sie umfasst die Phasen 2 bis 4.
Der Lebenszyklus einer Route besteht aus den folgenden Phasen:
- Problem eingrenzen:Ermitteln und organisieren Sie Ihre Ziele, Ressourcen, Aufgaben und Einschränkungen, um sich ein vollständiges Bild von Ihren Abläufen zu machen, bevor Sie die API verwenden.
- Daten zuordnen:Übertragen Sie Ihre geschäftliche Realität in API-Parameter, damit der Routenplan widerspiegelt, wie Ihr Fuhrpark funktionieren soll.
- 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 wiederholen Sie ihn, indem Sie Ihre Einschränkungen und Ziele anpassen, um sicherzustellen, dass er alle Ihre Anforderungen erfüllt.
- Routenplan einbinden:Verknüpfen Sie den Routenplan mit Ihren bestehenden Systemen, um umsetzbare Navigationsanweisungen zu erhalten.
Problem eingrenzen
Bevor Sie die API verwenden, müssen Sie die Details Ihrer täglichen Abläufe in klare Datenkategorien einteilen. So können Sie den Implementierungsprozess mit Klarheit über Ihre aktuellen Ressourcen und Aufgaben, die Einschränkungen und die Ziele, die Sie mit Ihrem Fuhrpark erreichen möchten, beginnen.
Ressourcen und Aufgaben ermitteln
Ein wichtiger Schritt bei der Planung Ihres Routenplans ist die Ermittlung Ihrer Ressourcen und Aufgaben, also Ihrer Fahrzeuge und Lieferungen.
| Die Fahrzeuge | Die Lieferungen |
|---|---|
|
|
Einschränkungen ermitteln
Ihre Einschränkungen sind die Grenzen und Beschränkungen für die Verwendung Ihrer Fahrzeuge und den Umgang mit Ihren Lieferungen. Sie bestimmen den Großteil Ihrer Abläufe und sind entscheidend für die Erstellung eines optimierten Routenplans.
Einschränkungen lassen sich in zwei Kategorien einteilen:
| Harte Einschränkungen | Weiche Einschränkungen |
|---|---|
| Das sind Grenzen, die nicht überschritten werden können. Ein Lkw kann beispielsweise nicht mehr Gewicht befördern als seine maximale Kapazität und ein Fahrer kann keine Abholung vornehmen, nachdem ein Geschäft geschlossen wurde. | Das sind Präferenzen, die bei Bedarf überschritten werden können, in der Regel gegen eine Gebühr. Sie möchten beispielsweise einen Lkw nur zu 80% beladen oder vor einer bestimmten Zeit liefern, sind aber bereit, diese Grenzen zu überschreiten, um eine bessere Route zu erhalten. |
Häufige Einschränkungen sind:
- Kapazitätsbeschränkungen:Das maximale Gewicht, Volumen oder die maximale Anzahl von Artikeln, die ein Fahrzeug befördern kann.
- Zeitfenster:Die bestimmten Zeiträume, in denen ein Ort für einen Besuch geöffnet ist, oder die bestimmten Schichtzeiten eines Fahrers.
- Kosten:Die Kosten für den Betrieb eines Fahrzeugs oder das Überspringen einer Lieferung. Eines der Hauptziele der API ist es, einen kostengünstigen Routenplan zu erstellen.
- Fahrerpausen:Ruhezeiten für Fahrer, die in der Regel durch Arbeitsgesetze nach einer bestimmten Anzahl von Arbeitsstunden vorgeschrieben sind.
Geschäftsziele festlegen
Nachdem Sie Ihre Ressourcen und Aufgaben sowie deren Einschränkungen festgelegt haben, ist es an der Zeit, die Messwerte zu bestimmen, die für Ihr Unternehmen am wichtigsten sind. Diese Ziele gehen Hand in Hand mit Einschränkungen und helfen Ihnen, zu entscheiden, was bei der Routenplanung am wichtigsten ist.
Hier einige Beispiele für Geschäftsziele:
| Fuhrpark-/Flottengröße | Entfernung | Zeit | Kosten |
|---|---|---|---|
| Möchten Sie die Anzahl der verwendeten Fahrzeuge minimieren oder Ihren gesamten Fuhrpark nutzen, um den Arbeitstag früher zu beenden? | Möchten Sie die kürzeste Strecke zurücklegen, um Kraftstoff zu sparen, oder bevorzugen Sie eine schnellere Route, die aufgrund der Nutzung von Autobahnen länger sein kann? | 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 die 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 Eigenschaften der API zu. So erhält der Optimierer alle Informationen, um einen Routenplan zu erstellen, der Ihre geschäftliche Realität berücksichtigt.
Verwenden Sie die Parameter in den nächsten Tabellen, um die Ressourcen, Aufgaben, Einschränkungen, und Ziele zuzuordnen, die Sie im Abschnitt Problem eingrenzen ermittelt haben.
Variablenzuordnung
| Konzept aus der Praxis | API-Parameter | Beschreibung |
|---|---|---|
| Fahrer oder Fahrzeug | model.vehicles[] |
Stellt ein einzelnes Fahrzeug in Ihrem Fuhrpark dar. |
| Depotstandorte |
vehicles[].startWaypointvehicles[].endWaypoint
|
Der Ort, an dem die Route des Fahrzeugs beginnt und endet. |
| Ihre Öffnungszeiten |
model.globalStartTimemodel.globalEndTime
|
Die früheste Startzeit und die späteste Endzeit für den Betrieb des gesamten Fuhrparks. |
| Aufgabe oder Paket | model.shipments[] |
Stellt einen Job dar. Kann eine pickup, eine delivery oder beides sein. |
| Aufgabenstandort |
pickups[].arrivalWaypointdeliveries[].arrivalWaypoint
|
Der geografische Standort, an dem der Job ausgeführt wird. |
| Servicezeit |
pickups[].durationdeliveries[].duration
|
Die Zeit, die am Standort für die Ausführung der Aufgabe aufgewendet wird (z. B. Ausladen), ohne Reisezeit. |
Zuordnung von Einschränkungen
| Einschränkung aus der Praxis | API-Parameter | Beschreibung |
|---|---|---|
| Fahrzeugkapazität | vehicles[].loadLimits |
Legt die harte oder weiche Grenze für die Fahrzeugkapazität fest. Wenn die loadDemand einer Lieferung die verbleibende Grenze überschreitet, wird sie nicht zugewiesen. |
| Paketgröße | shipments[].loadDemands |
Die Menge der Fahrzeugkapazität, die eine Lieferung verbraucht. |
| Fahrzeugeinschränkung | shipments[].allowedVehicleIndices |
Beschränkt eine Lieferung so, dass sie nur von bestimmten Fahrzeugen oder Fahrern abgeholt oder geliefert werden kann. |
| Verfügbare Stunden | shipments[].pickups[].timeWindows oder shipments[].deliveries[].timeWindows |
Legt die verfügbaren Stunden für einen Besuch an einem Standort fest. Wenn ein Fahrzeug nicht innerhalb dieses Zeitfensters ankommen kann, wird die Lieferung übersprungen. |
| Beschränkung der Schichtlänge | 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. |
| Fahrerpausen | 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 werden zur Berechnung der Reisezeiten festgelegt. |
Zuordnung von Zielen
| Ziel aus der Praxis | API-Parameter | Beschreibung |
|---|---|---|
| Fuhrpark-/Flottengröße minimieren | vehicles[].fixedCost |
Wendet einmalige Kosten für die Nutzung eines Fahrzeugs an. Hohe Fixkosten zwingen eine Route, die Nutzung weniger Fahrzeuge zu priorisieren, anstatt die Gesamtdistanz oder Arbeitszeit zu erhöhen. |
| Entfernung minimieren | vehicles[].costPerKilometer |
Wendet Kosten für jeden zurückgelegten Kilometer an. Priorisiert kürzere Routen, um Kraftstoff und Verschleiß zu sparen. |
| Gesamtzeit minimieren | vehicles[].costPerHour |
Wendet Kosten für jede Stunde an, in der das Fahrzeug aktiv ist (einschließlich Reise- und Wartezeit). Priorisiert eine schnellere Fertigstellung. |
| Fahrzeit minimieren | vehicles[].costPerTraveledHour |
Wendet Kosten speziell für die Zeit an, die mit der Fahrt verbracht wird. So wird zwischen dem Stehen im Stau (teuer) und dem Warten an einer Haltestelle(potenziell günstiger) unterschieden. |
| Bestimmte Aufgaben priorisieren | shipments[].penaltyCost |
Wendet Kosten an, wenn eine bestimmte Lieferung übersprungen wird. Wenn Sie diesen Wert hoch ansetzen, werden kritische Aufgaben gegenüber optionalen Aufgaben priorisiert. |
Anfrage erstellen und Antwort erhalten
Die Erstellung eines Routenplans mit der Route Optimization API umfasst die folgenden Schritte:
- 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 der im vorherigen Abschnitt definierten Datenzuordnung. Informationen zu Endpunkten, Headern und zur Formatierung von Anfragen finden Sie unter API-Anfrage stellen.
- Antwort verstehen:Nachdem Sie eine Antwort von der API erhalten haben, müssen Sie den Routenplan und die Bedeutung der einzelnen Parameter verstehen. Weitere Informationen finden Sie unter Antwort interpretieren.
Routenplan optimieren
Die Übertragung der Logistik aus der Praxis in API-Kosten und -Einschränkungen ist eine komplexe Aufgabe. Ihr erster 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 finden, mit der Sie Ihre Ziele erreichen.
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 Anpassen von Parametern wird geändert, wie widersprüchliche Ziele im Routenplan gelöst werden. Das Anpassen von Parametern ist eine effiziente Möglichkeit, die Parameter zu ermitteln, die Fehler in Ihren Routenplänen verursachen.
In der folgenden Tabelle sind häufige Probleme bei der Routenplanung 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 Lieferungen Strafkosten hinzu. | Wenn die Lieferung optional ist, erhöhen Sie die Strafkosten, um sie zu priorisieren. Wenn die Lieferung obligatorisch ist (keine Strafkosten), fügen Sie anderen, weniger kritischen Lieferungen Strafkosten hinzu. Dadurch werden sie optional, wodurch Fahrzeugzeit und -kapazität für die wichtige Lieferung frei werden. |
| Lieferung aufgrund von Zeitüberschreitung übersprungen | softStartTime / softEndTime |
Weiche Zeitfenster hinzufügen | Bei harten Zeitfenstern werden Aufgaben verworfen, die auch nur eine Minute zu spät sind. Bei weichen Zeitfenstern kann der Fahrer gegen eine Gebühr etwas vom Zeitplan abweichen, anstatt die Aufgabe nicht zu erfüllen. |
| Lieferung aufgrund von Gewicht übersprungen | loadLimits[].softMaxLoad und costPerUnitAbove |
Weiche Ladeanforderungen hinzufügen | Ermöglicht es einem Fahrzeug, seine ideale Kapazität leicht zu überschreiten (gegen eine Gebühr), anstatt ein Paket zurückzulassen. |
| Lieferung aufgrund von Überlastung des Fuhrparks übersprungen | model.vehicles[] oder shipments[].timeWindows |
Fahrzeuge hinzufügen oder Zeitfenster anpassen | Wenn es zu viele Lieferungen für den aktuellen Fuhrpark gibt, insbesondere während der Stoßzeiten, fügen Sie weitere Fahrzeuge hinzu oder erweitern Sie die Lieferzeitfenster, um die Arbeitslast zu verteilen. |
| Routen sind zu lang oder ineffizient | vehicles[].costPerKilometer / costPerHour |
Kosten hinzufügen oder Wert erhöhen | Teilt der API mit, dass Reisen teuer ist, und fordert sie auf, entfernte, isolierte Haltestellen zu entfernen, um engere Routen für den Fuhrpark zu erstellen. |
| Fahrerschichten sind zu lang | vehicles[].routeDurationLimit oder model.vehicles[] |
Dauerbeschränkungen hinzufügen oder Fahrzeuge und Beschränkungen hinzufügen | Erzwingt eine harte Obergrenze (z. B. 8 Stunden) für die Gesamtzeit, die ein Fahrer auf der Straße verbringt. Wenn Sie nur Fahrzeuge hinzufügen, werden die Routen nicht verkürzt, es sei denn, Sie legen auch Dauerbeschränkungen fest, um den Solver zu zwingen, die Arbeitslast auf den größeren Fuhrpark zu verteilen. |
Routenplan aktualisieren
Oft müssen Sie einen Routenplan aktualisieren, ohne die Grundlage zu ändern, z. B. eine Abholung zum Zeitplan eines aktiven Fahrers hinzufügen. Verwenden Sie dazu Injektionsparameter, die der API einen Start basierend auf Ihrer vorherigen Lösung liefern, sodass der vorhandene Plan geändert werden kann, anstatt einen neuen von Grund auf zu berechnen.
Es gibt verschiedene Möglichkeiten, einen Routenplan mit Injektionsparametern zu aktualisieren:
- Übergeben Sie die Routen aus einer vorherigen Antwort an das Feld
injectedFirstSolutionRoutesIhrer neuen Anfrage. Dadurch wird die Optimierungssuche beschleunigt und es ist nützlich für die Neuplanung vor Beginn des täglichen Betriebs, z. B. für die Einbindung von Last-Minute-Lieferungen. - Steuern Sie den Grad der Änderung mit dem Feld
injectedSolutionConstraint. Das ist nützlich, wenn der Betrieb bereits läuft, da Sie so die aktuelle Reihenfolge des Fahrers beibehalten oder Teile des Plans korrigieren können, die bereits ausgeführt wurden. - Legen Sie
interpretInjectedSolutionsUsingLabelsauftruefest, um sicherzustellen, dass die aktualisierte Route dem richtigen Fahrzeug zugewiesen bleibt. Das ist nützlich bei Tests, wenn Sie Lieferungen und Fahrzeuge hinzufügen oder entfernen, da Routen anhand von Labels anstelle von Indexen zugeordnet werden. Dazu müssen alle Fahrzeug- und Lieferlabels eindeutig sein.
Routenplan einbinden
Ihr endgültiger Routenplan ist ein Datenobjekt, das eine optimierte Verwaltung Ihrer Ressourcen und Aufgaben darstellt und gleichzeitig Ihre Einschränkungen und Ziele berücksichtigt. Verwenden Sie diesen Routenplan in Ihren täglichen Abläufen, indem Sie ihn in Ihr System einbinden. In der Regel wird dabei Ihr Routenplan für Fuhrparkmanager visualisiert und den Fahrern werden detaillierte Anweisungen gesendet.
Visualisierung
Damit Fuhrparkmanager Ihren Routenplan überprüfen und beobachten können, können Sie ihn auf folgende Weise visualisieren:
Damit Fuhrparkmanager Ihren Routenplan überprüfen und beobachten können, können Sie ihn auf einer Dashboard-Karte anzeigen. Je nach aktueller Entwicklungsphase können Sie Ihren Routenplan auf folgende Weise visualisieren:
- Ohne Code testen: Mit der Open-Source-App Route Optimization können Sie sehen, wie die API Ihre Daten in physische Routen auf einer Karte umwandelt. Diese Webanwendung dient als Erkundungstool, mit dem Sie Szenarien erstellen, Einschränkungsparameter anpassen und Ihre resultierenden Routenpläne visuell darstellen können, bevor Sie Code schreiben.
- Besuchsreihenfolge anzeigen:Sie können die Reihenfolge der Besuche als nummerierte Punkte auf einer Karte anzeigen, um Ihre Optimierungs- und Versandpläne in Ihrem eigenen System zu bewerten. Suchen Sie dazu in der API-Antwort das Array
visitsin jeder Route. Die Elemente in diesem Array sind genau so angeordnet, wie der Fahrer sie ausführen sollte. Sie können diese Liste durchlaufen, mitshipmentIndexdie Standortkoordinaten für jede Haltestelle abrufen und mit Ihrer Zuordnungsbibliothek nummerierte Markierungen auf der Karte basierend auf ihrer Reihenfolge in der Liste rendern. - Physische Route zeichnen:Sie können den genauen geplanten Weg auf einer Karte visualisieren, um zu verstehen, warum der Optimierer eine bestimmte Reihenfolge gewählt hat. Diese Polylinie stellt den beabsichtigten Weg für die Planung und Bewertung dar, nicht die Echtzeitroute, die ein Fahrer zurücklegt. Legen Sie
populatePolylines: truein Ihrer Anfrage fest, um für jede Route ein FeldencodedPolylinezu erhalten, und decodieren Sie es mit dergoogle.maps.geometry.encoding.decodePath()Methode aus der Maps JavaScript API.
An Fahrer senden
Sie können detaillierte Routenführung mit dem Navigation SDK in Ihre Fahrer-App einbinden oder Deeplinks zur Google Maps App für Verbraucher bereitstellen.
- Navigation SDK: Wenn Sie eine benutzerdefinierte Fahrer-App haben, können Sie
das Navigation SDK for Android oder
iOS für 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 jede Übergangsroute in der Antwort einrouteTokengeneriert. - **Fleet Engine**: Für die erweiterte Fuhrparkverwaltung können Sie den von der API generierten Routenplan in Fleet Engine importieren, um die Routenausführung in Echtzeit zu beobachten. Während die API eine Polylinie des beabsichtigten Wegs zur Bewertung bereitstellt, kombiniert Fleet Engine Ihre geplante Besuchsreihenfolge mit der Live-Fahrzeugverfolgung.