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. JederRouteenthält Messwerte, die die Eigenschaften der jeweiligen Route widerspiegeln.metricssind 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[]enthält Sendungen, 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 engestimeWindowfestgelegt 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 oder unlösbar machen, wennsolvingModeder Anfrage aufVALIDATE_ONLYfestgelegt 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:
vehicleIndexist der nullbasierte Index desVehiclein der entsprechenden Anfragenachricht. In REST-Antworten wird diese Eigenschaft weggelassen, wenn der Wert null ist.vehicleStartTimeist die Zeit, zu der das Fahrzeug mit der Fahrt beginnen muss.vehicleEndTimeist der Zeitpunkt, zu dem 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. Jedes Visit (REST, gRPC) steht für ein VisitRequest (REST, gRPC) aus der entsprechenden Anfrage. Wichtige Visit-Eigenschaften sind:
shipmentIndexist der nullbasierte Index der Sendung, zu der dieser Besuch in der entsprechenden Anfrage gehört.isPickupist „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 weggelassen, wenn der Wert „false“ ist.visitRequestIndexist der nullbasierte Index desVisitRequestausShipment.pickupsoderShipment.deliveriesin der entsprechenden Anfrage, die vonVisitdargestellt wird. In REST-Antworten wird dieses Attribut weggelassen, wenn der Wert null ist.startTimeist die Uhrzeit, zu der der Besuch voraussichtlich beginnt.loadDemandsordnet den Lasttyp der Lastmenge zu, die zum Ausführen vonVisiterforderlich ist. Die Lademengen sind bei Lieferbesuchen negativ, da die Ladung aus dem Fahrzeug entfernt wird.
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-Nachrichteneigenschaften (REST, gRPC) sind:
startTimeist der Zeitpunkt, zu dem das Fahrzeug mit dem Übergang beginnt.travelDurationist die Dauer, die das Fahrzeug benötigt, um die Umstellung abzuschließen.travelDistanceMetersist die Entfernung in Metern, die das Fahrzeug zurücklegen muss, um den Übergang abzuschließen.trafficInfoUnavailablegibt an, ob Verkehrsdaten für den Übergang verfügbar sind.waitDurationsteht für die Leerlaufzeit, die das Fahrzeug mit Warten verbringt, bevor es mit dem nächstenVisitbeginnen kann. Das kann folgende Ursachen haben:start_timeVisittotalDurationist die Gesamtdauer des Übergangs, einschließlich Reise-, Warte-, Pausen- und Verzögerungszeiten.vehicleLoadsordnet 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:
totalCostsind die Gesamtkosten, die für die Durchführung der Routen angefallen sind. Weitere Informationen zu Kosten finden Sie unter Kostenmodellparameter.usedVehicleCountist 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.skippedMandatoryShipmentCountist die Anzahl der übersprungenen Sendungen, die „erforderlich“ sind. Bei einer obligatorischen Sendung wird keinepenaltyCostangegeben, 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:
performedShipmentCountist die Anzahl der Sendungen, die von Fahrzeugen auf ihren gesamten Routen durchgeführt wurden.travelDurationist die Gesamtzeit, die die Fahrzeuge während der Routen zurücklegen.waitDurationist die Gesamtzeit, die die Fahrzeuge während der Routen zurücklegen.delayDurationist die Gesamtverzögerungszeit für die Fahrzeuge. Dieser Wert ist in der Regel null, sofern in der Anfrage keineTransitionAttributesverwendet werden.breakDurationist die Gesamtzeit, die die Fahrzeuge während der Routen in Pausen verbringen.visitDurationist die Gesamtzeit, die die Fahrzeuge für Besuche während der Routen aufwenden. Dies ist im Grunde die Summe allerVisitRequest.duration-Werte fürVisitRequest, die denVisitentsprechen, die dem entsprechenden Fahrzeug zugewiesen sind.totalDurationist die Gesamtdauer, die für die Routen der Fahrzeuge erforderlich ist.travelDistanceMetersist die Gesamtstrecke, die die Fahrzeuge auf ihren Routen zurückgelegt haben.maxLoadsordnet Lasttypen der maximalen Lastmenge zu, die von den Fahrzeugen zu einem beliebigen Zeitpunkt auf ihren Routen transportiert wird.
Eine Beispielnachricht für Metrics 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
}
}
}