Method: projects.locations.optimizeTours

Wysyła polecenie OptimizeToursRequest zawierające wartość ShipmentModel i zwraca wartość OptimizeToursResponse zawierającą ShipmentRoute, czyli zbiór tras, które mają zostać wykonane przez pojazdy, które minimalizują całkowity koszt.

Model ShipmentModel składa się głównie z elementów Shipment, które należy wykonać, i elementów Vehicle, które można wykorzystać do transportu elementów Shipment. Elementy ShipmentRoute przypisują element Shipment do elementów Vehicle. Dokładniej rzecz ujmując, system przypisuje każdemu pojazdowi serię Visit, gdzie Visit odpowiada wartości VisitRequest, która oznacza odbiór lub dostawę w przypadku produktu Shipment.

Celem jest przypisanie do tych elementów zamówienia wartości ShipmentRoute, które minimalizują całkowity koszt, przy którym w parametrze ShipmentModel zdefiniowany jest koszt z wieloma komponentami.Vehicle

Żądanie HTTP

POST https://routeoptimization.googleapis.com/v1/{parent=projects/*/locations/*}:optimizeTours

Adres URL używa składni transkodowania gRPC.

Parametry ścieżki

Parametry
parent

string

To pole jest wymagane. Aby zadzwonić, wybierz projekt lub lokalizację.

Format: * projects/{project-id} * projects/{project-id}/locations/{location-id}

Jeśli nie podasz lokalizacji, region zostanie wybrany automatycznie.

Treść żądania

Treść żądania zawiera dane o następującej strukturze:

Zapis JSON
{
  "timeout": string,
  "model": {
    object (ShipmentModel)
  },
  "solvingMode": enum (SolvingMode),
  "searchMode": enum (SearchMode),
  "injectedFirstSolutionRoutes": [
    {
      object (ShipmentRoute)
    }
  ],
  "injectedSolutionConstraint": {
    object (InjectedSolutionConstraint)
  },
  "refreshDetailsRoutes": [
    {
      object (ShipmentRoute)
    }
  ],
  "interpretInjectedSolutionsUsingLabels": boolean,
  "considerRoadTraffic": boolean,
  "populatePolylines": boolean,
  "populateTransitionPolylines": boolean,
  "allowLargeDeadlineDespiteInterruptionRisk": boolean,
  "useGeodesicDistances": boolean,
  "label": string,
  "geodesicMetersPerSecond": number,
  "maxValidationErrors": integer
}
Pola
timeout

string (Duration format)

Jeśli ten limit czasu jest ustawiony, serwer zwraca odpowiedź przed upłynięciem tego limitu lub upłynięciem terminu przez serwer w przypadku żądań synchronicznych (w zależności od tego, co nastąpi wcześniej).

W przypadku żądań asynchronicznych serwer wygeneruje rozwiązanie (jeśli będzie to możliwe) przed upływem limitu czasu oczekiwania.

Czas trwania w sekundach z maksymalnie 9 cyframi po przecinku, kończącym się cyframi „s”. Przykład: "3.5s".

model

object (ShipmentModel)

Model dostawy do rozwiązania.

solvingMode

enum (SolvingMode)

Domyślnie tryb rozwiązywania to DEFAULT_SOLVE (0).

searchMode

enum (SearchMode)

Tryb wyszukiwania użyty do rozwiązania żądania.

injectedFirstSolutionRoutes[]

object (ShipmentRoute)

Wskaż algorytm optymalizacji, aby znaleźć pierwsze rozwiązanie podobne do poprzedniego.

Model jest ograniczony na czas tworzenia pierwszego rozwiązania. Przesyłki, które nie zostały wykonane na danej trasie, są domyślnie pomijane przy pierwszym rozwiązaniu, ale mogą być realizowane w ramach kolejnych rozwiązań.

Rozwiązanie musi spełniać pewne podstawowe założenia dotyczące poprawności:

  • w przypadku wszystkich tras wartość vehicleIndex musi się znajdować w zakresie i nie może być duplikatem.
  • dla wszystkich wizyt, shipmentIndex i visitRequestIndex musi się mieścić w zakresie.
  • informacje o przesyłce mogą być wskazane tylko na jednej trasie;
  • odbiór przesyłki z odbiorem musi zostać wykonany przed dostawą.
  • można zrealizować tylko jedną alternatywę dla odbioru lub dostawy.
  • dla wszystkich tras wydłuża się (tj. vehicleStartTime <= visits[0].start_time <= visits[1].start_time ... <= vehicleEndTime).
  • wysyłka może być zrealizowana wyłącznie w dozwolonym pojeździe. Pojazd jest dozwolony, jeśli pole Shipment.allowed_vehicle_indices jest puste lub jeśli Shipment.allowed_vehicle_indices zawiera parametr vehicleIndex.

Jeśli wstrzykiwane rozwiązanie nie jest możliwe, nie zawsze jest zwracany błąd walidacji, a zamiast tego może zostać zwrócony błąd wskazujący na niewykonalność.

injectedSolutionConstraint

object (InjectedSolutionConstraint)

Ogranicz algorytm optymalizacji, aby znaleźć rozwiązanie podobne do poprzedniego. W ten sposób można na przykład zablokować fragmenty tras, które zostały już zakończone lub które mają zostać ukończone, ale nie mogą być modyfikowane.

Jeśli wstrzykiwane rozwiązanie nie jest możliwe, nie zawsze jest zwracany błąd walidacji, a zamiast tego może zostać zwrócony błąd wskazujący na niewykonalność.

refreshDetailsRoutes[]

object (ShipmentRoute)

Jeśli pole nie jest puste, podane trasy zostaną odświeżone bez zmiany pierwotnej sekwencji wizyt lub czasu podróży. Zostaną zaktualizowane tylko inne szczegóły. To nie rozwiąże modelu.

Od 11 grudnia 2020 roku ta funkcja wypełni tylko linie łamane w przypadku niepustych tras. Wymaga też, aby atrybut populatePolylines miał wartość prawda.

Pola routePolyline przekazywanych tras mogą być niespójne z trasą transitions.

Tego pola nie można używać razem z polami injectedFirstSolutionRoutes ani injectedSolutionConstraint.

Shipment.ignore i Vehicle.ignore nie mają wpływu na działanie systemu. Linie łamane są nadal wypełniane podczas wszystkich wizyt na niepustych trasach niezależnie od tego, czy powiązane przesyłki lub pojazdy są ignorowane.

interpretInjectedSolutionsUsingLabels

boolean

Jeśli tak:

Ta interpretacja dotyczy pól injectedFirstSolutionRoutes, injectedSolutionConstraint i refreshDetailsRoutes. Można go użyć, gdy indeksy dostawy lub pojazdów w zgłoszeniu zmieniły się od momentu utworzenia rozwiązania, np. w związku z usunięciem przesyłki lub pojazdem z żądania albo dodaniem ich do prośby.

Jeśli ma wartość true (prawda), etykiety z następujących kategorii mogą pojawić się w danej kategorii co najwyżej raz:

Jeśli parametr vehicleLabel we wstrzykiwanym rozwiązaniu nie odpowiada pojazdowi wysyłającemu żądanie, odpowiednia trasa jest usuwana z rozwiązania wraz z jego wizytami. Jeśli shipmentLabel we wstrzykiwanym roztworze nie odpowiada dostawie, odpowiednia wizyta jest usuwana z rozwiązania. Jeśli element SkippedShipment.label we wstrzykiwanym roztworze nie odpowiada przesyłce żądania, parametr SkippedShipment jest usuwany z rozwiązania.

Usunięcie wizyt lub całych tras z wstrzykiwanego rozwiązania może mieć wpływ na domniemane ograniczenia, co może prowadzić do zmian w rozwiązaniu, błędów weryfikacji lub niewykonalności.

UWAGA: element wywołujący musi upewnić się, że każdy element Vehicle.label (odp. Shipment.label) jednoznacznie identyfikuje pojazd (resp. wysyłki) w 2 odpowiednich żądaniach: w przeszłości, która spowodowała wygenerowanie OptimizeToursResponse użytego we wstrzykiwanym rozwiązaniu, oraz bieżące żądanie, które obejmuje wstrzyknięte rozwiązanie. Opisane powyżej testy unikalności nie wystarczą, aby spełnić to wymaganie.

considerRoadTraffic

boolean

Uwzględnij szacowany ruch przy obliczaniu pól ShipmentRoute Transition.travel_duration, Visit.start_time i vehicleEndTime; podczas ustawiania pola ShipmentRoute.has_traffic_infeasibilities i obliczania pola OptimizeToursResponse.total_cost.

populatePolylines

boolean

Jeśli ma wartość prawda, linie łamane w odpowiedzi ShipmentRoute będą wypełniane.

populateTransitionPolylines

boolean

Jeśli ma wartość true, w odpowiedzi ShipmentRoute.transitions linie łamane zostaną wypełnione.

allowLargeDeadlineDespiteInterruptionRisk

boolean

Jeśli tak, termin przesyłania prośby (patrz https://grpc.io/blog/deadlines) może wynosić maksymalnie 60 minut. W przeciwnym razie maksymalny termin to tylko 30 minut. Żądania długotrwałe wiążą się z znacznie większym (ale nadal niewielkim) ryzykiem zakłóceń w działaniu.

useGeodesicDistances

boolean

Jeśli ma wartość prawda, odległości będą obliczane na podstawie odległości geodezyjnych, a nie Map Google, a czasy podróży będą obliczane na podstawie odległości geodezyjnych z prędkością określoną przez geodesicMetersPerSecond.

label

string

Etykieta, która może zostać użyta do zidentyfikowania tego żądania, zgłoszona w OptimizeToursResponse.request_label.

geodesicMetersPerSecond

number

Jeśli useGeodesicDistances ma wartość prawda, to pole musi być ustawione i określa szybkość stosowane do obliczania czasu podróży. Jej wartość musi wynosić co najmniej 1 metr/s.

maxValidationErrors

integer

Skraca liczbę zwróconych błędów weryfikacji. Te błędy są zwykle dołączone do ładunku błędu INVALID_ARGUMENT jako szczegółowa informacja o błędzie BadRequest (https://cloud.google.com/apis/design/errors#error_details), chyba że resolutionMode=VALIDATE_ONLY: zapoznaj się z polem OptimizeToursResponse.validation_errors. Domyślna wartość to 100,a limit to 10 000.

Treść odpowiedzi

W przypadku powodzenia treść odpowiedzi obejmuje wystąpienie elementu OptimizeToursResponse.

Zakresy autoryzacji

Wymaga następującego zakresu OAuth:

  • https://www.googleapis.com/auth/cloud-platform