Die Route Optimization 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. JedesRoute
enthält Messwerte, die die Eigenschaften der jeweiligen Route widerspiegeln.metrics
sind 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. Eine Sendung kann übersprungen werden, wenn sie nicht innerhalb der festgelegten Einschränkungen durchgeführt werden kann oder die Kosten für die Durchführung über die Strafgebühren hinausgehen. Wenn beispielsweise die Abholung oder Zustellung einer Sendung einen sehr engentimeWindow
hat, ist es für ein Fahrzeug möglicherweise nicht möglich oder kostengünstig, den Besuch innerhalb des erforderlichen Zeitfensters durchzuführen.validationErrors[]
gibt Fehler an, die die Anfrage ungültig machen oder deren Behebung unmöglich machen, wennsolvingMode
der Anfrage aufVALIDATE_ONLY
festgelegt ist. Im normalenDEFAULT_SOLVE
-Modus werden Validierungsfehler in einer Fehlermeldung anstelle im Antworttext angezeigt. 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
-Properties im Zusammenhang mit der zugehörigen Vehicle
gehören:
vehicleIndex
ist der nullbasierte Index derVehicle
in der entsprechenden Anfragenachricht. In REST-Antworten wird diese Eigenschaft weggelassen, wenn der Wert null ist.vehicleStartTime
ist die Uhrzeit, zu der das Fahrzeug seine Route beginnen muss.vehicleEndTime
ist 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:
shipmentIndex
ist der Index der Sendung, zu der dieser Besuch in der entsprechenden Anfrage gehört, beginnend mit 0.isPickup
ist „wahr“, wenn es sich bei einem Besuch um eine Abholung handelt, und „falsch“, wenn es sich um eine Lieferung handelt. In REST-Antworten wird diese Eigenschaft weggelassen, wenn der Wert „false“ ist.visitRequestIndex
ist der nullbasierte Index vonVisitRequest
ausShipment.pickups
oderShipment.deliveries
in der entsprechenden Anfrage, die dasVisit
darstellt. In REST-Antworten wird dieses Attribut weggelassen, wenn der Wert null ist.startTime
ist die voraussichtliche Uhrzeit des Besuchs.loadDemands
ordnet den Ladetyp der Lademenge zu, die zum Ausführen derVisit
erforderlich 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:
startTime
ist der Zeitpunkt, zu dem das Fahrzeug mit der Umstellung beginnt.travelDuration
ist die Dauer, während der das Fahrzeug fahren muss, um den Übergang abzuschließen.travelDistanceMeters
ist die Entfernung in Metern, die das Fahrzeug zurücklegen muss, um den Übergang abzuschließen.trafficInfoUnavailable
gibt an, ob für die Umstellung Traffic-Daten verfügbar sind.waitDuration
steht für die Leerlaufzeit, die das Fahrzeug wartet, bevor es in die nächsteVisit
-Phase starten kann. Dies kann aufgrund derstart_time
der folgendenVisit
geschehen.totalDuration
ist die Gesamtdauer des Übergangs, einschließlich Reise-, Warte-, Pausen- und Verspätungszeiten.vehicleLoads
ordnet den Ladetyp der Ladungsmenge zu, die das Fahrzeug während dieses Übergangs geladen hat.
Ein Transition
-Beispiel 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:
totalCost
sind die Gesamtkosten für die Ausführung der Routen. Weitere Informationen zu Kosten finden Sie unter Kostenmodellparameter.usedVehicleCount
ist 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.skippedMandatoryShipmentCount
ist die Anzahl der übersprungenen Sendungen, die „erforderlich“ sind. Für eine obligatorische Sendung wird keinpenaltyCost
angegeben, 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) gemeldet. 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 ShipmentRoute
s in der OptimizeToursResponse
aggregiert wurden. Jede ShipmentRoute.metrics
-Property enthält Messwerte für diese spezifische ShipmentRoute
.
Zu den wichtigen AggregatedMetrics
-Properties gehören:
performedShipmentCount
ist die Anzahl der Sendungen, die von Fahrzeugen auf ihren gesamten Routen ausgeführt werden.travelDuration
ist die Gesamtzeit, die die Fahrzeuge auf ihren Routen unterwegs sind.waitDuration
ist die Gesamtzeit, die die Fahrzeuge beim Durchfahren ihrer Routen warten.delayDuration
ist die Gesamtverzögerungszeit für die Fahrzeuge. Dieser Wert ist normalerweise null, es sei denn, in der Anfrage werdenTransitionAttributes
verwendet.breakDuration
ist die Gesamtzeit, die die Fahrzeuge während der Fahrten in Pausen verbringen.visitDuration
ist die Gesamtzeit, die die Fahrzeuge für Besuche auf ihren Routen aufwenden. Dies ist die Summe allerVisitRequest.duration
-Werte fürVisitRequest
s, die denVisit
s entsprechen, die dem betreffenden Fahrzeug zugewiesen sind.totalDuration
ist die Gesamtdauer, die für die Ausführung der Strecken der Fahrzeuge erforderlich ist.travelDistanceMeters
ist die Gesamtstrecke, die die Fahrzeuge bei der Ausführung ihrer Routen zurückgelegt haben.maxLoads
ordnet die Lasttypen dem maximalen Ladevolumen zu, das die Fahrzeuge an einem beliebigen Punkt auf ihren Routen tragen.
Eine Metrics
-Nachricht sieht beispielsweise 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 auf die Anfrage von Compose a Request 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
}
}
}