Auf dieser Seite wird der Lebenszyklus eines Routenplans mit der Route Optimization API beschrieben – von der Ermittlung Ihrer Routinganforderungen bis hin zu einem integrierten Routenplan in Ihrem System.
Wenn Sie die Phasen des Routenplans durchlaufen, 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 anpassen, dass er Ihren Zielen entspricht und Ihre täglichen Abläufe verbessert.
- In der Produktion bereitstellen:Setzen Sie Ihren Routenplan um, indem Sie ihn in Ihre täglichen Abläufe einbeziehen.
Das folgende Diagramm zeigt den Lebenszyklus eines Routenplans.
Die Implementierungsphase eines Routenplans beginnt, wenn Sie die API zum ersten Mal einbinden oder sich Ihre geschäftlichen Anforderungen erheblich ändern. Es umfasst die Phasen 1 bis 5.
Die Phase des täglichen Betriebs ist weniger aufwendig und es sind nur minimale Anpassungen erforderlich. Sie umfasst die Phasen 2 bis 4.
Die Phasen des Lebenszyklus einer Route sind:
- 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:Übersetzen Sie Ihre geschäftliche Realität in API-Parameter, damit der Routenplan widerspiegelt, wie Ihre Flotte eingesetzt werden soll.
- Anfrage erstellen und Routenplan abrufen:Geben Sie Ihre Daten in die API ein und erhalten Sie Ihren optimierten Routenplan.
- Routenplan optimieren:Testen Sie Ihren Routenplan und passen Sie ihn an, indem Sie Ihre Einschränkungen und Ziele anpassen, damit er alle Ihre Anforderungen erfüllt.
- Routenplan einbinden:Verbinden Sie den Routenplan mit Ihren bestehenden Systemen, um eine umsetzbare Navigation zu ermöglichen.
Problem eingrenzen
Bevor Sie die API verwenden können, müssen Sie die Details Ihres Tagesgeschäfts in übersichtliche Datenkategorien einteilen. So können Sie die Implementierung mit einem klaren Bild 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 Ihres Routenplans ist die Identifizierung Ihrer Ressourcen und Aufgaben, also Ihrer Fahrzeuge und Sendungen.
| Die Fahrzeuge | Die Sendungen |
|---|---|
|
|
Einschränkungen ermitteln
Ihre Einschränkungen sind die Grenzwerte und Einschränkungen für die Nutzung Ihrer Fahrzeuge und den Umgang mit Ihren Sendungen. Sie bestimmen die meisten Ihrer Abläufe und sind entscheidend für die Erstellung eines optimierten Routenplans.
Einschränkungen lassen sich in der Regel in zwei Kategorien einteilen:
| Harte Einschränkungen | Weiche Einschränkungen |
|---|---|
| Diese Limits können nicht überschritten werden. Ein Lkw kann beispielsweise nicht mehr Gewicht transportieren als seine maximale Kapazität und ein Fahrer kann keine Abholung vornehmen, nachdem ein Geschäft geschlossen wurde. | Dies sind Einstellungen, die bei Bedarf verletzt werden können, in der Regel gegen eine Gebühr. Sie möchten beispielsweise einen Lkw nur zu 80% beladen oder vor einer bestimmten Uhrzeit liefern, sind aber bereit, diese Grenzwerte zu überschreiten, um eine bessere Route zu erhalten. |
Häufige Einschränkungen:
- Kapazitätsbeschränkungen:Das maximale Gewicht, Volumen oder die maximale Anzahl von Artikeln, die ein Fahrzeug transportieren kann.
- Zeitfenster:Die spezifischen Zeiträume, 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 Lieferung. Eines der Hauptziele der API ist es, einen kostengünstigen Routenplan zu erstellen.
- Fahrerpausen:Ruhezeiten für Fahrer, die in der Regel nach einer bestimmten Anzahl von Arbeitsstunden durch Arbeitsgesetze vorgeschrieben sind.
Geschäftsziele festlegen
Nachdem Sie Ihre Ressourcen und Aufgaben sowie deren Einschränkungen festgelegt haben, ist es an der Zeit, die für Ihr Unternehmen wichtigsten Messwerte zu bestimmen. Diese Ziele gehen Hand in Hand mit Einschränkungen und helfen Ihnen bei der Entscheidung, was bei der Planung einer Route am wichtigsten ist.
Hier einige Beispiele für Unternehmensziele:
| Fuhrpark-/Flottengröße | Entfernung | Zeit | Kosten |
|---|---|---|---|
| Möchten Sie die Anzahl der verwendeten Fahrzeuge minimieren oder Ihre gesamte Flotte nutzen, 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 Gesamtzahl der Arbeitsstunden minimieren oder die Ankunft zu bestimmten Zeiten priorisieren, was die Zeit für die 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 erhoben haben, müssen Sie sie den Eigenschaften der API zuordnen. So erhält die Optimierungsfunktion alle Informationen, die sie benötigt, um einen Routenplan zu erstellen, der Ihre geschäftliche Realität berücksichtigt.
Verwenden Sie die Parameter in den folgenden Tabellen, um die Ressourcen, Aufgaben, Einschränkungen und Zielvorhaben 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 Ihrem Fuhrpark dar. |
| Depotstandorte |
vehicles[].startWaypointvehicles[].endWaypoint
|
Der Ort, an dem das Fahrzeug seine Route beginnt und beendet. |
| Öffnungszeiten |
model.globalStartTimemodel.globalEndTime
|
Die früheste Startzeit und die späteste Endzeit für den Betrieb der gesamten Flotte. |
| Aufgabe oder Paket | model.shipments[] |
Stellt einen Job dar. Kann ein pickup, ein delivery oder beides sein. |
| Aufgabenstandort |
pickups[].arrivalWaypointdeliveries[].arrivalWaypoint
|
Der geografische Standort, an dem der Job stattfindet. |
| Servicezeit |
pickups[].durationdeliveries[].duration
|
Die Zeit, die am Standort für die Erledigung der Aufgabe aufgewendet wurde, z. B. zum Entladen, ohne Reisezeit. |
Einschränkungszuordnung
| Einschränkung in der realen Welt | 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 Menge der Fahrzeugkapazität, die für eine Sendung benötigt wird. |
| Fahrzeugeinschränkung | shipments[].allowedVehicleIndices |
Beschränkt eine Sendung so, dass sie nur von bestimmten Fahrzeugen oder Fahrern abgeholt oder zugestellt werden kann. |
| Verfügbare Stunden | shipments[].pickups[].timeWindows oder shipments[].deliveries[].timeWindows |
Legt die verfügbaren Öffnungszeiten für einen Ort fest. Wenn ein Fahrzeug nicht innerhalb dieses Zeitraums eintreffen kann, wird die Sendung übersprungen. |
| Längenbeschränkung für Schichten | 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 Art der Fortbewegung 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 Reisezeiten werden festgelegt. |
Zielzuordnung
| Ziel in der Praxis | API-Parameter | Beschreibung |
|---|---|---|
| Flottengröße minimieren | vehicles[].fixedCost |
Es wird eine einmalige Gebühr für die Nutzung eines Fahrzeugs erhoben. Bei hohen Fixkosten wird bei der Routenplanung die Verwendung weniger Fahrzeuge priorisiert, auch wenn dadurch die Gesamtdistanz oder die Arbeitszeit zunimmt. |
| Distanz minimieren | vehicles[].costPerKilometer |
Es wird ein Kostenbetrag für jeden gefahrenen Kilometer angewendet. Kürzere Routen werden priorisiert, um Kraftstoff und Verschleiß zu sparen. |
| Gesamtzeit minimieren | vehicles[].costPerHour |
Es wird ein Preis für jede Stunde berechnet, in der das Fahrzeug aktiv ist (einschließlich Fahr- und Wartezeit). Priorisiert eine schnellere Fertigstellung. |
| Fahrzeit minimieren | vehicles[].costPerTraveledHour |
Es wird ein Kostenfaktor speziell für die Zeit angewendet, die für die Bewegung aufgewendet wird. So wird zwischen dem Stehen im Stau (teuer) und dem Warten an einer Haltestelle(möglicherweise günstiger) unterschieden. |
| Bestimmte Aufgaben priorisieren | shipments[].penaltyCost |
Es wird ein Kostenbetrag angewendet, 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 dazu finden Sie unter Erste Schritte. Sie müssen diesen Schritt nur einmal ausführen.
- Anfrage senden:Erstellen Sie den Anfragetext anhand des im vorherigen Abschnitt definierten Datenabgleichs. Informationen zu Endpunkten, Headern und zur Formatierung von Anfragen finden Sie unter API-Anfrage stellen.
- Antwort verstehen:Wenn Sie eine Antwort von der API erhalten, müssen Sie den Routenplan und die Bedeutung der einzelnen Parameter verstehen. Antwort interpretieren
Routenplan optimieren
Die Übersetzung der realen Logistik in API-Kosten und ‑Einschränkungen ist eine komplexe Aufgabe. Ihre ursprüngliche Routenplanung entspricht möglicherweise nicht Ihren Unternehmenszielen 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, die Ihren Anforderungen entspricht.
Ziele und Beschränkungen anpassen
Wenn der generierte Routenplan nicht Ihren Anforderungen entspricht, können Sie bestimmte Parameter ändern, um andere Ergebnisse zu erzielen. Durch Anpassen von Parametern wird geändert, wie widersprüchliche Ziele im Routenplan gelöst werden. Das Anpassen 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 Sendung 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 Kosten für die Nichterfüllung, um ihr eine höhere Priorität zu geben. Wenn der Versand obligatorisch ist (keine Strafkosten), fügen Sie die Strafkosten den anderen, weniger kritischen Sendungen hinzu. Dadurch sind sie optional, sodass Zeit und Kapazität des Fahrzeugs für die wichtige Sendung frei werden. |
| Lieferung ausgesetzt | softStartTime/softEndTime |
Wechselnde Zeitfenster hinzufügen | Bei harten Zeitfenstern werden Aufgaben abgelehnt, die auch nur eine Minute zu spät sind. Bei weichen Zeitfenstern kann der Fahrer etwas später ankommen, indem er eine „Gebühr“ zahlt, anstatt den Auftrag nicht zu erfüllen. |
| Lieferung aufgrund des Gewichts ausgesetzt | loadLimits[].softMaxLoad und costPerUnitAbove |
Soft Load-Anforderungen hinzufügen | Ermöglicht es einem Fahrzeug, seine ideale Kapazität leicht zu überschreiten (gegen eine Strafe), anstatt ein Paket zurückzulassen. |
| Lieferung aufgrund von Überlastung der Flotte ausgesetzt | model.vehicles[] oder shipments[].timeWindows |
Fahrzeuge hinzufügen oder Zeitfenster verlängern | Wenn es zu viele Sendungen für die aktuelle Flotte gibt, insbesondere während der Stoßzeiten, fügen Sie weitere Fahrzeuge hinzu oder weiten Sie die Lieferzeiträume aus, um die Arbeitslast zu verteilen. |
| Routen sind zu lang oder ineffizient | vehicles[].costPerKilometer/costPerHour |
Kosten hinzufügen oder ihren Wert steigern | Teilt der API mit, dass Reisen teuer sind, und fordert sie auf, weit entfernte, isolierte Stopps zu entfernen, um kürzere Routen für die Flotte zu erstellen. |
| Fahrerschichten sind zu lang | vehicles[].routeDurationLimit oder model.vehicles[] |
Dauerlimits oder Fahrzeuge und Limits hinzufügen | Erzwingt eine 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 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, ohne die Basis zu ändern, z. B. wenn Sie einen Abholort zum Zeitplan eines aktiven Fahrers hinzufügen. Verwenden Sie dazu Injektionsparameter. Diese liefern der API einen Startpunkt auf Grundlage Ihrer vorherigen Lösung, sodass der vorhandene Plan geändert und nicht von Grund auf neu berechnet wird.
Es gibt verschiedene Möglichkeiten, eine Routenplanung mit Injektionsparametern zu aktualisieren:
- Übergeben Sie die Routen aus einer vorherigen Antwort in das Feld
injectedFirstSolutionRoutesIhrer neuen Anfrage. Dadurch wird die Optimierungssuche beschleunigt. Das ist nützlich, wenn Sie vor Beginn des Tagesgeschäfts neu planen möchten, z. B. um Last-Minute-Lieferungen zu berücksichtigen. - Mit dem Feld
injectedSolutionConstraintkönnen Sie den Grad der Änderung steuern. Das ist nützlich, wenn bereits Vorgänge 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
interpretInjectedSolutionsUsingLabelsauftruefestlegen. Das ist bei Tests nützlich, wenn Sie Sendungen und Fahrzeuge hinzufügen oder entfernen, da Routen anhand von Labels statt anhand von Indexen zugeordnet werden. Dazu müssen alle Fahrzeug- und Versandlabels 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. Sie können diesen Routenplan in Ihren täglichen Betrieb einbinden. Dazu gehört in der Regel, den Routenplan für Flottenmanager zu visualisieren und den Fahrern detaillierte Wegbeschreibungen zu senden.
Visualisierung
Damit Flottenmanager Ihren Routenplan überprüfen und im Blick behalten können, haben Sie folgende Möglichkeiten, ihn zu visualisieren:
Damit Flottenmanager Ihren Routenplan überprü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 ausprobieren:Mit der Open-Source-App Route Optimization können Sie sehen, wie die API Ihre Daten in physische Pfade auf einer Karte umwandelt. Diese Webanwendung dient als exploratives Tool, mit dem Sie Szenarien erstellen, Einschränkungsparameter anpassen und die resultierenden Routenpläne visuell rendern können, bevor Sie Code schreiben.
- Besuchsreihenfolge anzeigen:Sie können die Reihenfolge der Besuche als nummerierte Punkte auf einer Karte anzeigen lassen, um Ihre Optimierungs- und Einsatzpläne in Ihrem eigenen System zu bewerten. Suchen Sie dazu in jeder Route der API-Antwort nach dem
visits-Array. 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 Kartenbibliothek nummerierte Markierungen auf der Karte rendern, die auf der Reihenfolge in der Liste basieren. - Physische Route zeichnen:Sie können den genauen geplanten Pfad 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 Auswertung dar, nicht die Echtzeitroute, die ein Fahrer nimmt. Legen Sie
populatePolylines: truein Ihrer Anfrage fest, um für jede Route einencodedPolyline-Feld zu erhalten, und dekodieren 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 Verbraucher bereitstellen.
- Navigation SDK:Wenn Sie eine benutzerdefinierte Fahrer-App haben, können Sie das Navigation SDK for Android oder iOS für die In-App-detaillierte Routenführung 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
populateTransitionPolylines: truein Ihrer Anfrage fest. Dadurch wird für jeden Übergang in der Antwort einrouteTokengeneriert. - Fleet Engine:Für die erweiterte Flottenverwaltung können Sie den von der API generierten Routenplan in Fleet Engine importieren, um die Routenausführung in Echtzeit zu überwachen. Während die API eine Polylinie des beabsichtigten Pfads für die Auswertung bereitstellt, kombiniert Fleet Engine Ihre geplante Besuchsreihenfolge mit dem Live-Tracking von Fahrzeugen.