Interpretowanie odpowiedzi interfejsu Route Optimization API… z psami

Deweloperzy z Europejskiego Obszaru Gospodarczego (EOG)

Uwaga dotycząca produkcji

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ą kierowca ma pokonać. Z tego przewodnika dowiesz się, jak go odczytać.

Podsumowanie planu trasy

W scenariuszu 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.
  • Odstawić Chihuahuę 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ą. Wyniki mogą się nieco różnić, ponieważ czas podróży i odległość zależą od aktualnych danych o ruchu drogowym.

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 zawiera obiekt ShipmentRoute z typem wiadomości visits oraz obiekt Metrics z aggregatedRouteMetrics i totalCost.

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 jedzie 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 indeksowanej od zera, która w przypadku furgonetki wynosi 0. Pola vehicleStartTime i vehicleEndTime informują kierowcę, kiedy ma rozpocząć i zakończyć zmianę.

Interfejs 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.

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"
  • isPickup: pomocnicze pole wartości logicznej.
    • Odbiór: isPickup = true
    • Dostawa: isPickup = false (pominięto w pliku JSON)

Aby określić dokładną sekwencję zdarzeń i oczekiwany czas przybycia do każdej lokalizacji, odczytaj tablicę visits w 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) Prawda czy PICKUP_SHIPMENT 2024-02-13T16:20:00Z Odbierz berneńskiego psa pasterskiego o 8:20.
Drugie odwiedziny 1 True (Prawda) lub 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ż pole visitRequestIndex, które 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 zawsze wynosi 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:

  1. transitions[0] (podróż samochodem od początku do pierwszej wizyty)
  2. visits[0] (pierwsza wizyta)
  3. transitions[1] (podróż samochodem od pierwszej do drugiej wizyty)
  4. visits[1] (druga wizyta)
  5. ...
  6. visits[N-1] (ostatnia wizyta, gdzie N to łączna liczba wizyt)
  7. 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 z opieką nad psem.

Sekwencja Nazwa pola Wartość startTime (UTC) Szczegóły Działanie
Pierwsze przejście transitions[0] 2024-02-13T15:55:04Z travelDuration: 1496s
travelDistanceMeters: 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 o 8:20. Wizyta potrwa 5 minut.
Drugie przejście transitions[1] 2024-02-13T16:25:00Z travelDuration: 1992s
travelDistanceMeters: 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: 1
isPickup: True
Odbierz chihuahua od 8:58. Wizyta potrwa 5 minut.
Trzecie przejście transitions[2] 2024-02-13T17:03:12Z travelDuration: 1252 s
travelDistanceMeters: 7860
waitDuration: 356 s
Przejedź 8 km w 21 minut z South Sunset Playground z powrotem do żłobka, zaczynając o 9:03. Przyjedź o 9:24 i poczekaj 6 minut na otwarcie okna odbioru.
Trzecia wizyta visits[2] 2024-02-13T17:30:00Z shipmentIndex: 0 (pominięte w JSON)
isPickup: False (pominięte w 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: 0s
travelDistanceMeters: 0 (pominięte w JSON)
Nie jedź samochodem. Przygotuj się do zostawienia chihuahua w hotelu dla psów o 9:35.
Czwarta wizyta visits[3] 2024-02-13T17:35:00Z shipmentIndex: 1
isPickup: False (pominięte w JSON)
Zostaw chihuahua w hotelu dla psów od 9:35. Wizyta potrwa 5 minut.
Piąte przejście transitions[4] 2024-02-13T17:40:00Z travelDuration: 0s
travelDistanceMeters: 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 podane 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 konkretną trasą (wynagrodzenie kierowcy), natomiast łą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ął przesyłkę z owczarkiem niemieckim, dodaje on karę w wysokości 100 USD, co daje łączny koszt 147,22 USD.

Dlaczego dostawa została pominięta?

Optymalizator wyświetla listę wszystkich przesyłek, 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 ich realizacja jest kosztowna. Pominie przesyłkę tylko wtedy, gdy nie będzie można jej dopasować do żadnej trasy, na przykład dlatego, że jej okno czasowe koliduje z innymi przesyłkami.
  • Dostawy opcjonalne (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 Tower 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 USD w porównaniu z 1000 USD w przypadku zwykłego klienta), optymalizator pomija go i ponosi karę w wysokości 100 USD.

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 określona 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 1 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 nad psem 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 Jest to łączny koszt tej konkretnej trasy. W tym scenariuszu dotyczącym hotelu dla psów łączny koszt trasy furgonetki wynosi 47.22.
vehicleFullness Obiekt (VehicleFullness) Jest to zestawienie informacji o tym, 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 na zmianę 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 hotelu dla psów ma wartość „true” (prawda), gdy pies jest odbierany, i „false” (fałsz) lub jest pusta, gdy pies jest zostawiany w hotelu.
startTime Sygnatura czasowa Jest to szacowany czas rozpoczęcia wizyty. W przypadku hotelu dla psów jest to moment, w którym kierowca puka do drzwi.
detour Czas trwania Jest to dodatkowy czas, który optymalizator dodaje do podróży tej konkretnej przesyłki. Objazd to różnica między rzeczywistym planem trasy a idealną bezpośrednią trasą, gdy kierowca nie ma innych przesyłek ani zadań do wykonania.

W tym scenariuszu dotyczącym hotelu dla psów pierwsza wizyta, czyli odbiór berneńskiego psa pasterskiego, ma objazd o wartości 0, ponieważ kierowca jedzie bezpośrednio z hotelu 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 spędzony na podróży między wizytami. Na przykład w tym scenariuszu z opieką nad psami kierowca spędza około 25 minut na dojeździe z miejsca opieki 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 hotelu dla psów jest to 6 minut (356 sekund) w przypadku trzeciego przejścia, ponieważ kierowca przyjeżdża do hotelu 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 godzina 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 hotelu 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 jest łą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 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 przerw. W tym scenariuszu dotyczącym hotelu dla psów nie ma przerw.
visitDuration Czas trwania Jest to łączny czas poświęcony na świadczenie usług podczas wizyt. W przypadku tego scenariusza z hotelem dla psów 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 psem łą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 odebrał 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óra w żądaniu została określona jako 5 godzin.
activeSpan Liczba Jest to stosunek łącznej długości zmiany kierowcy do godzin pracy planu trasy. Niższa wartość oznacza, że kierowca spędza mniej czasu w ciągu dnia roboczego na prowadzeniu pojazdu. W przypadku tego scenariusza z opieką nad psami jest to 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 scenariuszu 2 reprezentuje 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 pomija tę przesyłkę. Odpowiada on wartości penaltyCost podanej w żądaniu.