Die OptimizeToursRequest
-Nachricht (REST, gRPC) enthält eine Reihe von Eigenschaften im Zusammenhang mit Kosten. Zusammen bilden diese Kostenparameter das Kostenmodell der Anfrage. Das Kostenmodell erfasst viele der allgemeinen Optimierungsziele der Anfrage, z. B.:
- Schnellere
Vehicle
-Routen vor 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 nur innerhalb von Zeitfenstern durchführen, wenn dies kostengünstig 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
Kosteneigenschaften
Die Vehicle
-Nachricht (REST, gRPC) hat mehrere Kosteneigenschaften:
Vehicle.cost_per_hour
: Die Kosten für den Betrieb eines Fahrzeugs pro Stunde, einschließlich Fahrt-, Warte-, Besuchs- und Pausenzeiten.Vehicle.cost_per_kilometer
: Die Kosten pro Kilometer, den das Fahrzeug zurücklegt.Vehicle.cost_per_traveled_hour
: Gibt die Kosten für den Betrieb eines Fahrzeugs nur während der Fahrt an, ausgenommen Warte-, Besuchs- und Pausenzeiten.
Mit diesen Kostenparametern kann der Optimierer Kompromisse zwischen Zeit und zurückgelegter Strecke eingehen. Die Kosten für die optimierte Route werden in der Antwortnachricht als metrics.costs
angezeigt:
Wenn costPerHour
steigt, versucht der Optimierer, schnellere Routen zu finden, die nicht unbedingt die kürzesten sind. In diesem Beispiel ist die schnellste Route auch die kürzeste, sodass Änderungen an den Kostenparametern nur wenig Auswirkungen haben.
Shipment
Kosteneigenschaften
Die Shipment
-Nachricht (REST, gRPC) hat auch mehrere Kostenparameter:
Shipment.penalty_cost
entspricht den Kosten, die durch das Überspringen der Sendung entstehen.Shipment.VisitRequest.cost
steht für die Kosten einer bestimmten Abholung oder Lieferung. Dieses Attribut wird hauptsächlich verwendet, um Kostenvergleiche 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 Ausführung einer Shipment
die Kostenpauschale übersteigen, ist die Shipment
nicht in der Route einer Vehicle
enthalten und wird stattdessen in der Antwortnachricht in der Liste skipped_shipments
aufgeführt.
ShipmentModel
Kosteneigenschaften
Die ShipmentModel
-Nachricht (REST, gRPC) enthält eine einzelne Kosteneigenschaft, globalDurationCostPerHour
. Diese Kosten beruhen auf der Gesamtzeit, die für die Durchführung der ShipmentRoute
für alle Fahrzeuge erforderlich ist. Wenn Sie globalDurationCostPerHour
erhöhen, werden alle Sendungen früher abgeschlossen.
Eigenschaften für Antwortkosten bei Routenoptimierung
Die OptimizeToursResponse
-Nachricht (REST, gRPC) enthält Kosteneigenschaften, die die Kosten für die Ausführung von ShipmentRoute
s darstellen.
Die Eigenschaften metrics.costs
und metrics.totalCost
geben die Anzahl der Kosteneinheiten an, die für alle Routen in der Antwort angefallen sind. Jeder routes
-Eintrag hat die Eigenschaften routeCosts
und routeTotalCosts
, die die Kosten für diese Route darstellen.
Beispielantwort mit Kosten ansehen
{ "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
entspricht den Kosten, die durch übersprungene Sendungen entstanden sind. In der Property skippedShipments
werden die übersprungenen Sendungen aufgeführt.
In diesem Beispiel wird nur model.shipments[1]
in der Beispielanfrage übersprungen.
model.shipments[1]
hat eine Strafgebühr von 5 Einheiten, was dem Schlüssel „total“model.shipments.penalty_cost
in der Beispielantwort entspricht. Da der Wert für penaltyCost
der Sendung im Vergleich zu den 40,0 costPerHour
und 10,0 costPerKilometer
der Vehicle
niedrig ist, ist es kostengünstiger, die Sendung zu überspringen, als sie abzuschließen.
Fortgeschrittenes Thema: Kosten und weiche Einschränkungen
Mehrere Eigenschaften von OptimizeToursRequest
-Nachrichten (REST, gRPC) stellen weiche Einschränkungen dar. Das sind Einschränkungen, die Kosten verursachen, wenn sie nicht erfüllt werden.
Beispiel: Fahrzeugeinschränkungen vom Typ LoadLimit
(REST, gRPC) haben die Properties 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 Kostengründen sinnvoll ist.
Ähnlich haben TimeWindow
-Einschränkungen (REST, gRPC) soft_start_time
- und soft_end_time
-Properties mit entsprechenden cost_per_hour_before_soft_start_time
- und cost_per_hour_after_soft_end_time
-Werten, die je nachdem, wie früh oder spät das eingeschränkte Ereignis im Verhältnis zur TimeWindow
eintritt, anfallen.
Wie alle Parameter des Kostenmodells werden die Kosten für weiche Einschränkungen in denselben dimensionslosen Einheiten wie andere Kostenparameter ausgedrückt.
LoadLimit
-Einschränkungen werden unter Anforderungen und Limits für die Auslastung ausführlich behandelt. TimeWindow
-Einschränkungen werden unter Einschränkungen für Zeitfenster für Abholung und Lieferung ausführlich behandelt.