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. JedesRoute
enthält Messwerte, die die Eigenschaften dieser einzelnen 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. 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 Kostenpauschale übersteigen. Wenn beispielsweise die Abholung oder Zustellung einer Sendung einen sehr engentimeWindow
hat, 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, wennsolvingMode
der Anfrage aufVALIDATE_ONLY
festgelegt ist. Im normalenDEFAULT_SOLVE
-Modus werden Validierungsfehler in einer Fehlermeldung anstelle im Antworttext angezeigt. Hinweis: Im Lösungsmodus vonVALIDATE_ONLY
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:
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 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.visitRequestIndex
ist der nullbasierte Index derVisitRequest
ausShipment.pickups
oderShipment.deliveries
in der entsprechenden Anfrage, die dieVisit
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, in der das Fahrzeug fahren muss, um den Übergang abzuschließen.travelDistanceMeters
ist die Entfernung in Metern, die das Fahrzeug zurücklegen muss, um die Umstellung abzuschließen.trafficInfoUnavailable
gibt an, ob für die Umstellung Traffic-Daten verfügbar sind.waitDuration
steht für die Inaktivitätszeit, die das Fahrzeug verbringt, bevor es die nächsteVisit
starten kann. Das kann auf diestart_time
der folgendenVisit
zurückzuführen sein.totalDuration
ist die Gesamtdauer des Übergangs, einschließlich Fahrt-, Warte-, Pausen- und Verzögerungszeiten.vehicleLoads
ordnet 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:
totalCost
sind die Gesamtkosten für die Ausführung der Routen. Weitere Informationen zu Kosten finden Sie unter Parameter des Kostenmodells.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) 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 ShipmentRoute
s in der OptimizeToursResponse
aggregiert wurden. Jede ShipmentRoute.metrics
-Property enthält Messwerte für diese spezifische ShipmentRoute
.
Zu den wichtigen AggregatedMetrics
-Eigenschaften 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 für die Fahrten auf ihren Routen benötigen.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 Ladekapazitäten der maximalen Ladung zu, die die Fahrzeuge an jedem Punkt ihrer Routen befördern.
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 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
}
}
}