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 Eigenschaften sind je nach Optimierungsergebnissen möglicherweise nicht immer verfügbar:
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 erfolgen kann oder wenn die Kosten für den Versand 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 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. Jede 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 ausgelassen, 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 erforderlichen Lastmenge zu, um dieVisitabzuschließen. Die Lademengen sind für Lieferbesuche 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):
startTimeist der Zeitpunkt, zu dem das Fahrzeug mit der Umstellung beginnt.travelDurationist die Dauer, die das Fahrzeug benötigt, um die Übergangsphase abzuschließen.travelDistanceMetersist die Entfernung in Metern, die das Fahrzeug zurücklegen muss, um den Übergang abzuschließen.trafficInfoUnavailablegibt an, ob Traffic-Daten für die Umstellung verfügbar sind.waitDurationsteht für die Leerlaufzeit, die das Fahrzeug mit Warten verbringt, bevor es mit dem nächstenVisitbeginnen kann. Das kann folgendeVisitaufgrund vonstart_timehaben:totalDurationist die Gesamtdauer des Übergangs, einschließlich Reise-, Warte-, Pausen- und Verzögerungszeiten.vehicleLoadsordnet den Lasttyp der vom Fahrzeug während dieses Übergangs transportierten Lastmenge zu.
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 ShipmentRoute-Referenzdokumentation (REST, gRPC). Weitere Informationen zu den Attributen routePolyline und routeToken einer Transition-Nachricht finden Sie unter Übergangspolylinien und Routen-Tokens.
Messwerteigenschaften
Die Metrics-Nachricht (REST, gRPC) fasst die gesamte Lösung zusammen.
Einige wichtige Metrics-Attribute sind:
totalCostsind die Gesamtkosten für die Durchführung der Routen. Weitere Informationen zu Kosten finden Sie unter Parameter des Kostenmodells.usedVehicleCountist die Gesamtzahl der in der Lösung verwendeten Fahrzeuge. Fahrzeuge haben möglicherweise leere Routen, wenn der Optimierer feststellt, dass ihre Verwendung nicht erforderlich ist.skippedMandatoryShipmentCountist die Anzahl der übersprungenen Sendungen, die „obligatorisch“ 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 Parameter des Kostenmodells.
Zusätzliche Messwerte werden als AggregatedMetrics-Nachrichten (REST, gRPC) gemeldet. Der Nachrichtentyp AggregatedMetrics wird für die Property Metrics.aggregatedRouteMetrics verwendet. Die Property ShipmentRoute.metrics 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:
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 benötigen. Dies ist im Grunde die Summe allerVisitRequest.duration-Werte fürVisitRequests, die denVisits 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 dem maximalen Ladungsgewicht zu, das die Fahrzeuge zu einem beliebigen Zeitpunkt auf ihren Routen transportieren.
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
}
}
}