Interpretowanie odpowiedzi

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 dla każdego pojazdu z przypisanymi przesyłkami. Każdy Route 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.

Niektóre właściwości mogą nie być zawsze wypełniane w zależności od wyników optymalizacji:

  1. skippedShipments[] zawiera listę przesyłek, które nie są realizowane przez żaden pojazd. Przesyłkę można pominąć, jeśli nie można jej zrealizować w ramach określonych ograniczeń lub jeśli koszt jej realizacji przekracza koszt kary. Jeśli na przykład informacje o odbioru lub dostawie są bardzo wąskie timeWindow, może nie być możliwe lub ekonomiczne udostępnienie pojazdu dokonanie wizyty w wymaganym przedziale czasu.
  2. Wartość validationErrors[] określa błędy, które powodują, że żądanie jest nieprawidłowe lub niemożliwe do rozwiązania, gdy parametr solvingMode ma wartość VALIDATE_ONLY. W normalnym trybie DEFAULT_SOLVE błędy weryfikacji będą się pojawiać 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 danej prośby. 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 liczby Vehicle w odpowiednich wiadomość z prośbą. 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 ma zakończyć trasę.

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 indeks VisitRequest z poziomu 0 w tablicy Shipment.pickups lub Shipment.deliveries w odpowiednim żądaniu, które reprezentuje zmienna Visit. Odpowiedzi REST pomijają tę właściwość, gdy wynosi zero.
  • startTime to godzina planowanego rozpoczęcia wizyty.
  • loadDemands mapuje typ wczytywania, aby wczytać ilość potrzebną do ukończenia Visit Kwoty obciążenia są ujemne w przypadku wizyt związanych z realizacją wyświetleń, co odzwierciedla obciążenie wyjmowanie ich z pojazdu.

Przykładowa wartość Visit:

{
  "routes": [
    {
      ...
      "visits": [
        {
          "isPickup": true,
          "startTime": "2024-02-13T00:00:00Z",
          "detour": "0s"
        },
        ...
      ],
    },
    ...
  ],
  ...
}

Każdy element ShipmentRoute zawiera uporządkowaną listę elementów transitions, które reprezentują podróże między elementami visits danego pojazdu. Ważna wiadomość Transition Właściwości (REST, gRPC) obejmują:

  • startTime to czas, w którym pojazd rozpocznie działanie i przejścia z sieci.
  • 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: i przejścia z sieci.
  • waitDuration oznacza czas bezczynności, po którym pojazd czeka, zanim będzie mógł rozpocznie się Visit. Może to być spowodowane tym, że start_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 atrybutu penaltyCost, 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 sekcji Parametry modelu kosztowego.

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 spędzony przez pojazdy na trasie podczas wykonywania swoich zadań.
  • waitDuration to łączny czas, przez jaki pojazdy spędziły czas na realizacji swoje trasy.
  • delayDuration to łączny czas opóźnienia pojazdów. Zwykle jest to zero, chyba że w żądaniu użyto parametru TransitionAttributes.
  • breakDuration to łączny czas, jaki pojazd poświęca na przerwy podczas realizowania swoich tras.
  • visitDuration to łączny czas, jaki pojazdy spędzają na wykonywaniu wizyt podczas realizacji swoich tras. Jest to suma wszystkich wartości VisitRequest.duration dla VisitRequest odpowiadających Visit przypisanych do danego pojazdu.
  • totalDuration to łączny czas potrzebny na przejechanie trasy przez pojazdy.
  • travelDistanceMeters to całkowita odległość pokonana przez pojazdy podczas realizowania swoich tras.
  • maxLoads mapuje typy ładunków na maksymalną ilość ładunku przewożonego przez pojazdy w dowolnym punkcie ich trasy.

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
    }
  }
}