In diesem Beispiel wird gezeigt, wie Sie Kostenparameter verwenden, um eine kostengünstige Route zu erhalten.
Eine vollständige konzeptionelle Übersicht finden Sie im Dokument Cost Model Key Concept (Schlüsselkonzept des Kostenmodells).
Beispielanfrage
Im folgenden Beispiel wird ein Szenario veranschaulicht, in dem ein Fahrzeug drei Sendungen ausliefern muss. Für das Fahrzeug fallen Kosten für Zeit und Entfernung an und für jede Lieferung wird eine penaltyCost berechnet, wenn die Lieferung übersprungen wird.
Diese Beispielanfrage enthält die folgenden kostenbezogenen Parameter:
shipments[0]mit einempenaltyCostvon 100,0.shipments[1]mit einerpenaltyCostvon 5,0.shipments[2]mit einempenaltyCostvon 50,0.vehicles[0]mit einemcostPerHourvon 40,0 und einemcostPerKilometervon 10,0.
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 } ] } }
Beispielantwort
Die Antwort zeigt, dass der Optimierer eine Route erstellt, mit der zwei der drei Sendungen ausgeführt werden. Die dritte Sendung wird übersprungen, da ihr penaltyCost niedriger ist als die berechneten Fahrzeugkosten für die Abholung und Lieferung.
Antwort auf die Beispielanfrage 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 den folgenden Feldern sehen Sie, wie die Kosten in der Antwort berechnet werden:
routeCostsschlüsselt die Betriebskosten für eine bestimmte Route auf, die in diesem Fall so aussehen:model.vehicles.cost_per_kilometer: 33.53.model.vehicles.cost_per_hour: 18,91.
- Der
routeTotalCost(52,44 €) ist die Summe der Kosten, die inrouteCostsaufgeführt sind. - Auf der obersten Ebene der Antwort fasst das
costs-Objekt alle in der Lösung anfallenden Kosten zusammen. Dazu gehören die Betriebskosten aller Fahrzeugrouten sowie alle Strafen, z. B. diemodel.shipments.penalty_cost(5.0) für die übersprungene Lieferung. - Der endgültige Wert
totalCost(57,44) ist die Gesamtsumme für die Lösung, also die Summe derrouteTotalCostfür alle Fahrzeuge und aller Strafkosten. In diesem Fall ist es 52,44 + 5,0.