Interpretowanie odpowiedzi

Deweloperzy z Europejskiego Obszaru Gospodarczego (EOG)

Interfejs Route Optimization API zwraca trasy dla pojazdów w odpowiednim żądaniu. Przesyłki są przypisywane do pojazdów lub mogą być pomijane w zależności od właściwości żądania.

OptimizeToursResponse (REST, gRPC) ma 2 główne właściwości najwyższego poziomu:

  • routes[] – trasy dla każdego pojazdu z przypisanymi do niego przesyłkami. Każda z nichRoute zawiera dane odzwierciedlające właściwości danej trasy.
  • metrics to zagregowane dane dotyczące całej odpowiedzi, obejmujące wszystkie pojazdy i plany tras. Dane najwyższego poziomu zawierają te same właściwości co dane dotyczące poszczególnych tras, ale ich wartości są zagregowane we wszystkich trasach.

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

  1. skippedShipments[] zawiera przesyłki, które nie są realizowane przez żaden pojazd. Dostawę można pominąć, jeśli nie można jej zrealizować w określonych ramach lub jeśli koszt dostawy przekracza koszt kary. Jeśli na przykład przedział czasu odbioru lub dostawy przesyłki jest bardzo wąskitimeWindow, pojazd może nie być w stanie zrealizować wizyty w wymaganym przedziale czasu lub może to być nieopłacalne.
  2. validationErrors[] określa błędy, które powodują, że żądanie jest nieprawidłowe lub niemożliwe do rozwiązania, gdy wartość solvingMode żądania jest ustawiona na VALIDATE_ONLY. W normalnym trybie DEFAULT_SOLVE błędy weryfikacji będą wyświetlane w komunikacie o błędzie zamiast w treści odpowiedzi. Pamiętaj, że VALIDATE_ONLYtryb rozwiązywania problemów może zgłaszać wiele błędów jednocześnie, co jest przydatne do szybkiego debugowania żądań.

Właściwości trasy

Każdy wpis routes[] to wiadomość ShipmentRoute (REST, gRPC). Każdy element ShipmentRoute reprezentuje przypisanie trasy do konkretnego pojazdu z żądania. Ważne właściwości ShipmentRoute powiązane z odpowiednim elementem Vehicle to:

  • vehicleIndex to indeks Vehicle w odpowiedniej wiadomości z żądaniem (liczony od zera). Odpowiedzi REST pomijają tę właściwość, gdy jej wartość wynosi zero.
  • vehicleStartTime to czas, w którym pojazd musi rozpocząć trasę.
  • vehicleEndTime to czas, w którym pojazd ma zakończyć trasę.

W odpowiedzi znak routes będzie wyglądać tak:

{
  "routes": [
    {
      "vehicleStartTime": "2024-02-13T00:00:00Z",
      "vehicleEndTime": "2024-02-13T00:38:42Z",
      "visits": [
        ...
      ],
      "transitions": [
        ...
      ],
      "metrics": {
        ...
      },
      ...
    }
  ],
  ...
}

Każda ShipmentRoute zawiera uporządkowaną listę visits, które pojazd będzie realizować. Każdy znak Visit (REST, gRPC) reprezentuje znak VisitRequest (REST, gRPC) z odpowiedniego żądania. Ważne Visitwłaściwości to:

  • shipmentIndex to indeks przesyłki, do której należy ta wizyta, w odpowiednim żądaniu (liczony od zera).
  • isPickup ma wartość „prawda”, gdy wizyta jest odbiorem, a wartość „fałsz”, gdy jest dostawą. W przypadku odpowiedzi REST ta właściwość jest pomijana, gdy wartość to „false”.
  • visitRequestIndex to indeks elementu VisitRequest od Shipment.pickups lub Shipment.deliveries w odpowiednim żądaniu, które reprezentuje element Visit. Odpowiedzi REST pomijają tę właściwość, gdy wartość wynosi zero.
  • startTime to oczekiwany czas rozpoczęcia wizyty.
  • loadDemands mapuje typ obciążenia na ilość obciążenia wymaganą do ukończenia Visit. W przypadku wizyt związanych z dostawą wartości obciążenia są ujemne, co oznacza, że ładunek jest usuwany z pojazdu.

Przykładowa wartość Visit wygląda tak:

{
  "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óż między visits danym pojazdem. Ważne właściwości wiadomości Transition (REST, gRPC) to:

  • startTime to czas, w którym pojazd zacznie przeprowadzać zmianę.
  • travelDuration to czas, w którym pojazd musi się poruszać, aby zakończyć przejście.
  • travelDistanceMeters to odległość w metrach, jaką musi pokonać pojazd, aby zakończyć przejście.
  • trafficInfoUnavailable wskazuje, czy dla przejścia dostępne są dane o ruchu.
  • waitDuration oznacza czas bezczynności pojazdu, który musi upłynąć, zanim będzie mógł rozpocząć kolejną Visit. Może to być spowodowane start_time poniższych Visit.
  • totalDuration to łączny czas trwania przejścia, w tym czas podróży, oczekiwania, przerw i opóźnień.
  • vehicleLoads mapuje typ obciążenia na ilość ładunku przewożonego przez pojazd podczas tego przejścia.

Przykładowa wartość Transition wygląda tak:

{
  "routes": [
    {
      ...
      "transitions": [
        ...
        {
          "travelDuration": "1171s",
          "travelDistanceMeters": 9004,
          "waitDuration": "0s",
          "totalDuration": "1171s",
          "startTime": "2024-02-13T00:00:00Z"
        },
        ...
      ],
      ...
    }
  ],
  ...
}

Więcej informacji o relacji między viststransitions znajdziesz w artykule Optymalizacja kolejności przystanków odbioru i dostawy oraz w ShipmentRoutedokumentacji (REST, gRPC). Więcej informacji o właściwościach routePolylinerouteToken wiadomości Transition znajdziesz w artykule Przejściowe polilinie i tokeny trasy.

Właściwości danych

Metrics wiadomość (REST, gRPC) podsumowuje całe rozwiązanie. Niektóre ważne Metrics właściwości to:

  • totalCost to łączny koszt poniesiony na pokonanie tras. Więcej informacji o kosztach znajdziesz w sekcji Parametry modelu kosztów.
  • usedVehicleCount to łączna liczba pojazdów używanych w rozwiązaniu. Pojazdy mogą mieć puste trasy, gdy optymalizator uzna, że ich użycie jest niepotrzebne.
  • skippedMandatoryShipmentCount to liczba pominiętych przesyłek, które są „obowiązkowe”. Wymagana dostawa nie określa penaltyCost, które są ponoszone w przypadku pominięcia dostawy. Wymagane dostawy można pominąć, jeśli ich realizacja nie jest możliwa w ramach określonych ograniczeń. Więcej informacji o kosztach znajdziesz w sekcji Parametry modelu kosztów.

Dodatkowe dane są raportowane jako wiadomości AggregatedMetrics (REST, gRPC). Typ wiadomości AggregatedMetrics jest używany w przypadku właściwości Metrics.aggregatedRouteMetrics i właściwości ShipmentRoute.metrics. Właściwość Metrics.aggregatedRouteMetrics zawiera dane zagregowane ze wszystkich ShipmentRouteOptimizeToursResponse. Każda usługa ShipmentRoute.metrics zawiera dane dotyczące konkretnego ShipmentRoute.

Ważne właściwości AggregatedMetrics to:

  • performedShipmentCount to liczba przesyłek zrealizowanych przez pojazdy na całej trasie.
  • travelDuration to łączny czas, jaki pojazdy spędzają w drodze podczas realizacji tras.
  • waitDuration to łączny czas oczekiwania pojazdów podczas realizacji tras.
  • 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 pojazdy spędzają na przerwach podczas pokonywania tras.
  • visitDuration to łączny czas, jaki pojazdy spędzają na wizytach podczas realizacji 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 tras przez pojazdy.
  • travelDistanceMeters to łączna odległość pokonana przez pojazdy podczas realizacji tras.
  • maxLoads mapuje typy ładunków na maksymalną ilość ładunku przewożonego przez pojazdy w dowolnym momencie na trasie.

Przykładowa wiadomość 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 sekcji Tworzenie żądania wygląda tak:

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