Interfejs Route Optimization API zwraca trasy dla pojazdów w odpowiednich użytkownika. Przesyłki są przypisane do pojazdów lub mogą zostać pominięte w zależności od we właściwościach żądania.
Komunikat OptimizeToursResponse
(REST, gRPC) ma 2 główne
właściwości:
routes[]
to trasy każdego pojazdu z przypisanymi do niego przesyłkami. KażdyRoute
zawiera dane odzwierciedlające właściwości danej trasy.metrics
to zagregowane wskaźniki dotyczące całej odpowiedzi, obejmujące wszystkie pojazdów i planów tras. Dane najwyższego poziomu zawierają te same właściwości co wskaźników dla poszczególnych tras z wartościami zagregowanymi dla wszystkich tras.
W zależności od wyników optymalizacji niektóre właściwości mogą nie być wypełnione:
skippedShipments[]
zawiera listę dostaw, które nie są wykonywane przez żaden pojazd. Przesyłki można pominąć, jeśli nie można ich zrealizować w określonym czasie lub jeśli koszt dostawy przekracza jej koszt karny. Jeśli na przykład informacje o odbioru lub dostawie są bardzo wąskietimeWindow
, wykorzystanie pojazdu może nie być możliwe lub opłacalne dokonanie wizyty w wymaganym przedziale czasu.validationErrors[]
określa błędy, przez które żądanie jest nieprawidłowe, lub nie można rozwiązać, gdy elementsolvingMode
żądania ma wartośćVALIDATE_ONLY
. W normalnym trybieDEFAULT_SOLVE
błędy weryfikacji będą w komunikacie o błędzie, a nie w treści odpowiedzi. Pamiętaj, że Tryb rozwiązywania zadańVALIDATE_ONLY
może zgłosić wiele błędów jednocześnie, co oznacza przydatne do szybkiego debugowania żądań.
Właściwości trasy
Każdy wpis routes[]
to komunikat ShipmentRoute
(REST, gRPC). Każdy
ShipmentRoute
przedstawia przypisanie trasy dla konkretnego pojazdu z:
do ich przesłania. Ważne właściwości ShipmentRoute
powiązane z powiązanymi z nimi właściwościami
Vehicle
obejmują:
vehicleIndex
to liczony od zera indeks liczbyVehicle
w odpowiednich z prośbą o połączenie. Odpowiedzi REST pomijają tę właściwość, gdy jej wartość wynosi 0.vehicleStartTime
to czas, w którym pojazd musi rozpocząć trasę.vehicleEndTime
to czas, w którym pojazd powinien zakończyć .
W odpowiedzi routes
będzie wyglądać tak:
{
"routes": [
{
"vehicleStartTime": "2024-02-13T00:00:00Z",
"vehicleEndTime": "2024-02-13T00:38:42Z",
"visits": [
...
],
"transitions": [
...
],
"metrics": {
...
},
...
}
],
...
}
Każdy element ShipmentRoute
zawiera uporządkowaną listę visits
, którą pojazd
gotowe. Każdy element Visit
(REST, gRPC) reprezentuje symbol VisitRequest
(REST, gRPC) z odpowiedniego żądania. Ważne Visit
właściwości obejmują:
shipmentIndex
to liczony od zera indeks dostawy, do której należy ta wizyta w odpowiednim żądaniu.isPickup
ma wartość prawda, jeśli wizyta jest odbiorem, a fałsz, jeśli wizyta jest . Odpowiedzi REST pomijają tę właściwość, gdy wartość jest równa false.visitRequestIndex
to liczony od zera indeks funkcjiVisitRequest
zShipment.pickups
lubShipment.deliveries
w odpowiednim żądaniu który reprezentujeVisit
. Odpowiedzi REST pomijają tę właściwość, gdy wynosi zero.startTime
to spodziewany czas rozpoczęcia wizyty.loadDemands
mapuje typ wczytywania, aby wczytać ilość potrzebną do ukończeniaVisit
Kwoty obciążenia są ujemne w przypadku wizyt związanych z realizacją wyświetleń, co odzwierciedla obciążenie wyjmowanie ich z pojazdu.
Przykładowy element Visit
wygląda tak:
{
"routes": [
{
...
"visits": [
{
"isPickup": true,
"startTime": "2024-02-13T00:00:00Z",
"detour": "0s"
},
...
],
},
...
],
...
}
Każdy element ShipmentRoute
zawiera uporządkowaną listę wartości transitions
, które reprezentują
podróż danym pojazdem między visits
. Ważna wiadomość Transition
Właściwości (REST, gRPC) obejmują:
startTime
to czas, w którym pojazd rozpocznie działanie przejścia.travelDuration
to czas, do którego musi dotrzeć pojazd. dokończyć przenoszenie.travelDistanceMeters
to odległość, jaką musi być pojazd (w metrach). aby dokończyć przenoszenie.trafficInfoUnavailable
wskazuje, czy dane o ruchu są dostępne dla: przejścia.waitDuration
oznacza czas bezczynności, po którym pojazd czeka, zanim będzie mógł rozpocznie sięVisit
. Może to być spowodowane tym, żestart_time
obserwuje:Visit
.totalDuration
to całkowity czas przejścia, z uwzględnieniem podróży, czasy oczekiwania, przerwy i opóźnienia.vehicleLoads
mapuje typ obciążenia na ilość obciążenia przenoszonego przez pojazd w trakcie tę zmianę.
Przykładowy element Transition
wygląda tak:
{
"routes": [
{
...
"transitions": [
...
{
"travelDuration": "1171s",
"travelDistanceMeters": 9004,
"waitDuration": "0s",
"totalDuration": "1171s",
"startTime": "2024-02-13T00:00:00Z"
},
...
],
...
}
],
...
}
Relacja między vists
a transitions
została opisana tutaj
Optymalizacja opcji odbioru i dostawy, a także
Dokumentacja referencyjna ShipmentRoute
(REST, gRPC).
Właściwości danych
Komunikat Metrics
(REST, gRPC) podsumowuje całe rozwiązanie.
Ważne właściwości Metrics
to między innymi:
totalCost
to całkowity koszt poniesionych w związku z pokonaniem tras. Więcej informacji o kosztach w parametrach modelu kosztu.usedVehicleCount
to łączna liczba pojazdów używanych w rozwiązaniu. Pojazdy mogą mieć puste trasy, gdy optymalizator ustali, że ich wykorzystanie jest niepotrzebne.skippedMandatoryShipmentCount
to liczba pominiętych przesyłek, które są „obowiązkowe”. W przypadku obowiązkowej przesyłki nie ma określonego atrybutupenaltyCost
, który poniesionych w przypadku pominięcia przesyłki. Obowiązkowe przesyłki można nadal pomijane, jeśli ich wydajność nie jest możliwa przy określonych ograniczeniach. Więcej informacji o kosztach znajdziesz w artykule Parametry modelu kosztu.
Dodatkowe dane są raportowane jako wiadomości AggregatedMetrics
(REST,
gRPC). Typ wiadomości AggregatedMetrics
jest używany w przypadku:
usługi Metrics.aggregatedRouteMetrics
oraz ShipmentRoute.metrics
.
usługa Metrics.aggregatedRouteMetrics
zawiera dane zbiorcze ze wszystkich
ShipmentRoute
w: OptimizeToursResponse
. Co ShipmentRoute.metrics
usługa zawiera dane dotyczące tego obszaru: ShipmentRoute
.
Ważne właściwości AggregatedMetrics
:
performedShipmentCount
to liczba przesyłek dostarczonych przez pojazdy na wszystkich trasach.travelDuration
to łączny czas, jaki pojazd spędził w transporcie podczas realizowania swoich tras.waitDuration
to łączny czas, przez jaki pojazdy spędziły czas na realizacji swoje trasy.delayDuration
to całkowity czas opóźnienia dla pojazdów. Zwykle jest to zero, chyba że w żądaniu użyto parametruTransitionAttributes
.breakDuration
to łączny czas, jaki pojazd poświęca na przerwy podczas realizowania swoich tras.visitDuration
to łączny czas, w którym pojazd spędzają na odwiedzaniu podczas realizowania swoich tras. Jest to właściwie suma wszystkich WartościVisitRequest.duration
dla parametrówVisitRequest
odpowiadającychVisit
s przypisany do odpowiedniego pojazdu.totalDuration
to całkowity czas podróży pojazdem. trasy.travelDistanceMeters
to całkowita odległość pokonana przez pojazdy podczas realizowania swoich tras.maxLoads
mapuje typy obciążenia na maksymalną wartość obciążenia przenoszoną przez pojazdów w dowolnym punkcie na trasie.
Przykładowa wiadomość w usłudze Metrics
wygląda tak:
{
"routes": [
...
],
"metrics": {
"aggregatedRouteMetrics": {
"performedShipmentCount": 1,
"travelDuration": "2322s",
"waitDuration": "0s",
"delayDuration": "0s",
"breakDuration": "0s",
"visitDuration": "0s",
"totalDuration": "2322s",
"travelDistanceMeters": 18603
},
"usedVehicleCount": 1,
"earliestVehicleStartTime": "2024-02-13T00:00:00Z",
"latestVehicleEndTime": "2024-02-13T00:38:42Z",
"totalCost": 18.603,
"costs": {
"model.vehicles.cost_per_kilometer": 18.603
}
}
}
Pełny przykład
Pełna przykładowa odpowiedź na żądanie z narzędzia Utwórz żądanie lubię:
{
"routes": [
{
"vehicleStartTime": "2024-02-13T00:00:00Z",
"vehicleEndTime": "2024-02-13T00:38:42Z",
"visits": [
{
"isPickup": true,
"startTime": "2024-02-13T00:00:00Z",
"detour": "0s"
},
{
"startTime": "2024-02-13T00:19:31Z",
"detour": "0s"
}
],
"transitions": [
{
"travelDuration": "0s",
"waitDuration": "0s",
"totalDuration": "0s",
"startTime": "2024-02-13T00:00:00Z"
},
{
"travelDuration": "1171s",
"travelDistanceMeters": 9004,
"waitDuration": "0s",
"totalDuration": "1171s",
"startTime": "2024-02-13T00:00:00Z"
},
{
"travelDuration": "1151s",
"travelDistanceMeters": 9599,
"waitDuration": "0s",
"totalDuration": "1151s",
"startTime": "2024-02-13T00:19:31Z"
}
],
"metrics": {
"performedShipmentCount": 1,
"travelDuration": "2322s",
"waitDuration": "0s",
"delayDuration": "0s",
"breakDuration": "0s",
"visitDuration": "0s",
"totalDuration": "2322s",
"travelDistanceMeters": 18603
},
"routeCosts": {
"model.vehicles.cost_per_kilometer": 18.603
},
"routeTotalCost": 18.603
}
],
"metrics": {
"aggregatedRouteMetrics": {
"performedShipmentCount": 1,
"travelDuration": "2322s",
"waitDuration": "0s",
"delayDuration": "0s",
"breakDuration": "0s",
"visitDuration": "0s",
"totalDuration": "2322s",
"travelDistanceMeters": 18603
},
"usedVehicleCount": 1,
"earliestVehicleStartTime": "2024-02-13T00:00:00Z",
"latestVehicleEndTime": "2024-02-13T00:38:42Z",
"totalCost": 18.603,
"costs": {
"model.vehicles.cost_per_kilometer": 18.603
}
}
}