Die Route Optimization API gibt Routen für Fahrzeuge in der entsprechenden Anfrage zurück. Sendungen werden Fahrzeugen zugewiesen oder je nach den Eigenschaften der Anfrage übersprungen.
Eine -Nachricht (REST, gRPC) hat zwei Hauptattribute auf oberster Ebene
:OptimizeToursResponse
routes[]sind die Routen für jedes Fahrzeug mit den zugewiesenen Sendungen. JedeRouteenthält Messwerte, die die Eigenschaften der jeweiligen Route widerspiegeln.metricssind aggregierte Messwerte für die gesamte Antwort über alle Fahrzeuge und Routenpläne hinweg. Die Messwerte auf oberster Ebene enthalten dieselben Attribute wie die Messwerte pro Route, wobei die Werte über alle Routen hinweg aggregiert werden.
Einige Attribute werden je nach Optimierungsergebnissen möglicherweise nicht immer ausgefüllt:
skippedShipments[]listet Sendungen auf, die von keinem Fahrzeug ausgeführt werden. Eine Sendung kann übersprungen werden, wenn sie nicht innerhalb der angegebenen Einschränkungen ausgeführt werden kann oder wenn die Kosten für die Ausführung der Sendung die Kosten für die Strafe übersteigen. Wenn beispielsweise die Abholung oder Lieferung einer Sendung ein sehr engestimeWindowhat, ist es möglicherweise nicht möglich oder kosteneffizient, dass ein Fahrzeug den Besuch innerhalb des erforderlichen Zeitfensters durchführt.validationErrors[]gibt Fehler an, die die Anfrage ungültig machen oder die Lösung unmöglich machen, wennsolvingModeder Anfrage aufVALIDATE_ONLYgesetzt ist. Im normalenDEFAULT_SOLVE-Modus werden Validierungsfehler in einer Fehlermeldung anstelle des Antworttexts angezeigt. Beachten Sie, dass imVALIDATE_ONLY-Modus mehrere Fehler gleichzeitig gemeldet werden können, was für das schnelle Debuggen von Anfragen nützlich ist.
Routenattribute
Jeder routes[] Eintrag ist eine ShipmentRoute Nachricht (REST, gRPC). Jede ShipmentRoute stellt die Routenzuweisung für ein bestimmtes Fahrzeug aus der Anfrage dar. Wichtige ShipmentRoute-Attribute im Zusammenhang mit dem entsprechenden Vehicle sind:
vehicleIndexist der nullbasierte Index desVehiclein der entsprechenden Anfragenachricht. In REST-Antworten wird dieses Attribut weggelassen, wenn der Wert null ist.vehicleStartTimeist die Zeit, zu der das Fahrzeug mit der Route beginnen muss.vehicleEndTimeist die Zeit, zu der das Fahrzeug die Route voraussichtlich beenden wird.
In einer Antwort sieht routes so aus:
{
"routes": [
{
"vehicleStartTime": "2024-02-13T00:00:00Z",
"vehicleEndTime": "2024-02-13T00:38:42Z",
"visits": [
...
],
"transitions": [
...
],
"metrics": {
...
},
...
}
],
...
}
Jede ShipmentRoute enthält eine geordnete Liste von visits, die das Fahrzeug ausführen wird. Jeder Visit (REST, gRPC) stellt eine VisitRequest
(REST, gRPC) aus der entsprechenden Anfrage dar. Wichtige Visit-Attribute sind:
shipmentIndexist der nullbasierte Index der Sendung, zu der dieser Besuch in der entsprechenden Anfrage gehört.isPickupist „true“, wenn ein Besuch eine Abholung ist, und „false“, wenn ein Besuch eine Lieferung ist. In REST-Antworten wird dieses Attribut weggelassen, wenn der Wert „false“ ist.visitRequestIndexist der nullbasierte Index vonVisitRequestausShipment.pickupsoderShipment.deliveriesin der entsprechenden Anfrage die vonVisitdargestellt wird. In REST-Antworten wird dieses Attribut weggelassen, wenn der Wert null ist.startTimeist die Zeit, zu der der Besuch voraussichtlich beginnt.loadDemandsordnet den Lasttyp der Lastmenge zu, die für den Abschluss vonVisiterforderlich ist. Die Lastmengen sind für Lieferbesuche negativ, da sie die Last darstellen, die aus dem Fahrzeug entfernt wird.
Ein Beispiel für Visit sieht so aus:
{
"routes": [
{
...
"visits": [
{
"isPickup": true,
"startTime": "2024-02-13T00:00:00Z",
"detour": "0s"
},
...
],
},
...
],
...
}
Jede ShipmentRoute enthält eine geordnete Liste von transitions, die die Fahrt zwischen visits für ein bestimmtes Fahrzeug darstellen. Wichtige Transition Nachricht
(REST, gRPC) Attribute sind:
startTimeist die Zeit, zu der das Fahrzeug mit der Ausführung der Übergangsphase beginnt.travelDurationist die Dauer, die das Fahrzeug für die Ausführung der Übergangsphase benötigt.travelDistanceMetersist die Entfernung in Metern, die das Fahrzeug für die Ausführung der Übergangsphase zurücklegen muss.trafficInfoUnavailablegibt an, ob Verkehrsdaten für die Übergangsphase verfügbar sind.waitDurationstellt die Leerlaufzeit dar, die das Fahrzeug wartet, bevor es mit dem nächstenVisitbeginnen kann. Dies kann aufgrund derstart_timedes folgendenVisitentstehen.totalDurationist die Gesamtdauer der Übergangsphase, einschließlich Reise-, Warte-, Pausen- und Verzögerungszeiten.vehicleLoadsordnet den Lasttyp der Lastmenge zu, die das Fahrzeug während dieser Übergangsphase befördert.
Ein Beispiel für Transition sieht so aus:
{
"routes": [
{
...
"transitions": [
...
{
"travelDuration": "1171s",
"travelDistanceMeters": 9004,
"waitDuration": "0s",
"totalDuration": "1171s",
"startTime": "2024-02-13T00:00:00Z"
},
...
],
...
}
],
...
}
Weitere Informationen zur Beziehung zwischen vists und transitions finden Sie unter
Optimierung der Reihenfolge von Abhol- und Lieferstopps und in der ShipmentRoute
Referenzdokumentation (REST, gRPC). Weitere Informationen zu den
routePolyline und routeToken Attributen einer Transition Nachricht finden Sie unter
Übergangspolylinien und Routentokens.
Attribute von Messwerten
Die Nachricht Metrics (REST, gRPC) fasst die gesamte Lösung zusammen.
Einige wichtige Metrics-Attribute sind:
totalCostsind die Gesamtkosten, die bei der Ausführung der Routen entstehen. Weitere Informationen zu Kosten finden Sie unter Parameter des Kostenmodells.usedVehicleCountist die Gesamtzahl der in der Lösung verwendeten Fahrzeuge. Fahrzeuge können leere Routen haben, wenn der Optimierer feststellt, dass ihre Verwendung nicht erforderlich ist.skippedMandatoryShipmentCountist die Anzahl der übersprungenen Sendungen, die „obligatorisch“ sind. Für eine obligatorische Sendung wird keinepenaltyCostangegeben, die anfällt, wenn die Sendung übersprungen wird. Obligatorische Sendungen können trotzdem übersprungen werden, wenn ihre Ausführung unter den angegebenen Einschränkungen nicht möglich ist. Weitere Informationen zu Kosten finden Sie unter Parameter des Kostenmodells.
Zusätzliche Messwerte werden als AggregatedMetrics Nachrichten (REST,
gRPC) gemeldet. Der Nachrichtentyp AggregatedMetrics wird für das Attribut
Metrics.aggregatedRouteMetrics und für das Attribut ShipmentRoute.metrics
verwendet. Metrics.aggregatedRouteMetrics enthält Messwerte, die über alle
ShipmentRoutes in der OptimizeToursResponse aggregiert werden. Jedes ShipmentRoute.metrics
Attribut enthält Messwerte für die jeweilige ShipmentRoute.
Wichtige AggregatedMetrics-Attribute sind:
performedShipmentCountist die Anzahl der Sendungen, die von Fahrzeugen auf ihren gesamten Routen ausgeführt werden.travelDurationist die Gesamtzeit, die die Fahrzeuge während der Ausführung ihrer Routen unterwegs sind.waitDurationist die Gesamtzeit, die die Fahrzeuge während der Ausführung ihrer Routen warten.delayDurationist die Gesamtverzögerungszeit für die Fahrzeuge. Dieser Wert ist in der Regel null, es sei denn, in der Anfrage werdenTransitionAttributesverwendet.breakDurationist die Gesamtzeit, die die Fahrzeuge während der Ausführung ihrer Routen in Pausen verbringen.visitDurationist die Gesamtzeit, die die Fahrzeuge während der Ausführung ihrer Routen für Besuche aufwenden. Dies ist im Grunde die Summe allerVisitRequest.durationWerte fürVisitRequests, die denVisits entsprechen, die dem entsprechenden Fahrzeug zugewiesen sind.totalDurationist die Gesamtdauer, die für die Ausführung der Routen der Fahrzeuge erforderlich ist.travelDistanceMetersist die Gesamtstrecke, die die Fahrzeuge während der Ausführung ihrer Routen zurücklegen.maxLoadsordnet Lasttypen der maximalen Lastmenge zu, die die Fahrzeuge zu einem beliebigen Zeitpunkt auf ihren Routen befördern.
Ein Beispiel für eine Metrics-Nachricht sieht so aus:
{
"routes": [
...
],
"metrics": {
"aggregatedRouteMetrics": {
"performedShipmentCount": 1,
"travelDuration": "2322s",
"waitDuration": "0s",
"delayDuration": "0s",
"breakDuration": "0s",
"visitDuration": "0s",
"totalDuration": "2322s",
"travelDistanceMeters": 18603
},
"usedVehicleCount": 1,
"earliestVehicleStartTime": "2024-02-13T00:00:00Z",
"latestVehicleEndTime": "2024-02-13T00:38:42Z",
"totalCost": 18.603,
"costs": {
"model.vehicles.cost_per_kilometer": 18.603
}
}
}
Vollständiges Beispiel
Eine vollständige Beispielantwort für die Anfrage unter Anfrage erstellen sieht so aus:
{
"routes": [
{
"vehicleStartTime": "2024-02-13T00:00:00Z",
"vehicleEndTime": "2024-02-13T00:38:42Z",
"visits": [
{
"isPickup": true,
"startTime": "2024-02-13T00:00:00Z",
"detour": "0s"
},
{
"startTime": "2024-02-13T00:19:31Z",
"detour": "0s"
}
],
"transitions": [
{
"travelDuration": "0s",
"waitDuration": "0s",
"totalDuration": "0s",
"startTime": "2024-02-13T00:00:00Z"
},
{
"travelDuration": "1171s",
"travelDistanceMeters": 9004,
"waitDuration": "0s",
"totalDuration": "1171s",
"startTime": "2024-02-13T00:00:00Z"
},
{
"travelDuration": "1151s",
"travelDistanceMeters": 9599,
"waitDuration": "0s",
"totalDuration": "1151s",
"startTime": "2024-02-13T00:19:31Z"
}
],
"metrics": {
"performedShipmentCount": 1,
"travelDuration": "2322s",
"waitDuration": "0s",
"delayDuration": "0s",
"breakDuration": "0s",
"visitDuration": "0s",
"totalDuration": "2322s",
"travelDistanceMeters": 18603
},
"routeCosts": {
"model.vehicles.cost_per_kilometer": 18.603
},
"routeTotalCost": 18.603
}
],
"metrics": {
"aggregatedRouteMetrics": {
"performedShipmentCount": 1,
"travelDuration": "2322s",
"waitDuration": "0s",
"delayDuration": "0s",
"breakDuration": "0s",
"visitDuration": "0s",
"totalDuration": "2322s",
"travelDistanceMeters": 18603
},
"usedVehicleCount": 1,
"earliestVehicleStartTime": "2024-02-13T00:00:00Z",
"latestVehicleEndTime": "2024-02-13T00:38:42Z",
"totalCost": 18.603,
"costs": {
"model.vehicles.cost_per_kilometer": 18.603
}
}
}