Die Route Optimization API gibt Routen für Fahrzeuge in der entsprechenden Anfrage zurück. Lieferungen sind Fahrzeugen zugewiesen oder können je nach Eigenschaften der Anfrage übersprungen werden.
Eine OptimizeToursResponse
-Nachricht (REST, gRPC) hat zwei Haupteigenschaften auf oberster Ebene:
routes[]
sind die Routen für jedes Fahrzeug mit den zugewiesenen Sendungen. JedeRoute
enthält Messwerte, die die Attribute der jeweiligen Route widerspiegeln.metrics
sind zusammengefasste Messwerte für die gesamte Antwort für alle Fahrzeuge und Routenpläne. Messwerte der obersten Ebene enthalten dieselben Eigenschaften wie Messwerte pro Route, wobei Werte für alle Routen aggregiert werden.
Einige Properties werden je nach Optimierungsergebnissen möglicherweise nicht immer ausgefüllt:
skippedShipments[]
listet Lieferungen auf, die von keinem Fahrzeug durchgeführt werden. Eine Sendung kann übersprungen werden, wenn sie nicht innerhalb der angegebenen Einschränkungen ausgeführt werden kann oder die Kosten für die Lieferung die Strafkosten überschreiten. Wenn z. B. die Abholung oder Lieferung einer Sendung einen sehr engentimeWindow
hat, ist es unter Umständen nicht möglich oder kostengünstig, den Besuch während des erforderlichen Zeitfensters von einem Fahrzeug durchzuführen.validationErrors[]
gibt Fehler an, die dazu führen, dass die Anfrage ungültig oder nicht gelöst werden kann, wenn dersolvingMode
der Anfrage aufVALIDATE_ONLY
festgelegt ist. Im normalenDEFAULT_SOLVE
-Modus werden Validierungsfehler in einer Fehlermeldung statt im Antworttext angezeigt. Im LösungsmodusVALIDATE_ONLY
können mehrere Fehler gleichzeitig gemeldet werden, was für die schnelle Fehlerbehebung von Anfragen hilfreich ist.
Routenattribute
Jeder routes[]
-Eintrag ist eine ShipmentRoute
-Nachricht (REST, gRPC). Jede ShipmentRoute
stellt die Routenzuweisung für ein bestimmtes Fahrzeug aus der Anfrage dar. Zu den wichtigen ShipmentRoute
-Properties im Zusammenhang mit der entsprechenden Vehicle
gehören:
vehicleIndex
ist der nullbasierte Index vonVehicle
in der entsprechenden Anfragenachricht. Bei REST-Antworten wird dieses Attribut weggelassen, wenn der Wert null ist.vehicleStartTime
ist die Zeit, zu der das Fahrzeug seine Route beginnen muss.vehicleEndTime
gibt die Zeit an, zu der das Fahrzeug voraussichtlich seine Route beenden soll.
In der 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 von visits
, die das Fahrzeug ausführen wird. Jede Visit
(REST, gRPC) stellt eine VisitRequest
(REST, gRPC) aus der entsprechenden Anfrage dar. Zu den wichtigen Visit
-Attributen gehören:
shipmentIndex
ist der nullbasierte Index der Sendung, zu der dieser Besuch in der entsprechenden Anfrage gehört.isPickup
ist „true“, wenn ein Besuch ein Abholort ist, und „false“, wenn ein Besuch eine Auslieferung ist. Bei REST-Antworten wird dieses Attribut weggelassen, wenn der Wert „false“ ist.visitRequestIndex
ist der nullbasierte Index vonVisitRequest
ausShipment.pickups
oderShipment.deliveries
in der entsprechenden Anfrage, dieVisit
darstellt. Bei REST-Antworten wird dieses Attribut weggelassen, wenn der Wert null ist.startTime
ist die Zeit, zu der der Besuch voraussichtlich beginnen wird.loadDemands
ordnet den Ladetyp zu, um die zum Ausführen desVisit
erforderliche Lademenge zu laden. Die Lastenwerte sind für Lieferbesuche negativ und stellen die Last dar, die vom Fahrzeug entfernt wird.
Ein Visit
-Beispiel sieht so aus:
{
"routes": [
{
...
"visits": [
{
"isPickup": true,
"startTime": "2024-02-13T00:00:00Z",
"detour": "0s"
},
...
],
},
...
],
...
}
Jede ShipmentRoute
enthält eine geordnete Liste von transitions
, die Fahrten zwischen visits
für ein bestimmtes Fahrzeug darstellen. Zu den wichtigen Attributen der Transition
-Nachricht (REST, gRPC) gehören:
startTime
ist die Zeit, zu der das Fahrzeug mit der Umstellung beginnt.travelDuration
ist die Dauer, die das Fahrzeug für die Umstellung fahren muss.travelDistanceMeters
ist die Strecke in Metern, die das Fahrzeug für die Umstellung zurücklegen muss.trafficInfoUnavailable
gibt an, ob für die Umstellung Verkehrsdaten verfügbar sind.waitDuration
steht für die Leerlaufzeit, die ein Fahrzeug wartet, bevor es den nächstenVisit
starten kann. Dieser kann aufgrund derstart_time
der folgendenVisit
anfallen.totalDuration
ist die Gesamtdauer des Übergangs, einschließlich Fahrt-, Wartezeit-, Pausen- und Verspätungszeiten.vehicleLoads
ordnet den Ladetyp den Lasten zu, die das Fahrzeug während dieses Übergangs transportiert.
Ein Transition
-Beispiel sieht so aus:
{
"routes": [
{
...
"transitions": [
...
{
"travelDuration": "1171s",
"travelDistanceMeters": 9004,
"waitDuration": "0s",
"totalDuration": "1171s",
"startTime": "2024-02-13T00:00:00Z"
},
...
],
...
}
],
...
}
Die Beziehung zwischen vists
und transitions
wird unter Optimierung von Abhol- und Lieferstopps sowie in der ShipmentRoute
-Referenzdokumentation (REST, gRPC) beschrieben.
Messwertattribute
Die Metrics
-Nachricht (REST, gRPC) fasst die gesamte Lösung zusammen.
Einige wichtige Metrics
-Properties sind:
totalCost
sind die Gesamtkosten, die bei der Durchführung der Routen anfallen. 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 die Optimierung feststellt, dass ihre Verwendung nicht erforderlich ist.skippedMandatoryShipmentCount
gibt die Anzahl der übersprungenen Sendungen an, die „erforderlich“ sind. Eine obligatorische Sendung gibt keinepenaltyCost
an, die erhoben wird, wenn die Sendung übersprungen wird. Obligatorische Sendungen können trotzdem übersprungen werden, wenn ihre Leistung unter bestimmten Einschränkungen nicht realisierbar ist. Weitere Informationen zu Kosten finden Sie unter Kostenmodellparameter.
Zusätzliche Messwerte werden als AggregatedMetrics
-Nachrichten (REST, gRPC) gemeldet. Der Mitteilungstyp AggregatedMetrics
wird für die Property Metrics.aggregatedRouteMetrics
verwendet und für die Property ShipmentRoute.metrics
enthält Metrics.aggregatedRouteMetrics
Messwerte, die für alle ShipmentRoute
s in OptimizeToursResponse
zusammengefasst sind. Jedes ShipmentRoute.metrics
-Attribut enthält Messwerte für die jeweilige ShipmentRoute
.
Zu den wichtigen AggregatedMetrics
-Unterkünften gehören:
performedShipmentCount
ist die Anzahl der Lieferungen, die von Fahrzeugen auf ihren gesamten Routen ausgeführt werden.travelDuration
ist die Gesamtzeit, die die Fahrzeuge auf ihrer Route durchfahren.waitDuration
ist die Gesamtzeit, die die Fahrzeuge warten, während sie ihre Routen abschließen.delayDuration
ist die Gesamtverzögerungszeit für die Fahrzeuge. Dieser Wert ist normalerweise null, es sei denn,TransitionAttributes
werden in der Anfrage verwendet.breakDuration
ist die Gesamtzeit, die die Fahrzeuge beim Abfahren der Routen in den Pausen verbringen.visitDuration
gibt die Gesamtzeit an, die die Fahrzeuge für die Durchführung ihrer Routen aufwenden. Das ist effektiv die Summe allerVisitRequest.duration
-Werte fürVisitRequest
-Werte, die denVisit
-Werten entsprechen, die dem jeweiligen Fahrzeug zugewiesen sind.totalDuration
ist die Gesamtdauer, die für die Routen des Fahrzeugs erforderlich ist.travelDistanceMeters
ist die Gesamtstrecke, die die Fahrzeuge beim Abschließen ihrer Routen zurückgelegt haben.maxLoads
ordnet Ladetypen dem maximalen Ladevolumen zu, das die Fahrzeuge zu jedem Zeitpunkt auf ihren Routen mitnehmen.
Hier ein Beispiel für eine Metrics
-Nachricht:
{
"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 auf die Anfrage von 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
}
}
}