Die Routenoptimierungs-API gibt Routen für Fahrzeuge in der entsprechenden Anfrage zurück. Sendungen werden Fahrzeugen zugewiesen oder können je nach Eigenschaften der Anfrage übersprungen werden.
Eine OptimizeToursResponse-Nachricht (REST, gRPC) hat zwei Haupteigenschaften der obersten Ebene:
routes[]sind die Routen für jedes Fahrzeug mit den zugewiesenen Sendungen. JedesRouteenthält Messwerte, die die Eigenschaften dieser einzelnen Route widerspiegeln.metricssind aggregierte Messwerte für die gesamte Antwort, für alle Fahrzeuge und Routenpläne. Messwerte der obersten Ebene enthalten dieselben Properties wie Messwerte pro Route, wobei die Werte für alle Routen zusammengefasst werden.
Je nach Optimierungsergebnissen werden einige Properties möglicherweise nicht immer ausgefüllt:
skippedShipments[]enthält Sendungen, die nicht mit einem Fahrzeug durchgeführt werden. Ein Versand kann übersprungen werden, wenn er nicht innerhalb der angegebenen Einschränkungen durchgeführt werden kann oder wenn die Kosten für die Durchführung des Versands die Strafkosten übersteigen. Wenn beispielsweise die Abholung oder Zustellung einer Sendung einen sehr engentimeWindowhat, ist es möglicherweise nicht möglich oder kostengünstig, dass ein Fahrzeug den Besuch innerhalb des erforderlichen Zeitfensters durchführt.validationErrors[]gibt Fehler an, die die Anfrage ungültig machen oder deren Behebung unmöglich machen, wennsolvingModeder Anfrage aufVALIDATE_ONLYfestgelegt ist. Im normalenDEFAULT_SOLVE-Modus werden Validierungsfehler in einer Fehlermeldung anstelle im Antworttext angezeigt. Hinweis: ImVALIDATE_ONLY-Lösungsmodus können mehrere Fehler gleichzeitig gemeldet werden. Das ist nützlich, um Anfragen schnell zu beheben.
Routeneigenschaften
Jeder routes[]-Eintrag ist eine ShipmentRoute-Nachricht (REST, gRPC). Jedes ShipmentRoute steht für die Routenzuweisung für ein bestimmtes Fahrzeug aus der Anfrage. Zu den wichtigen ShipmentRoute-Eigenschaften, die sich auf die entsprechende Vehicle beziehen, gehören:
vehicleIndexist der nullbasierte Index derVehiclein der entsprechenden Anfragenachricht. In REST-Antworten wird diese Eigenschaft weggelassen, wenn der Wert null ist.vehicleStartTimeist die Uhrzeit, zu der das Fahrzeug seine Route beginnen muss.vehicleEndTimeist die voraussichtliche Zeit, zu der das Fahrzeug seine Route beendet.
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 sortierte Liste der visits, die das Fahrzeug zurücklegt. Jede Visit (REST, gRPC) entspricht einer VisitRequest (REST, gRPC) aus der entsprechenden Anfrage. Zu den wichtigen Visit-Eigenschaften gehören:
shipmentIndexist der Index der Sendung, zu der dieser Besuch in der entsprechenden Anfrage gehört, beginnend mit 0.isPickupist „wahr“, wenn es sich um einen Abholvorgang handelt, und „falsch“, wenn es sich um einen Liefervorgang handelt. In REST-Antworten wird diese Eigenschaft weggelassen, wenn der Wert „false“ ist.visitRequestIndexist der nullbasierte Index derVisitRequestausShipment.pickupsoderShipment.deliveriesin der entsprechenden Anfrage, die dieVisitdarstellt. In REST-Antworten wird dieses Attribut weggelassen, wenn der Wert null ist.startTimeist die voraussichtliche Uhrzeit des Besuchs.loadDemandsordnet den Ladetyp der Lademenge zu, die zum Ausführen derVisiterforderlich ist. Bei Zustellfahrten sind die Ladungsmengen negativ, was bedeutet, dass Ladung 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 sortierte Liste von transitions, die Fahrten zwischen visits für ein bestimmtes Fahrzeug darstellen. Zu den wichtigen Transition-Nachrichteneigenschaften (REST, gRPC) gehören:
startTimeist der Zeitpunkt, zu dem das Fahrzeug mit der Umstellung beginnt.travelDurationist die Dauer, während der das Fahrzeug fahren muss, um den Übergang abzuschließen.travelDistanceMetersist die Entfernung in Metern, die das Fahrzeug zurücklegen muss, um die Umstellung abzuschließen.trafficInfoUnavailablegibt an, ob für die Umstellung Traffic-Daten verfügbar sind.waitDurationsteht für die Inaktivitätszeit, die das Fahrzeug verbringt, bevor es die nächsteVisitstarten kann. Dies kann aufgrund derstart_timeder folgendenVisitgeschehen.totalDurationist die Gesamtdauer des Übergangs, einschließlich Fahrt-, Warte-, Pausen- und Verzögerungszeiten.vehicleLoadsordnet den Ladetyp der Ladungsmenge zu, die das Fahrzeug während dieses Übergangs geladen hat.
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 Abhol- und Lieferstoppreihenfolge und in der Referenzdokumentation zu ShipmentRoute (REST, gRPC). Weitere Informationen zu den Eigenschaften routePolyline und routeToken einer Transition-Nachricht finden Sie unter Übergangspolylinien und Routentokens.
Messwerteigenschaften
Die Metrics-Nachricht (REST, gRPC) fasst die gesamte Lösung zusammen.
Zu den wichtigen Metrics-Properties gehören:
totalCostsind die Gesamtkosten für die Ausführung der Routen. 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 Nutzung nicht erforderlich ist.skippedMandatoryShipmentCountist die Anzahl der übersprungenen Sendungen, die „erforderlich“ sind. Für eine obligatorische Sendung wird keinpenaltyCostangegeben, der anfällt, wenn die Sendung übersprungen wird. Erforderliche Sendungen können trotzdem übersprungen werden, wenn ihre Leistung unter den angegebenen Einschränkungen nicht möglich ist. Weitere Informationen zu Kosten finden Sie unter Kostenmodellparameter.
Zusätzliche Messwerte werden als AggregatedMetrics-Nachrichten (REST, gRPC) erfasst. Der Nachrichtentyp AggregatedMetrics wird für die Property Metrics.aggregatedRouteMetrics und für die Property ShipmentRoute.metrics verwendet. Metrics.aggregatedRouteMetrics enthält Messwerte, die für alle ShipmentRoutes in der OptimizeToursResponse aggregiert wurden. Jede ShipmentRoute.metrics-Property enthält Messwerte für diese spezifische ShipmentRoute.
Zu den wichtigen AggregatedMetrics-Eigenschaften gehören:
performedShipmentCountist die Anzahl der Sendungen, die von Fahrzeugen auf ihren gesamten Routen ausgeführt werden.travelDurationist die Gesamtzeit, die die Fahrzeuge für die Fahrten auf ihren Routen benötigen.waitDurationist die Gesamtzeit, die die Fahrzeuge beim Durchfahren ihrer Routen warten.delayDurationist die Gesamtverzögerungszeit für die Fahrzeuge. Dieser Wert ist normalerweise null, es sei denn, in der Anfrage werdenTransitionAttributesverwendet.breakDurationist die Gesamtzeit, die die Fahrzeuge während der Fahrten in Pausen verbringen.visitDurationist die Gesamtzeit, die die Fahrzeuge für Besuche auf ihren Routen aufwenden. Dies ist im Grunde die Summe allerVisitRequest.duration-Werte fürVisitRequests, die denVisits entsprechen, die dem betreffenden Fahrzeug zugewiesen sind.totalDurationist die Gesamtdauer, die für die Ausführung der Strecken der Fahrzeuge erforderlich ist.travelDistanceMetersist die Gesamtstrecke, die die Fahrzeuge bei der Ausführung ihrer Routen zurückgelegt haben.maxLoadsordnet Ladekapazitäten der maximalen Ladung zu, die die Fahrzeuge an jedem Punkt ihrer Routen befördern.
Eine Metrics-Beispielnachricht 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 aus Eine 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
}
}
}