Komunikat OptimizeToursRequest
(REST, gRPC) zawiera pewną liczbę
właściwości powiązane z
koszty. Razem te parametry kosztu odpowiadają za żądanie
model kosztów. Model kosztów uwzględnia wiele ogólnych celów optymalizacji żądania, takich jak:
- priorytetem są szybsze
Vehicle
trasy, a nie krótsze, - Określanie, czy koszt wyświetlenia
Shipment
jest wart wartości UkończonoShipment
- Odbiór i dostawa w wyznaczonych przedziałach czasowych jest oszczędność
Zobacz przykładowe żądanie z kosztami
{ "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
właściwości kosztu
Komunikat Vehicle
(REST, gRPC) ma kilka właściwości kosztów:
Vehicle.cost_per_hour
: reprezentuje koszt prowadzenia pojazdu na godzinę. łącznie z transportem publicznym, czasem oczekiwania, wizytą i przerwami.Vehicle.cost_per_kilometer
: reprezentuje koszt przebytego kilometra przez w pojeździe.Vehicle.cost_per_traveled_hour
: reprezentuje koszt posiadania pojazdu tylko w transporcie publicznym, z wyłączeniem czasu oczekiwania, wizyt i przerwy.
Te parametry kosztów umożliwiają optymalizatorowi równanie czasu w zależności od przebytej odległości
kompromisów. Koszty poniesione przez zoptymalizowaną trasę pojawią się w odpowiedzi.
wiadomość jako metrics.costs
:
Gdy wartość costPerHour
rośnie, optymalizator próbuje znaleźć szybsze trasy
która może nie być najkrótszą trasą. W tym przykładzie najszybsza trasa przebiega
więc zmiany parametrów kosztu mają niewielki skutek.
Shipment
właściwości kosztu
Wiadomość Shipment
(REST, gRPC) zawiera też kilka parametrów kosztów:
Shipment.penalty_cost
to koszt poniesiony w wyniku pominiecia przesyłki.Shipment.VisitRequest.cost
przedstawia koszt konkretnego odbioru lub na dostawę, służący głównie do uzyskania zwrotu kosztów między wieloma odbiorami lub opcje dostawy w przypadku jednej przesyłki.
Parametry kosztu typu Shipment
korzystają z tych samych jednostek bezwymiarowych co koszt typu Vehicle
. Koszt poniesiony w całości Shipment
przekracza koszt kary,
Shipment
nie znajduje się na trasie żadnej z tras obsługiwanych przez: Vehicle
. Zamiast tego pojawia się w
skipped_shipments
w wiadomości z odpowiedzią.
ShipmentModel
właściwości kosztu
Komunikat ShipmentModel
(REST, gRPC) zawiera 1 koszt
usługa, globalDurationCostPerHour
. Koszt ten jest naliczany na podstawie łącznej
ile czasu potrzeba na ukończenie ShipmentRoute
przez wszystkie pojazdy. Rosnący
globalDurationCostPerHour
priorytetowo traktuje wcześniejszą realizację wszystkich dostaw.
Właściwości kosztu odpowiedzi w optymalizacji trasy
Komunikat OptimizeToursResponse
(REST, gRPC) zawiera właściwości kosztu, które reprezentują koszty poniesione w procesie wypełniania ShipmentRoute
.
Właściwości metrics.costs
i metrics.totalCost
wskazują liczbę
jednostki kosztów poniesione we wszystkich trasach w odpowiedzi. Każdy wpis routes
ma
Usługi routeCosts
i routeTotalCosts
, które odpowiadają za koszty tego
i konkretnej trasy.
Odpowiedź na przykładowe zgłoszenie z koszty
{ "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 } } }
W przykładowej odpowiedzi elementy najwyższego poziomu metrics.costs
to:
{
"metrics": {
...
"costs": {
"model.vehicles.cost_per_hour": 18.911111111111111,
"model.vehicles.cost_per_kilometer": 33.53,
"model.shipments.penalty_cost": 5
}
}
}
Wartość model.shipments.penalty_cost
reprezentuje koszty ponoszone w związku z
z pominiętymi przesyłkami. Właściwość skippedShipments
podaje, które przesyłki zostały
pominięto.
W tym przykładzie pominięto tylko parametr model.shipments[1]
w przykładowym żądaniu.
model.shipments[1]
ma koszt kary wynoszący 5 jednostek, co odpowiada łącznym kosztom kary
model.shipments.penalty_cost
w przykładowej odpowiedzi. Niski stan przesyłki
penaltyCost
w porównaniu z Vehicle
40.0 costPerHour
i 10.0
costPerKilometer
sprawiają, że pominięcie przesyłki jest tańsze niż
go wypełnić.
Temat dla zaawansowanych: koszty i ograniczenia miękkie
Niektóre właściwości wiadomości OptimizeToursRequest
(REST, gRPC) stanowią miękkie ograniczenia, które powodują powstanie kosztów, gdy nie mogą zostać spełnione.
Na przykład ograniczenia pojazdu LoadLimit
(REST, gRPC) mają
Usługi softMaxLoad
i costPerUnitAboveSoftMax
. Łącznie wiążą się one
proporcjonalny do jednostek obciążenia, które przekraczają softMaxLoad
, dzięki czemu
do przekroczenia limitu tylko wtedy, gdy ma to sens z punktu widzenia kosztów.
Podobnie ograniczenia TimeWindow
(REST, gRPC) mają
Usługi soft_start_time
i soft_end_time
z odpowiednimi
cost_per_hour_before_soft_start_time
i cost_per_hour_after_soft_end_time
które są naliczane w zależności od tego, jak wcześnie lub za późno następowało zdarzenie
w odniesieniu do: TimeWindow
.
Tak jak w przypadku wszystkich parametrów modelu kosztów, koszty miękkiego ograniczenia są wyrażone w tych samych bezwymiarowych jednostek co w przypadku innych parametrów kosztów.
LoadLimit
ograniczeń zostało opisanych szczegółowo w
Wczytywanie żądań i limitów. Ograniczenia TimeWindow
są szczegółowo opisane w ograniczeniach dotyczących czasu odbioru i dostawy.