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[]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 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 vonVehiclein der entsprechenden Anfragenachricht. In REST-Antworten wird diese Eigenschaft weggelassen, wenn der Wert null ist.vehicleStartTimeist die Uhrzeit, zu der das Fahrzeug mit der Fahrt beginnen muss.vehicleEndTimeist die Zeit, zu der das Fahrzeug voraussichtlich 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": {
...
},
...
}
],
...
}
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:
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 durchVisitdargestellt wird. In REST-Antworten wird dieses Attribut ausgelassen, wenn der Wert null ist.startTimeist die Uhrzeit, zu der der Besuch voraussichtlich beginnt.loadDemandsordnet den Lasttyp der erforderlichen Lastmenge zu, um dieVisitabzuschließen. Die Lademengen sind bei Lieferbesuchen 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-Nachrichteneigenschaften (REST, gRPC) sind:
startTimeist der Zeitpunkt, zu dem das Fahrzeug mit dem Übergang beginnt.travelDurationist die Dauer, die das Fahrzeug benötigt, um den Übergang abzuschließen.travelDistanceMetersist die Entfernung in Metern, die das Fahrzeug zurücklegen muss, um den Übergang abzuschließen.trafficInfoUnavailablegibt an, ob Verkehrsdaten für die Übergangsphase verfügbar sind.waitDurationsteht für die Leerlaufzeit, die das Fahrzeug wartet, 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 Zustellstopps 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 gesamte Verzö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 aufwenden, während sie ihre Routen absolvieren. Dies ist im Grunde die Summe allerVisitRequest.duration-Werte fürVisitRequest, die denVisit-Werten entsprechen, 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 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
}
}
}