Die Route Optimization API gibt Routen für Fahrzeuge in der entsprechenden Anfrage zurück. Lieferungen werden Fahrzeugen zugewiesen oder können je nach Eigenschaften der Anfrage übersprungen werden.
Eine OptimizeToursResponse
-Nachricht (REST, gRPC) hat zwei wichtige Eigenschaften 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 aggregierte Messwerte für die gesamte Antwort, unabhängig davon, ob es sich um Fahrzeuge und Routenpläne handelt. Messwerte auf oberster Ebene enthalten dieselben Attribute wie Messwerte für einzelne Routen. Die Werte werden für alle Routen aggregiert.
Einige Eigenschaften werden je nach Optimierungsergebnissen möglicherweise nicht immer ausgefüllt:
skippedShipments[]
listet Sendungen auf, die von keinem Fahrzeug durchgeführt werden. Eine Sendung kann übersprungen werden, wenn sie nicht innerhalb der festgelegten Einschränkungen durchgeführt werden kann oder die Kosten für die Durchführung über die Strafgebühren hinausgehen. Wenn beispielsweise dietimeWindow
für die Abholung oder Zustellung einer Sendung sehr schmal ist, ist es unter Umständen nicht möglich oder kostengünstig, den Besuch im erforderlichen Zeitfenster durchzuführen.validationErrors[]
gibt Fehler an, die dazu führen, dass die Anfrage ungültig oder nicht zu beheben ist, wennsolvingMode
der Anfrage aufVALIDATE_ONLY
gesetzt ist. Im normalenDEFAULT_SOLVE
-Modus werden Validierungsfehler in einer Fehlermeldung statt im Antworttext angezeigt. Beachten Sie, dass der Lösungsmodus vonVALIDATE_ONLY
mehrere Fehler gleichzeitig melden kann. Dies ist nützlich, um Anfragen schnell zu beheben.
Routeneigenschaften
Jeder routes[]
-Eintrag ist eine ShipmentRoute
-Nachricht (REST, gRPC). Jede ShipmentRoute
steht für die Routenzuweisung für ein bestimmtes Fahrzeug aus der Anfrage. Zu den wichtigen ShipmentRoute
-Properties im Zusammenhang mit der zugehörigen 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 der Zeitpunkt, zu dem das Fahrzeug mit seiner Route beginnen muss.vehicleEndTime
ist die Uhrzeit, zu der das Fahrzeug voraussichtlich seine Route beenden wird.
In einer 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 vervollständigt. Jede Visit
(REST, gRPC) stellt eine VisitRequest
(REST, gRPC) aus der entsprechenden Anfrage dar. Wichtige Visit
-Attribute sind:
shipmentIndex
ist der nullbasierte Index der Sendung, zu der dieser Besuch in der entsprechenden Anfrage gehört.isPickup
ist „true“, wenn ein Besuch eine Abholung ist, und „false“, wenn es sich bei einem Besuch um eine Lieferung handelt. REST-Antworten lassen dieses Attribut weg, wenn der Wert „false“ ist.visitRequestIndex
ist der nullbasierte Index vonVisitRequest
ausShipment.pickups
oderShipment.deliveries
in der entsprechenden Anfrage, die dasVisit
darstellt. REST-Antworten lassen dieses Attribut weg, wenn der Wert null ist.startTime
ist die Uhrzeit, zu der der Besuch voraussichtlich beginnen wird.loadDemands
ordnet den Ladetyp dem Ladevolumen zu, das zum Abschluss vonVisit
erforderlich ist. Die Ladungsbeträge sind bei Lieferbesuchen negativ und stellen die Ladung dar, die vom Fahrzeug abgenommen 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 die Fahrt zwischen visits
für ein bestimmtes Fahrzeug darstellen. Wichtige Attribute der Transition
-Nachricht (REST, gRPC) sind:
startTime
ist der Zeitpunkt, zu dem das Fahrzeug mit dem Wechsel beginnt.travelDuration
ist die Dauer, die das Fahrzeug für den Wechsel zurücklegen muss.travelDistanceMeters
ist die Entfernung in Metern, die das Fahrzeug zurücklegen muss, um den Übergang abzuschließen.trafficInfoUnavailable
gibt an, ob für die Umstellung Verkehrsdaten verfügbar sind.waitDuration
steht für die Leerlaufzeit, die das Fahrzeug wartet, bevor es in die nächsteVisit
-Phase starten kann. Dies kann an denstart_time
der folgendenVisit
liegen.totalDuration
ist die Gesamtdauer des Übergangs, einschließlich Reise-, Warte-, Pausen- und Verspätungszeiten.vehicleLoads
ordnet den Ladetyp dem Ladevolumen zu, das 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.
Messwerteigenschaften
Die Metrics
-Nachricht (REST, gRPC) fasst die gesamte Lösung zusammen.
Zu den wichtigen Metrics
-Properties gehören:
totalCost
sind die Gesamtkosten, die für die Fertigstellung 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 unnötig ist.skippedMandatoryShipmentCount
ist die Anzahl der übersprungenen Sendungen, die „obligatorisch“ sind. Bei einer obligatorischen Sendung ist keinepenaltyCost
angegeben, die beim Überspringen der Sendung entsteht. Obligatorische Sendungen können dennoch ü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 Nachrichtentyp AggregatedMetrics
wird für das Attribut Metrics.aggregatedRouteMetrics
verwendet und für das Attribut ShipmentRoute.metrics
Metrics.aggregatedRouteMetrics
enthält es Messwerte, die für alle ShipmentRoute
s im OptimizeToursResponse
aggregiert sind. Jedes ShipmentRoute.metrics
-Attribut enthält Messwerte für die jeweilige ShipmentRoute
.
Wichtige AggregatedMetrics
-Properties sind:
performedShipmentCount
ist die Anzahl der Sendungen, die von Fahrzeugen auf ihren gesamten Routen ausgeführt werden.travelDuration
ist die Gesamtzeit, die die Fahrzeuge während der Abfahrtszeit auf ihren Routen verbringen.waitDuration
ist die Gesamtzeit, die die Fahrzeuge beim Abschließen ihrer Routen warten.delayDuration
ist die Gesamtverzögerungszeit der Fahrzeuge. Dieser Wert ist in der Regel null, es sei denn, in der Anfrage werdenTransitionAttributes
verwendet.breakDuration
ist die Gesamtzeit, die ein Fahrzeug während der Abfahrt der Route in Pausen verbringt.visitDuration
ist die Gesamtzeit, die die Fahrzeuge während der Abfahrt der Route für Besuche aufwenden. Das ist die Summe allerVisitRequest.duration
-Werte fürVisitRequest
, die denVisit
s 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 auf ihren Routen zurücklegen.maxLoads
ordnet die Lasttypen dem maximalen Ladevolumen zu, das die Fahrzeuge an einem beliebigen Punkt auf ihren Routen tragen.
Eine Metrics
-Nachricht sieht beispielsweise 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 auf die Anfrage von Compose a Request 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
}
}
}