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 OptimizeToursResponse
-Nachricht (REST, gRPC) hat zwei Haupteigenschaften auf oberster Ebene:
routes[]
sind die Routen für die einzelnen Fahrzeuge mit den zugewiesenen Sendungen. JederRoute
enthält Messwerte, die die Eigenschaften der jeweiligen Route widerspiegeln.metrics
sind aggregierte Messwerte für die gesamte Antwort über alle Fahrzeuge und Routenpläne hinweg. Messwerte der obersten Ebene enthalten dieselben Eigenschaften wie Messwerte pro Route, wobei die Werte über alle Routen hinweg aggregiert werden.
Einige Properties werden je nach Optimierungsergebnissen möglicherweise nicht immer ausgefüllt:
skippedShipments[]
listet Sendungen auf, die nicht von einem 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 für die Abholung oder Zustellung einer Sendung ein sehr engestimeWindow
festgelegt ist, 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 nicht behoben werden können, wennsolvingMode
der Anfrage aufVALIDATE_ONLY
festgelegt ist. Im normalenDEFAULT_SOLVE
-Modus werden Validierungsfehler in einer Fehlermeldung anstelle des Antworttexts angezeigt. ImVALIDATE_ONLY
-Modus können mehrere Fehler gleichzeitig gemeldet werden. Das ist nützlich, um Anfragen schnell zu debuggen.
Routeneigenschaften
Jeder routes[]
-Eintrag ist eine ShipmentRoute
-Nachricht (REST, gRPC). Jedes ShipmentRoute
-Objektliteral stellt die Routenzuweisung für ein bestimmtes Fahrzeug aus der Anfrage dar. Wichtige ShipmentRoute
-Eigenschaften, die sich auf die entsprechende Vehicle
beziehen, sind:
vehicleIndex
ist der nullbasierte Index vonVehicle
in der entsprechenden Anfragenachricht. In REST-Antworten wird diese Eigenschaft weggelassen, wenn der Wert null ist.vehicleStartTime
ist die Zeit, zu der das Fahrzeug mit der Fahrt beginnen muss.vehicleEndTime
ist die Zeit, zu der das Fahrzeug seine Route voraussichtlich beendet.
In einer Antwort sieht routes
so aus:
{
"routes": [
{
"vehicleStartTime": "2024-02-13T00:00:00Z",
"vehicleEndTime": "2024-02-13T00:38:42Z",
"visits": [
...
],
"transitions": [
...
],
"metrics": {
...
},
...
}
],
...
}
Jeder ShipmentRoute
enthält eine geordnete Liste von visits
, die das Fahrzeug ausführen wird. Jeder Visit
(REST, gRPC) steht für eine VisitRequest
(REST, gRPC) aus der entsprechenden Anfrage. Wichtige Visit
-Eigenschaften sind:
shipmentIndex
ist der nullbasierte Index der Sendung, zu der dieser Besuch in der entsprechenden Anfrage gehört.isPickup
ist „true“, wenn es sich bei einem Besuch um eine Abholung handelt, und „false“, wenn es sich um eine Lieferung handelt. In REST-Antworten wird diese Eigenschaft ausgelassen, wenn der Wert „false“ ist.visitRequestIndex
ist der nullbasierte Index desVisitRequest
ausShipment.pickups
oderShipment.deliveries
in der entsprechenden Anfrage, die vonVisit
dargestellt wird. In REST-Antworten wird dieses Attribut ausgelassen, wenn der Wert null ist.startTime
ist die Uhrzeit, zu der der Besuch voraussichtlich beginnt.loadDemands
ordnet den Lasttyp der erforderlichen Lastmenge zu, um dieVisit
abzuschließen. Die Lademengen sind für Lieferbesuche negativ, da sie die aus dem Fahrzeug entfernte Ladung darstellen.
Ein Beispiel für Visit
:
{
"routes": [
{
...
"visits": [
{
"isPickup": true,
"startTime": "2024-02-13T00:00:00Z",
"detour": "0s"
},
...
],
},
...
],
...
}
Jeder ShipmentRoute
enthält eine geordnete Liste von transitions
, die die Fahrt zwischen visits
für ein bestimmtes Fahrzeug darstellen. Wichtige Transition
-Nachrichtenattribute (REST, gRPC) sind:
startTime
ist der Zeitpunkt, zu dem das Fahrzeug mit dem Übergang beginnt.travelDuration
ist die Dauer, die das Fahrzeug benötigt, 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 Verkehrsdaten für den Übergang verfügbar sind.waitDuration
steht für die Leerlaufzeit, die das Fahrzeug wartet, bevor es mit dem nächstenVisit
beginnen kann. Das kann folgende Ursachen haben:start_time
Visit
totalDuration
ist die Gesamtdauer des Übergangs, einschließlich Reise-, Warte-, Pausen- und Verzögerungszeiten.vehicleLoads
ordnet den Lasttyp dem Lastgewicht zu, das vom Fahrzeug während dieses Übergangs transportiert wird.
Ein Beispiel für Transition
:
{
"routes": [
{
...
"transitions": [
...
{
"travelDuration": "1171s",
"travelDistanceMeters": 9004,
"waitDuration": "0s",
"totalDuration": "1171s",
"startTime": "2024-02-13T00:00:00Z"
},
...
],
...
}
],
...
}
Weitere Informationen zum Verhältnis zwischen vists
und transitions
finden Sie unter Optimierung der Reihenfolge von Abhol- und Lieferstopps und in der Referenzdokumentation zu ShipmentRoute
(REST, gRPC). Weitere Informationen zu den Attributen routePolyline
und routeToken
einer Transition
-Nachricht finden Sie unter Übergangspolylinien und Routentokens.
Messwerteigenschaften
Die Metrics
-Nachricht (REST, gRPC) fasst die gesamte Lösung zusammen.
Einige wichtige Metrics
-Attribute sind:
totalCost
sind die Gesamtkosten, die für die Durchführung der Routen angefallen sind. 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 das Optimierungstool feststellt, dass ihre Verwendung nicht erforderlich ist.skippedMandatoryShipmentCount
ist die Anzahl der übersprungenen Sendungen, die „erforderlich“ sind. Bei einer obligatorischen Sendung wird keinepenaltyCost
angegeben, die anfällt, wenn die Sendung übersprungen wird. Pflichtlieferungen können weiterhin ü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
-Meldungen (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
in der OptimizeToursResponse
aggregiert werden. Jede ShipmentRoute.metrics
-Property enthält Messwerte für die jeweilige ShipmentRoute
.
Wichtige AggregatedMetrics
-Eigenschaften sind:
performedShipmentCount
ist die Anzahl der Sendungen, die von Fahrzeugen auf ihren gesamten Routen durchgeführt wurden.travelDuration
ist die Gesamtzeit, die die Fahrzeuge während der Routen zurücklegen.waitDuration
ist die Gesamtzeit, die die Fahrzeuge während der Routen zurücklegen.delayDuration
ist die gesamte Verzögerungszeit für die Fahrzeuge. Dieser Wert ist in der Regel null, sofern in der Anfrage keineTransitionAttributes
verwendet werden.breakDuration
ist die Gesamtzeit, die die Fahrzeuge während der Routen in Pausen verbringen.visitDuration
ist die Gesamtzeit, die die Fahrzeuge für Besuche aufwenden, während sie ihre Routen absolvieren. Dies ist im Grunde die Summe allerVisitRequest.duration
-Werte fürVisitRequest
, die denVisit
entsprechen, die dem entsprechenden Fahrzeug zugewiesen sind.totalDuration
ist die Gesamtdauer, die für die Routen der Fahrzeuge erforderlich ist.travelDistanceMeters
ist die Gesamtstrecke, die die Fahrzeuge auf ihren Routen zurückgelegt haben.maxLoads
ordnet Ladungstypen der maximalen Ladungsmenge zu, die von den Fahrzeugen zu einem beliebigen Zeitpunkt auf ihren Routen transportiert wird.
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 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
}
}
}