Die OptimizeToursRequest
-Nachricht (REST, gRPC) enthält eine Reihe von Eigenschaften, die sich auf Kosten beziehen. Zusammen bilden diese Kostenparameter das Kostenmodell der Anfrage. Das Kostenmodell berücksichtigt viele der übergeordneten Optimierungsziele der Anfrage, z. B.:
- Schnellere
Vehicle
-Routen gegenüber kürzeren Routen priorisieren oder umgekehrt - Entscheiden, ob die Kosten für die Bereitstellung einer
Shipment
den Wert der Fertigstellung derShipment
wert sind. - Abholungen und Lieferungen innerhalb von Zeitfenstern nur dann durchführen, wenn dies kosteneffizient ist
Beispielanfrage mit Kosten ansehen
{ "model": { "globalStartTime": "2023-01-13T16:00:00-08:00", "globalEndTime": "2023-01-14T16:00:00-08:00", "shipments": [ { "deliveries": [ { "arrivalLocation": { "latitude": 37.789456, "longitude": -122.390192 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 100.0 }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.789116, "longitude": -122.395080 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 5.0 }, { "deliveries": [ { "arrivalLocation": { "latitude": 37.795242, "longitude": -122.399347 }, "duration": "250s" } ], "pickups": [ { "arrivalLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "duration": "150s" } ], "penaltyCost": 50.0 } ], "vehicles": [ { "endLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "startLocation": { "latitude": 37.794465, "longitude": -122.394839 }, "costPerHour": 40.0, "costPerKilometer": 10.0 } ] } }
Vehicle
– Kostenattribute
Die Nachricht Vehicle
(REST, gRPC) hat mehrere Kostenattribute:
Vehicle.cost_per_hour
: Die Kosten für den Betrieb eines Fahrzeugs pro Stunde, einschließlich Fahr-, Warte-, Besuchs- und Pausenzeiten.Vehicle.cost_per_kilometer
: Die Kosten pro Kilometer, die das Fahrzeug zurückgelegt hat.Vehicle.cost_per_traveled_hour
: Die Kosten für den Betrieb eines Fahrzeugs nur während der Fahrt, ohne Warte-, Besuchs- und Pausenzeiten.
Mit diesen Kostenparametern kann der Optimierer Kompromisse zwischen Zeit und zurückgelegter Entfernung eingehen. Die Kosten für die optimierte Route werden in der Antwortnachricht als metrics.costs
angezeigt:
Wenn costPerHour
zunimmt, versucht der Optimierer, schnellere Routen zu finden, die möglicherweise nicht die kürzesten Routen sind. In diesem Beispiel ist die schnellste Route zufällig auch die kürzeste, sodass sich Änderungen an den Kostenparametern nur geringfügig auswirken.
Shipment
– Kostenattribute
Die Shipment
-Nachricht (REST, gRPC) hat auch mehrere Kostenparameter:
Shipment.penalty_cost
steht für die Kosten, die durch das Überspringen der Sendung entstehen. Wenn Sie denpenalty_cost
-Parameter einer Sendung nicht festlegen, ist die Sendung erforderlich. Das bedeutet, dass die Sendung nur übersprungen wird, wenn sie aufgrund der angegebenen Einschränkungen nicht abgeschlossen werden kann.Shipment.VisitRequest.cost
steht für die Kosten einer bestimmten Abholung oder Lieferung. Sie wird hauptsächlich verwendet, um Kostenabwägungen zwischen mehreren Abhol- oder Lieferoptionen für eine einzelne Sendung zu ermöglichen.
Für Shipment
-Kostenparameter werden dieselben dimensionslosen Einheiten wie für Vehicle
-Kostenparameter verwendet. Wenn die Kosten für die Durchführung von Shipment
die Strafkosten übersteigen, wird Shipment
nicht in die Route von Vehicle
aufgenommen, sondern in der Antwortnachricht in der Liste skipped_shipments
angezeigt.
ShipmentModel
– Kostenattribute
Die Nachricht ShipmentModel
(REST, gRPC) enthält die einzelne Kosten-Property globalDurationCostPerHour
. Diese Kosten fallen basierend auf der Gesamtzeit an, die alle Fahrzeuge für die Ausführung ihrer ShipmentRoute
benötigen. Wenn Sie globalDurationCostPerHour
erhöhen, werden alle Sendungen früher abgeschlossen.
Eigenschaften für Reaktionskosten für Route Optimization
Die OptimizeToursResponse
-Nachricht (REST, gRPC) enthält Kosteneigenschaften, die die Kosten darstellen, die bei der Ausführung von ShipmentRoute
s anfallen.
Die Attribute metrics.costs
und metrics.totalCost
geben die Anzahl der Kosten-Einheiten an, die für alle Routen in der Antwort angefallen sind. Jeder routes
-Eintrag hat die Attribute routeCosts
und routeTotalCosts
, die die Kosten für die jeweilige Route darstellen.
Antwort auf die Beispielanfrage mit Kosten
{ "routes": [ { "vehicleStartTime": "2023-01-14T00:00:00Z", "vehicleEndTime": "2023-01-14T00:28:22Z", "visits": [ { "isPickup": true, "startTime": "2023-01-14T00:00:00Z", "detour": "0s" }, { "shipmentIndex": 2, "isPickup": true, "startTime": "2023-01-14T00:02:30Z", "detour": "150s" }, { "startTime": "2023-01-14T00:08:55Z", "detour": "150s" }, { "shipmentIndex": 2, "startTime": "2023-01-14T00:21:21Z", "detour": "572s" } ], "transitions": [ { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-14T00:00:00Z" }, { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2023-01-14T00:02:30Z" }, { "travelDuration": "235s", "travelDistanceMeters": 795, "waitDuration": "0s", "totalDuration": "235s", "startTime": "2023-01-14T00:05:00Z" }, { "travelDuration": "496s", "travelDistanceMeters": 1893, "waitDuration": "0s", "totalDuration": "496s", "startTime": "2023-01-14T00:13:05Z" }, { "travelDuration": "171s", "travelDistanceMeters": 665, "waitDuration": "0s", "totalDuration": "171s", "startTime": "2023-01-14T00:25:31Z" } ], "metrics": { "performedShipmentCount": 2, "travelDuration": "902s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "800s", "totalDuration": "1702s", "travelDistanceMeters": 3353 }, "routeCosts": { "model.vehicles.cost_per_kilometer": 33.53, "model.vehicles.cost_per_hour": 18.911111111111111 }, "routeTotalCost": 52.441111111111113 } ], "skippedShipments": [ { "index": 1 } ], "metrics": { "aggregatedRouteMetrics": { "performedShipmentCount": 2, "travelDuration": "902s", "waitDuration": "0s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "800s", "totalDuration": "1702s", "travelDistanceMeters": 3353 }, "usedVehicleCount": 1, "earliestVehicleStartTime": "2023-01-14T00:00:00Z", "latestVehicleEndTime": "2023-01-14T00:28:22Z", "totalCost": 57.441111111111113, "costs": { "model.vehicles.cost_per_kilometer": 33.53, "model.vehicles.cost_per_hour": 18.911111111111111, "model.shipments.penalty_cost": 5 } } }
In der Beispielantwort sind die metrics.costs
der obersten Ebene:
{
"metrics": {
...
"costs": {
"model.vehicles.cost_per_hour": 18.911111111111111,
"model.vehicles.cost_per_kilometer": 33.53,
"model.shipments.penalty_cost": 5
}
}
}
Der Wert model.shipments.penalty_cost
steht für die Kosten, die durch übersprungene Sendungen entstanden sind. In der Property skippedShipments
wird aufgeführt, welche Sendungen übersprungen wurden.
In diesem Beispiel wird nur model.shipments[1]
in der Beispielanfrage übersprungen.
model.shipments[1]
hat Strafkosten von 5 Einheiten, was dem Gesamtschlüssel model.shipments.penalty_cost
in der Beispielantwort entspricht. Die niedrige penaltyCost
der Sendung im Vergleich zu den 40,0 costPerHour
und 10,0 costPerKilometer
des Vehicle
machen es kostengünstiger, die Sendung zu überspringen, als sie abzuschließen.
Erweitertes Thema: Kosten und weiche Einschränkungen
Mehrere OptimizeToursRequest
-Nachrichteneigenschaften (REST, gRPC) stellen weiche Einschränkungen dar. Das sind Einschränkungen, die Kosten verursachen, wenn sie nicht erfüllt werden können.
Die Einschränkungen für das Fahrzeug LoadLimit
(REST, gRPC) haben beispielsweise die Eigenschaften softMaxLoad
und costPerUnitAboveSoftMax
. Zusammen verursachen diese Kosten, die proportional zu den Lasteinheiten sind, die softMaxLoad
überschreiten. Das Limit kann also nur überschritten werden, wenn dies aus Kostensicht sinnvoll ist.
Ähnlich verhält es sich mit TimeWindow
-Einschränkungen (REST, gRPC). Sie haben die Eigenschaften soft_start_time
und soft_end_time
mit den entsprechenden cost_per_hour_before_soft_start_time
und cost_per_hour_after_soft_end_time
, die je nachdem anfallen, wie früh oder spät das eingeschränkte Ereignis in Bezug auf TimeWindow
eintritt.
Wie bei allen Parametern des Kostenmodells werden die Kosten für Soft Constraints in denselben dimensionslosen Einheiten wie andere Kostenparameter ausgedrückt.
LoadLimit
-Einschränkungen werden ausführlich unter Load Demands and Limits (Lastanforderungen und ‑limits) behandelt. TimeWindow
-Einschränkungen werden ausführlich unter Einschränkungen für Zeitfenster für Abholung und Lieferung behandelt.