Uwagi dotyczące wersji produkcyjnej
Dla uproszczenia w tym przewodniku używamy REST i JSON. W środowisku produkcyjnym zalecamy jednak używanie gRPC i bibliotek klienta, aby uzyskać lepszą wydajność. Więcej informacji znajdziesz w bibliotekach klienta Route Optimization API.
Po wysłaniu żądania w sekcji Wyślij pierwsze żądanie optymalizator zwraca obiekt OptimizeToursResponse. Odpowiedź to plan trasy, którą ma pokonać kierowca. Z tego przewodnika dowiesz się, jak go odczytywać.
Podsumowanie planu trasy
W przypadku scenariusza z opieką nad psami optymalizator przypisuje do furgonetki berneńskiego psa pasterskiego i chihuahua, a pomija owczarka niemieckiego. Plan trasy kierowcy:
- Rozpocznij zmianę o 7:55 w żłobku.
- Odbierz berneńskiego psa pasterskiego w pobliżu Coit Tower o 8:20.
- Odbierz Chihuahua z South Sunset Playground Park o 8:58.
- Wróć do żłobka o 9:24 i poczekaj, aż o 9:30 otworzy się okienko odbioru.
- Odstaw berneńskiego psa pasterskiego o 9:30.
- Odstawienie Chihuahua o 9:35.
- Zakończ zmianę o 9:40.
Plan trasy kosztuje 147,22 USD, w tym 100 USD kary za pominięcie owczarka niemieckiego.
Aby sprawdzić wyniki, porównaj swoją odpowiedź z pełną przykładową odpowiedzią. Twoje wyniki mogą się nieco różnić, ponieważ czas podróży i odległość zależą od aktualnych danych o drogach.
Pełna przykładowa odpowiedź
{ "routes": [ { "vehicleStartTime": "2024-02-13T15:55:04Z", "vehicleEndTime": "2024-02-13T17:40:00Z", "visits": [ { "isPickup": true, "startTime": "2024-02-13T16:20:00Z", "detour": "0s", "shipmentLabel": "Bernese mountain dog", "visitType": "PICKUP_SHIPMENT" }, { "shipmentIndex": 1, "isPickup": true, "startTime": "2024-02-13T16:58:12Z", "detour": "2600s", "shipmentLabel": "Chihuahua", "visitType": "PICKUP_SHIPMENT" }, { "startTime": "2024-02-13T17:30:00Z", "detour": "2297s", "shipmentLabel": "Bernese mountain dog", "visitType": "DELIVER_SHIPMENT" }, { "shipmentIndex": 1, "startTime": "2024-02-13T17:35:00Z", "detour": "656s", "shipmentLabel": "Chihuahua", "visitType": "DELIVER_SHIPMENT" } ], "transitions": [ { "travelDuration": "1496s", "travelDistanceMeters": 7082, "waitDuration": "0s", "totalDuration": "1496s", "startTime": "2024-02-13T15:55:04Z" }, { "travelDuration": "1992s", "travelDistanceMeters": 16589, "waitDuration": "0s", "totalDuration": "1992s", "startTime": "2024-02-13T16:25:00Z" }, { "travelDuration": "1252s", "travelDistanceMeters": 7860, "waitDuration": "356s", "totalDuration": "1608s", "startTime": "2024-02-13T17:03:12Z" }, { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2024-02-13T17:35:00Z" }, { "travelDuration": "0s", "waitDuration": "0s", "totalDuration": "0s", "startTime": "2024-02-13T17:40:00Z" } ], "metrics": { "performedShipmentCount": 2, "travelDuration": "4740s", "waitDuration": "356s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "1200s", "totalDuration": "6296s", "travelDistanceMeters": 31531, "performedShipmentPenaltyCostSum": 2000 }, "routeCosts": { "model.vehicles.cost_per_hour": 47.22 }, "routeTotalCost": 47.22, "vehicleFullness": { "maxFullness": 0.3497777777777778, "activeSpan": 0.3497777777777778 } } ], "skippedShipments": [ { "index": 2, "label": "German shepherd", "penaltyCost": 100 } ], "metrics": { "aggregatedRouteMetrics": { "performedShipmentCount": 2, "travelDuration": "4740s", "waitDuration": "356s", "delayDuration": "0s", "breakDuration": "0s", "visitDuration": "1200s", "totalDuration": "6296s", "travelDistanceMeters": 31531, "performedShipmentPenaltyCostSum": 2000 }, "usedVehicleCount": 1, "earliestVehicleStartTime": "2024-02-13T15:55:04Z", "latestVehicleEndTime": "2024-02-13T17:40:00Z", "totalCost": 147.22, "costs": { "model.vehicles.cost_per_hour": 47.22, "model.shipments.penalty_cost": 100 } } }
Struktura odpowiedzi
OptimizeToursResponse składa się z 2 głównych komponentów:
routes: plan trasy dla każdego pojazdu we flocie, w tym kolejność i godziny odbioru oraz dostawy. Masz 1 furgonetkę, więc jest 1 plan trasy.metrics: podsumowanie całego planu trasy, w tym łączny koszt, czas trwania i odległość.
Ponieważ optymalizator pomija owczarka niemieckiego, odpowiedź zawiera też skippedShipments.
W sekcjach poniżej dowiesz się, gdzie w odpowiedzi znajdziesz poszczególne szczegóły podsumowania planu trasy.
Który pojazd obsługuje którą trasę?
Optymalizator generuje plan trasy (tablica routes), który odpowiada kolejności vehicles w żądaniu.
Pole vehicleIndex identyfikuje każdy pojazd na podstawie jego pozycji liczonej od zera, która w przypadku furgonetki wynosi 0. Pola vehicleStartTime i vehicleEndTime informują kierowcę, kiedy ma rozpocząć i zakończyć zmianę.
Route Optimization API zwraca sygnatury czasowe w formacie UTC, oznaczone sufiksem Z, niezależnie od przesunięcia w żądaniu. Aby uzyskać czas w San Francisco, odejmij 8 godzin. W przypadku furgonetki zmiana trwa od 7:55 do 9:40, jak pokazano w tym przykładowym kodzie.
{
"routes": [
{
// "vehicleIndex": 0, // Omitted in actual JSON response because it's 0
"vehicleStartTime": "2024-02-13T15:55:04Z",
"vehicleEndTime": "2024-02-13T17:40:00Z",
...
}
]
...
}
Jaka jest kolejność odbioru i wysiadania?
W każdej trasie tablica visits zawiera wszystkie odbiory i dostawy przypisanego pojazdu w porządku chronologicznym.
Wartość shipmentIndex każdej wizyty to pozycja przesyłki w żądaniu, liczona od zera: 0 to berneński pies pasterski, a 1 to chihuahua. Pole shipmentLabel zawiera etykietę ustawioną dla każdej przesyłki.
Aby odróżnić odbiór od dostawy, możesz sprawdzić pola visitType lub isPickup:
visitType: jednoznacznie definiuje działanie związane z wizytą.- Odbiór:
visitType="PICKUP_SHIPMENT" - Dostawa:
visitType="DELIVER_SHIPMENT"
- Odbiór:
isPickup: pole pomocnicze wartości logicznej.- Odbiór:
isPickup=true - Dostawa:
isPickup=false(pominięto w pliku JSON)
- Odbiór:
Aby określić dokładną sekwencję zdarzeń i oczekiwany czas przybycia do każdej lokalizacji, odczytaj tablicę visits w odpowiedniej kolejności. W tabeli poniżej znajdziesz działania związane z planem trasy na podstawie kolejności i wartości pól shipmentIndex, isPickup lub visitType oraz startTime.
| Sekwencja | Wartość shipmentIndex |
Wartość isPickup lub visitType |
Wartość startTime (UTC) |
Działanie |
|---|---|---|---|---|
| Pierwsze odwiedziny | 0 (pominięte w pliku JSON) | True (Prawda) lub PICKUP_SHIPMENT |
2024-02-13T16:20:00Z | Odbierz berneńskiego psa pasterskiego o 8:20. |
| Drugie odwiedziny | 1 | Prawda czy PICKUP_SHIPMENT |
2024-02-13T16:58:12Z | Odbierz Chihuahua o 8:58. |
| Trzecia wizyta | 0 (pominięte w pliku JSON) | Fałsz (pominięto) lub DELIVER_SHIPMENT |
2024-02-13T17:30:00Z | Zostaw berneńskiego psa pasterskiego w świetlicy dla psów o 9:30. |
| Czwarta wizyta | 1 | Fałsz (pominięto) lub DELIVER_SHIPMENT |
2024-02-13T17:35:00Z | Zostaw chihuahuę w hotelu dla psów o 9:35. |
Poniższy przykładowy kod pokazuje, jak odpowiedź dostarcza tę sekwencję:
{
"routes": [
{
"visits": [
{
// "shipmentIndex": 0, // Omitted in actual JSON response because it's 0
"isPickup": true,
"startTime": "2024-02-13T16:20:00Z",
"shipmentLabel": "Bernese mountain dog",
"visitType": "PICKUP_SHIPMENT"
},
{
"shipmentIndex": 1,
"isPickup": true,
"startTime": "2024-02-13T16:58:12Z",
"shipmentLabel": "Chihuahua",
"visitType": "PICKUP_SHIPMENT"
},
{
// "shipmentIndex": 0, // Omitted in actual JSON response because it's 0
// "isPickup": false, // Omitted in actual JSON response because it's false
"startTime": "2024-02-13T17:30:00Z",
"shipmentLabel": "Bernese mountain dog",
"visitType": "DELIVER_SHIPMENT"
},
{
"shipmentIndex": 1,
// "isPickup": false, // Omitted in actual JSON response because it's false
"startTime": "2024-02-13T17:35:00Z",
"shipmentLabel": "Chihuahua",
"visitType": "DELIVER_SHIPMENT"
}
]
}
]
}
Każda wizyta ma też parametr visitRequestIndex, który jest pozycją (liczoną od zera) opcji odbioru lub dostawy wybranej przez optymalizator dla przesyłki. Każdy pies w tym scenariuszu ma tylko 1 opcję odbioru i 1 opcję dostawy, więc visitRequestIndex to zawsze 0, a odpowiedź pomija tę wartość.
Co się dzieje między wizytami?
W każdej trasie tablica transitions zawiera szczegóły podróży między wizytami. Chociaż visits i transitions to osobne listy, przeplatają się one w czasie w następujący sposób:
transitions[0](podróż samochodem od początku do pierwszej wizyty)visits[0](pierwsza wizyta)transitions[1](podróż samochodem od pierwszej do drugiej wizyty)visits[1](druga wizyta)...visits[N-1](ostatnia wizyta, gdzie N to łączna liczba wizyt)transitions[N](przejazd od ostatniej wizyty do końca)
Możesz śledzić oś czasu trasy, sprawdzając pole startTime w obu tablicach. startTime przejazdu to moment, w którym kierowca rozpoczyna podróż, a startTime wizyty to moment, w którym kierowca rozpoczyna odbiór lub dostawę.
Każde przejście pokazuje oczekiwany czas jazdy i odległość między lokalizacjami.
Tabela poniżej mapuje pola transitions i visits na chronologiczne działania na trasie w scenariuszu dotyczącym hotelu dla psów.
| Sekwencja | Nazwa pola | Wartość startTime (UTC) |
Szczegóły | Działanie |
|---|---|---|---|---|
| Pierwsze przejście | transitions[0] |
2024-02-13T15:55:04Z |
travelDuration: 1496stravelDistanceMeters: 7082 |
Przejedź 7 km w 25 minut od żłobka, aby odebrać berneńskiego psa pasterskiego. Zmiana zaczyna się o 7:55. |
| Pierwsza wizyta | visits[0] |
2024-02-13T16:20:00Z |
shipmentIndex: 0 (pominięto w JSON)isPickup: True |
Odbierz berneńskiego psa pasterskiego od 8:20. Wizyta potrwa 5 minut. |
| Drugie przejście | transitions[1] |
2024-02-13T16:25:00Z |
travelDuration: 1992stravelDistanceMeters: 16589 |
Przejedź 17 km w 33 minuty od Coit Tower, aby odebrać chihuahua, zaczynając o 8:25. |
| Druga wizyta | visits[1] |
2024-02-13T16:58:12Z |
shipmentIndex: 1isPickup: True |
Odbierz chihuahua od 8:58. Wizyta potrwa 5 minut. |
| Trzecie przejście | transitions[2] |
2024-02-13T17:03:12Z |
travelDuration: 1252 stravelDistanceMeters: 7860waitDuration: 356 s |
Przejazd 8 km w 21 minut z South Sunset Playground z powrotem do żłobka, począwszy od 9:03. Przyjazd o 9:24 i 6 minut oczekiwania na otwarcie okna odbioru. |
| Trzecia wizyta | visits[2] |
2024-02-13T17:30:00Z |
shipmentIndex: 0 (pominięte w pliku JSON)isPickup: False (pominięte w pliku JSON) |
Zostaw berneńskiego psa pasterskiego w hotelu dla psów od 9:30. Wizyta potrwa 5 minut. |
| Czwarty etap przejścia | transitions[3] |
2024-02-13T17:35:00Z |
travelDuration: 0stravelDistanceMeters: 0 (pominięte w JSON) |
Nie jedź samochodem. Przygotuj się do zostawienia chihuahua w świetlicy o 9:35. |
| Czwarta wizyta | visits[3] |
2024-02-13T17:35:00Z |
shipmentIndex: 1isPickup: False (pominięte w JSON) |
Zostaw chihuahuę w hotelu dla psów o 9:35. Wizyta potrwa 5 minut. |
| Piąte przejście | transitions[4] |
2024-02-13T17:40:00Z |
travelDuration: 0stravelDistanceMeters: 0 (pominięte w JSON) |
Nie jedź samochodem. Kierowca kończy zmianę o 9:40. |
Poniższy przykładowy kod pokazuje, jak odpowiedź zawiera tę sekwencję dla transitions[0] i transitions[1]:
{
"routes": [
{
"transitions": [
{
"travelDuration": "1496s",
"travelDistanceMeters": 7082,
"waitDuration": "0s",
"totalDuration": "1496s",
"startTime": "2024-02-13T15:55:04Z"
},
{
"travelDuration": "1992s",
"travelDistanceMeters": 16589,
"waitDuration": "0s",
"totalDuration": "1992s",
"startTime": "2024-02-13T16:25:00Z"
},
...
]
}
]
}
Ile kosztuje przejazd tą trasą?
Możesz sprawdzić kilka pól w odpowiedzi, w zależności od tego, czy potrzebujesz kosztu konkretnego pojazdu, czy łącznego kosztu całej floty.
W tabeli poniżej znajdziesz wszystkie sposoby wyszukiwania informacji o kosztach w odpowiedzi:
| Ma dzieci | Parametr | Zakres | Opis |
|---|---|---|---|
ShipmentRoute |
routeCosts |
Na trasę | Zestawienie konkretnych składników kosztów (np. kosztu za godzinę) dla danej trasy. |
routeTotalCost |
Na trasę | Łączny koszt obliczony dla danej trasy. | |
Metrics |
totalCost |
Łącznie (wszystkie trasy) | Łączny koszt wszystkich tras w rozwiązaniu. |
costs |
Łącznie (wszystkie trasy) | Zestawienie zagregowanych komponentów kosztów we wszystkich trasach w rozwiązaniu. |
Koszty określone w polach routeCosts i costs odzwierciedlają ograniczenia kosztów określone w żądaniu. Więcej informacji znajdziesz w dokumencie Kluczowe pojęcie modelu kosztów.
W tym scenariuszu dotyczącym hotelu dla psów, ponieważ masz pominiętą dostawę, koszt na trasę i łączny koszt są różne. Koszt trasy obejmuje tylko koszty związane z tą konkretną trasą (wynagrodzenie kierowcy), a łączny koszt zagregowany obejmuje też karę za pominiętą przesyłkę. Poniższy przykładowy kod pokazuje, gdzie znaleźć te wartości w odpowiedzi:
{
"routes": [
{
"vehicleStartTime": "2024-02-13T15:55:04Z",
"vehicleEndTime": "2024-02-13T17:40:00Z",
...
"routeCosts": {
"model.vehicles.cost_per_hour": 47.22
},
"routeTotalCost": 47.22
}
],
"metrics": {
"totalCost": 147.22,
"costs": {
"model.shipments.penalty_cost": 100,
"model.vehicles.cost_per_hour": 47.22
},
...
}
}
Zgodnie z planem trasy kierowca prowadzi furgonetkę od 7:55 do 9:40, czyli przez około 1 godzinę i 45 minut (6296 sekund). Przy określonej przez Ciebie stawce 27 USD za godzinę koszt trasy wynosi 47, 22 USD. Ponieważ optymalizator pominął dostawę owczarków niemieckich, dodaje on koszt kary w wysokości 100 USD, co daje łączny koszt zagregowany w wysokości 147,22 USD.
Dlaczego dostawa została pominięta?
Optymalizator wyświetla listę wszystkich dostaw, których nie realizuje, w tablicy skippedShipments. To, dlaczego pomija wysyłkę, zależy od tego, czy ustawisz penaltyCost:
- Przesyłki obowiązkowe (brak
penaltyCost): optymalizator nigdy nie pomija tych przesyłek tylko dlatego, że są kosztowne. Pominie przesyłkę tylko wtedy, gdy nie będzie mogła dopasować jej do żadnej trasy, na przykład dlatego, że jej okno czasowe koliduje z innymi przesyłkami. - Opcjonalne dostawy (z
penaltyCost): optymalizator może je pominąć, jeśli ich realizacja kosztuje więcej niż kara. Możesz ustawić różne koszty kar, aby nadać niektórym przesyłkom wyższy priorytet.
W tym scenariuszu okno odbioru owczarka niemieckiego koliduje z oknem berneńskiego psa pasterskiego. Wieża Coit i Land's End są oddalone od siebie o 25 minut, więc kierowca nie może odebrać obu pasażerów w ciągu 20 minut. Optymalizator musi pominąć jeden z nich. Ponieważ owczarek niemiecki ma niższy koszt kary (100 PLN w porównaniu z 1000 PLN w przypadku zwykłego klienta), optymalizator pomija go i ponosi karę w wysokości 100 PLN.
Poniższy przykładowy kod pokazuje obiekt skippedShipments w odpowiedzi:
{
...
"skippedShipments": [
{
"index": 2,
"label": "German shepherd",
"penaltyCost": 100
}
],
...
}
Obiekt skippedShipments w odpowiedzi zawiera te pola:
index: indeks przesyłki w żądaniu liczony od zera (2 oznacza trzecią przesyłkę).label: etykieta podana w żądaniu („owczarek niemiecki”).penaltyCost: koszt kary określony w żądaniu, który interfejs API dodaje do łącznego kosztu.
Aby zapobiec pomijaniu przesyłki przez optymalizator, poluzuj ograniczenie, które powoduje konflikt. Możesz na przykład poprosić właściciela owczarka niemieckiego o bardziej elastyczny termin odbioru, a następnie zaktualizować timeWindows dla tego odbioru w swojej prośbie.
Pola odpowiedzi w przykładzie
Tabela poniżej zawiera opis wszystkich pól odpowiedzi zwracanych w OptimizeToursResponse w przykładowym scenariuszu. Nie musisz używać wszystkich pól, aby zrozumieć plan trasy, ale możesz je przeanalizować, aby określić, jak dostosować OptimizeToursRequest do potrzeb firmy. Więcej informacji znajdziesz w artykule Cykl życia planu trasy.
Możesz filtrować zawartość według elementu nadrzędnego lub wyszukiwania tekstowego.
| Ma dzieci | Parametr | Typ usługi | Opis |
|---|---|---|---|
OptimizeToursResponse |
routes |
Tablica obiektów (ShipmentRoute) |
Zawiera listę tras obliczonych dla każdego pojazdu (po jednej na pojazd). W przypadku scenariusza z opieką nad psami zawiera on szczegółowy plan trasy dla jednej furgonetki. |
metrics |
Obiekt (Metrics) |
Zawiera ogólne dane dotyczące rozwiązania, zagregowane dla wszystkich tras. W przypadku tego scenariusza z hotelem dla psów jest to podsumowanie kosztów i czasu trwania operacji w ciągu dnia. | |
skippedShipments |
Tablica obiektów (SkippedShipment) |
Zawiera listę przesyłek, które zostały pominięte w rozwiązaniu. W tym przypadku trzeci pies (owczarek niemiecki) zostanie pominięty. | |
ShipmentRoute |
vehicleStartTime |
Sygnatura czasowa | Jest to godzina, o której pojazd rozpoczyna trasę. W tym scenariuszu kierowca zaczyna jechać furgonetką o 7:55. |
vehicleEndTime |
Sygnatura czasowa | Jest to godzina, o której pojazd kończy trasę. W tym scenariuszu kierowca kończy jazdę furgonetką o 9:40. | |
visits |
Tablica obiektów (Visit) |
Jest to lista uporządkowana odbiorów i dostaw na trasie. W tym scenariuszu dotyczącym opieki nad psami jest to sekwencja odbioru i odwożenia 2 psów. | |
transitions |
Tablica obiektów (Transition) |
Jest to uporządkowana lista odległości oraz czasu podróży i oczekiwania między wizytami. W tym scenariuszu dotyczącym opieki dziennej nad psami podane są odległość i czas dojazdu między Coit Tower, South Sunset Playground Park i miejscem opieki. | |
metrics |
Obiekt (AggregatedMetrics) |
Są to dane dotyczące tej konkretnej trasy. W tym scenariuszu dotyczącym hotelu dla psów są to statystyki dotyczące tego konkretnego vana. Te dane są oparte na kosztach podanych w żądaniu. Więcej informacji znajdziesz w dokumencie Kluczowe pojęcie modelu kosztów. | |
routeCosts |
Obiekt (mapa) | To jest zestawienie konkretnych kosztów tej trasy. W tym scenariuszu dotyczącym hotelu dla psów koszt jest obliczany na podstawie stawki kierowcy wynoszącej 27 USD za godzinę. | |
routeTotalCost |
Liczba | To łączny koszt tej konkretnej trasy. W tym scenariuszu z opieką nad psami łączny koszt trasy furgonetki wynosi 47.22. |
|
vehicleFullness |
Obiekt (VehicleFullness) |
Jest to zestawienie pokazujące, jak blisko limitów operacyjnych (takich jak czas, odległość i obciążenie) znajduje się pojazd. W tym scenariuszu dotyczącym opieki nad psami kierowcę ograniczają tylko godziny rozpoczęcia i zakończenia zmiany, więc optymalizator oblicza vehicleFullness jako ułamek rzeczywistego czasu trwania trasy i maksymalnego czasu dostępnego dla zmiany kierowcy. |
|
Visit |
shipmentIndex |
Liczba całkowita | Jest to indeks przesyłki w pierwotnym żądaniu. W tym scenariuszu z hotelem dla psów 0 reprezentuje berneńskiego psa pasterskiego, a 1 – chihuahua. |
isPickup |
Wartość logiczna | To pole ma wartość „true”, jeśli wizyta jest odbiorem. W przypadku tego scenariusza z hotelem dla psów ma wartość „true”, gdy pies jest odbierany, i „false” (lub jest pomijany), gdy pies jest zostawiany w hotelu. | |
startTime |
Sygnatura czasowa | Jest to szacowany czas rozpoczęcia wizyty. W przypadku scenariusza z opieką nad psem jest to moment, w którym kierowca puka do drzwi. | |
detour |
Czas trwania | Jest to dodatkowy czas, który optymalizator dodaje do czasu podróży tej konkretnej przesyłki. Objazd to różnica między rzeczywistym planem trasy a idealną trasą bezpośrednią, gdy kierowca nie ma innych przesyłek ani zadań do wykonania. W tym scenariuszu dotyczącym świetlicy dla psów pierwsza wizyta, czyli odbiór berneńskiego psa pasterskiego, ma objazd o wartości 0, ponieważ kierowca jedzie bezpośrednio ze świetlicy do tego miejsca odbioru. W przypadku odbioru chihuahua objazd trwa 43 minuty, ponieważ kierowca najpierw odbiera berneńskiego psa pasterskiego (co zajmuje 5 minut). |
|
shipmentLabel |
Ciąg znaków | Jest to etykieta z żądania dla każdej przesyłki. W tym scenariuszu z hotelem dla psów etykiety to „Chihuahua” i „Berneński pies pasterski”. | |
visitType |
Ciąg znaków (typ wyliczeniowy) | Wskazuje typ wizyty, który może być PICKUP_SHIPMENT w przypadku odbioru lub DELIVER_SHIPMENT w przypadku dostawy. W tym scenariuszu jest to PICKUP_SHIPMENT lub DELIVER_SHIPMENT. |
|
Transition |
travelDuration |
Czas trwania | Jest to czas podróży między wizytami. Na przykład w tym scenariuszu kierowca spędza około 25 minut na dojeździe z hotelu dla psów do Coit Tower, aby odebrać berneńskiego psa pasterskiego. |
travelDistanceMeters |
Liczba całkowita | Jest to odległość w metrach przebyta podczas tego przejścia. Na przykład w tym scenariuszu z hotelem dla psów kierowca jedzie 7 kilometrów z hotelu do Coit Tower, aby odebrać berneńskiego psa pasterskiego. | |
waitDuration |
Czas trwania | Jest to czas oczekiwania przed kolejnym odbiorem lub dostawą. W tym scenariuszu dotyczącym świetlicy dla psów jest to 6 minut (356 sekund) w przypadku trzeciego przejścia, ponieważ kierowca przyjeżdża do świetlicy przed otwarciem okna odbioru o 9:30. W przypadku innych przejść ta wartość wynosi 0. | |
totalDuration |
Czas trwania | Jest to łączny czas trwania przejścia, w tym jazdy i oczekiwania. Na przykład kierowca spędza 25 minut (25 minut jazdy i 0 minut oczekiwania) na pierwszym przejeździe i 27 minut (21 minut jazdy i 6 minut oczekiwania) na trzecim przejeździe z powrotem do żłobka. | |
startTime |
Sygnatura czasowa | Jest to czas rozpoczęcia podróży. Odpowiada on czasowi zakończenia poprzedniej wizyty (lub, w przypadku pierwszego przejazdu, czasowi rozpoczęcia pojazdu). W przypadku scenariusza z opieką nad psem pierwsze przejście rozpoczyna się o 7:55, gdy kierowca opuszcza miejsce opieki, a drugie o 8:25, gdy kierowca opuszcza Coit Tower. | |
Metrics |
aggregatedRouteMetrics |
Obiekt (AggregatedMetrics) |
Jest to suma danych ze wszystkich tras. W przypadku tego scenariusza z hotelem dla psów są to łączne dane dotyczące jednego vana. |
usedVehicleCount |
Liczba całkowita | Jest to liczba pojazdów użytych w rozwiązaniu. W tym scenariuszu z opieką nad psami używasz tylko jednej furgonetki. | |
earliestVehicleStartTime |
Sygnatura czasowa | Jest to najwcześniejszy czas rozpoczęcia spośród wszystkich pojazdów. W tym scenariuszu dotyczącym hotelu dla psów trasa furgonetki zaczyna się o 7:55. | |
latestVehicleEndTime |
Sygnatura czasowa | Jest to najpóźniejszy czas zakończenia wśród wszystkich pojazdów. W tym scenariuszu trasa furgonetki kończy się o 9:40. | |
totalCost |
Liczba | To łączny koszt rozwiązania. W tym scenariuszu dotyczącym opieki nad psami cały plan trasy kosztuje 147.22 dziennie (w tym 47.22 wynagrodzenia kierowcy i 100 kary za pominiętą przesyłkę). |
|
costs |
Obiekt (mapa) | To jest zestawienie łącznych kosztów według kategorii. W tym scenariuszu dotyczącym opieki nad psami optymalizator obliczył koszt trasy na podstawie kosztu za godzinę i kosztu kary za pominiętego owczarka niemieckiego. | |
AggregatedMetrics |
performedShipmentCount |
Liczba całkowita | Jest to liczba przesyłek, które zostały pomyślnie przekierowane. W tym scenariuszu kierowca przewozi 2 psy. |
travelDuration |
Czas trwania | Jest to łączny czas podróży. W tym scenariuszu kierowca jedzie przez 79 minut. | |
waitDuration |
Czas trwania | Jest to łączny czas oczekiwania. W tym scenariuszu kierowca czeka na otwarcie okna odbioru przez 6 minut (356 sekund). | |
delayDuration |
Czas trwania | Jest to dodatkowy czas, który określasz za pomocą atrybutów przejścia, np. czas zarezerwowany na parkowanie. W tym scenariuszu dotyczącym hotelu dla psów nie zdefiniowano w żądaniu żadnych atrybutów przejścia, więc ta wartość wynosi 0. | |
breakDuration |
Czas trwania | To łączny czas spędzony na przerwach. W tym scenariuszu dotyczącym opieki nad psami nie ma przerw. | |
visitDuration |
Czas trwania | Jest to łączny czas poświęcony na świadczenie usług podczas wizyt. W przypadku tego scenariusza z opieką nad psem jest to 20 minut (5 minut na wizytę przy 4 wizytach). | |
totalDuration |
Czas trwania | Jest to suma wszystkich komponentów czasu trwania. W przypadku tego scenariusza z opieką nad psami łączny czas trwania wynosi 105 minut (6296 sekund). | |
travelDistanceMeters |
Liczba całkowita | Jest to całkowita odległość podróży w metrach. W tym scenariuszu kierowca pokonuje łącznie 31, 5 km. | |
performedShipmentPenaltyCostSum |
Liczba zmiennoprzecinkowa | Jest to suma kosztów kar za wszystkie zrealizowane dostawy. W tym scenariuszu jest to 2000, ponieważ kierowca zabrał berneńskiego psa pasterskiego i chihuahua (każdy z kosztem kary wynoszącym 1000). |
|
VehicleFullness |
maxFullness |
Liczba | Jest to najwyższy współczynnik wykorzystania we wszystkich polach VehicleFullness. W tym scenariuszu dotyczącym opieki nad psami wynosi on 0,35, ponieważ kierowca prowadzi furgonetkę tylko przez 105 minut całej porannej zmiany, którą w żądaniu określono jako 5 godzin. |
activeSpan |
Liczba | Jest to stosunek łącznej długości zmiany kierowcy do godzin pracy określonych w planie trasy. Niższa wartość oznacza, że kierowca spędza mniej czasu w ciągu dnia roboczego na prowadzeniu pojazdu. W tym scenariuszu dotyczącym opieki nad psami wynosi on 0,35, ponieważ kierowca prowadzi furgonetkę przez 105 minut podczas 5-godzinnej zmiany. | |
SkippedShipment |
index |
Liczba całkowita | Jest to indeks przesyłki w pierwotnym żądaniu. W tym przypadku 2 oznacza owczarka niemieckiego. |
label |
Ciąg znaków | To jest etykieta określona dla dostawy w żądaniu. | |
penaltyCost |
Liczba | Jest to koszt kary, który ponosisz, gdy optymalizator pominie tę przesyłkę. Odpowiada on wartości penaltyCost podanej w żądaniu. |