OptimizeToursResponse

Odpowiedź po rozwiązaniu problemu optymalizacji wycieczki obejmującego trasy, po których porusza się każdy pojazd, pominięte przesyłki i całkowity koszt rozwiązania.

Zapis JSON
{
  "routes": [
    {
      object (ShipmentRoute)
    }
  ],
  "requestLabel": string,
  "skippedShipments": [
    {
      object (SkippedShipment)
    }
  ],
  "validationErrors": [
    {
      object (OptimizeToursValidationError)
    }
  ],
  "metrics": {
    object (Metrics)
  }
}
Pola
routes[]

object (ShipmentRoute)

Trasy obliczone dla każdego pojazdu; i-ta trasa odpowiada i-temu pojazdowi w modelu.

requestLabel

string

Kopia OptimizeToursRequest.label, jeśli w żądaniu określono etykietę.

skippedShipments[]

object (SkippedShipment)

Lista wszystkich pominiętych przesyłek.

validationErrors[]

object (OptimizeToursValidationError)

Lista wszystkich błędów weryfikacji, które udało nam się wykryć niezależnie. Zobacz wyjaśnienie „WIELE BŁĘDÓW” dotyczące komunikatu OptimizeToursValidationError. W przypadku wartości solvingMode = DEFAULT_SOLVE zamiast błędów będą wyświetlane ostrzeżenia.

metrics

object (Metrics)

Czas trwania, odległość i wskaźniki wykorzystania w tym rozwiązaniu.

OptimizeToursValidationError

Opisuje błąd lub ostrzeżenie napotkane podczas weryfikowania elementu OptimizeToursRequest.

Zapis JSON
{
  "code": integer,
  "displayName": string,
  "fields": [
    {
      object (FieldReference)
    }
  ],
  "errorMessage": string,
  "offendingValues": string
}
Pola
code

integer

Błąd weryfikacji jest definiowany przez parę (code, displayName), która jest zawsze obecna.

Pola w sekcji po tej sekcji zawierają więcej informacji o błędzie.

WIELU BŁĘDÓW: jeśli wystąpiło wiele błędów, proces weryfikacji próbuje zwrócić kilka z nich. Ten proces, podobnie jak w przypadku kompilatora, nie jest idealny. Niektóre błędy weryfikacji są „krytyczne”, co oznacza, że zatrzymują cały proces weryfikacji. Dotyczy to m.in. błędów displayName="UNSPECIFIED". Niektóre błędy mogą spowodować, że podczas weryfikacji zostaną pominięte inne błędy.

STABILNOŚĆ: codedisplayName powinny być bardzo stabilne. Z czasem mogą jednak pojawić się nowe kody i nazwy wyświetlania, co może spowodować, że dana (nieprawidłowa) prośba zwróci inną parę (code, displayName), ponieważ nowy błąd zastąpi stary. Zobacz np. „WIELE BŁĘDÓW”.

displayName

string

Wyświetlana nazwa błędu.

fields[]

object (FieldReference)

Kontekst błędu może mieć wartość 0, 1 (w większości przypadków) lub większą liczbę pól. W przypadku np. w przypadku pojazdu nr 4 i pierwszej dostawy nr 2 można wykonać te czynności:

fields { name: "vehicles" index: 4}
fields { name: "shipments" index: 2 subField {name: "pickups" index: 0} }

Pamiętaj jednak, że moc zbioru funkcji fields nie powinna się zmieniać w przypadku danego kodu błędu.

errorMessage

string

Zrozumiały dla człowieka ciąg tekstowy opisujący błąd. Między code a errorMessage występuje mapowanie 1:1 (gdy kod != „UNSPECIFIED”).

Stabilność: niestabilna: komunikat o błędzie powiązany z danym parametrem code może się z czasem zmienić (być może został wyjaśniony). Zamiast nich korzystaj z tych zasad: displayName i code.

offendingValues

string

Może zawierać wartości pól. Ta opcja nie jest zawsze dostępna. Nie należy polegać wyłącznie na tym narzędziu i używać go wyłącznie do ręcznego debugowania modelu.

FieldReference

Określa kontekst błędu weryfikacji. FieldReference zawsze odnosi się do danego pola w tym pliku i ma taką samą strukturę hierarchiczną. Możemy na przykład określić element 2 w elementach startTimeWindows pojazdu 5 za pomocą:

name: "vehicles" index: 5 subField { name: "endTimeWindows" index: 2 }

Jednak pomijamy elementy najwyższego poziomu, takie jak OptimizeToursRequest lub ShipmentModel, aby nie zaśmiecać wiadomości.

Zapis JSON
{
  "name": string,
  "subField": {
    object (FieldReference)
  },

  // Union field index_or_key can be only one of the following:
  "index": integer,
  "key": string
  // End of list of possible types for union field index_or_key.
}
Pola
name

string

Nazwa pola, np. „pojazdy”.

subField

object (FieldReference)

W razie potrzeby zagnieżdżone pole podrzędne.

Pole sumy index_or_key.

index_or_key może być tylko jednym z tych elementów:

index

integer

Indeks pola, jeśli jest powtarzany.

key

string

Klucz, jeśli pole jest mapą.

Dane

Ogólne dane, zagregowane na podstawie wszystkich tras.

Zapis JSON
{
  "aggregatedRouteMetrics": {
    object (AggregatedMetrics)
  },
  "skippedMandatoryShipmentCount": integer,
  "usedVehicleCount": integer,
  "earliestVehicleStartTime": string,
  "latestVehicleEndTime": string,
  "costs": {
    string: number,
    ...
  },
  "totalCost": number
}
Pola
aggregatedRouteMetrics

object (AggregatedMetrics)

Dane zbiorcze dotyczące tras. Każde dane to suma (lub wartość maksymalna w przypadku obciążeń) wszystkich pól ShipmentRoute.metrics o tej samej nazwie.

skippedMandatoryShipmentCount

integer

Liczba pominiętych przesyłek obowiązkowych.

usedVehicleCount

integer

Liczba używanych pojazdów. Uwaga: jeśli trasa pojazdu jest pusta, a wartość atrybutu Vehicle.used_if_route_is_empty to prawda, pojazd jest uważany za używany.

earliestVehicleStartTime

string (Timestamp format)

Najwcześniejszy czas uruchomienia używanego pojazdu, obliczany jako minimum dla wszystkich używanych pojazdów w okresie ShipmentRoute.vehicle_start_time.

Sygnatura czasowa w formacie RFC3339 UTC „Zulu” z rozdzielczością nanosekundy i maksymalnie 9 cyframi po przecinku. Przykłady: "2014-10-02T15:01:23Z" i "2014-10-02T15:01:23.045123456Z".

latestVehicleEndTime

string (Timestamp format)

Najpóźniejszy czas zakończenia dla używanego pojazdu, obliczony jako maksymalny dla wszystkich używanych pojazdów ShipmentRoute.vehicle_end_time.

Sygnatura czasowa w formacie RFC3339 UTC „Zulu” z rozdzielczością nanosekundy i maksymalnie 9 cyframi po przecinku. Przykłady: "2014-10-02T15:01:23Z""2014-10-02T15:01:23.045123456Z".

costs

map (key: string, value: number)

Koszt rozwiązania z podziałem na pola żądania związane z kosztami. Klucze to ścieżki proto, odnoszące się do wejścia OptimizeToursRequest, np. „model.shipments.pickups.cost”, a wartości to łączny koszt wygenerowany przez odpowiednie pole kosztu, zsumowany w całym rozwiązaniu. Inaczej mówiąc, koszt["model.shipments.pickups.cost"] to suma wszystkich kosztów odbioru w ramach danego rozwiązania. Wszystkie koszty zdefiniowane w modelu są uwzględnione w szczegółowym raporcie z wyjątkiem kosztów związanych z atrybutami przejścia, które od 2022 roku są raportowane tylko w postaci zbiorczej.

totalCost

number

Całkowity koszt rozwiązania. Suma wszystkich wartości na mapie kosztów.