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 głównych wartości żądania
celów optymalizacji, takich jak:
- Nadawanie priorytetu szybszym trasom
Vehicle
zamiast krótszych tras lub na odwrót w pobliżu - 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
Komunikat Shipment
(REST, gRPC) również ma kilka kosztów
parametry:
Shipment.penalty_cost
to koszt poniesiony w wyniku pominięcia 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) ma właściwości kosztu
które reprezentują koszty poniesione w związku z ukończeniem zadań 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.
Wyświetl odpowiedź na przykładowe żądanie z kosztami
{ "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 metrics.costs
najwyższego poziomu 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
Kilka właściwości komunikatu OptimizeToursRequest
(REST, gRPC)
stanowią ograniczenia miękkie, czyli ograniczenia, które generują koszty,
których nie da się spełnić.
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. Szczegółowe informacje o TimeWindow
ograniczeniach
w artykule Ograniczenia dotyczące czasu odbioru i dostawy.