Method: projects.locations.optimizeToursLongRunning

Jest to wariant metody locations.optimizeTours przeznaczony do optymalizacji z dużymi wartościami limitu czasu. W przypadku optymalizacji, które trwają dłużej niż kilka minut, należy preferować metodę locations.optimizeTours.

Zwrócony obiekt long-running operation (LRO) będzie mieć nazwę w formacie <parent>/operations/<operation_id> i może służyć do śledzenia postępu obliczeń. Typ pola metadata to OptimizeToursLongRunningMetadata. W przypadku powodzenia pole response ma typ OptimizeToursResponse.

Funkcja eksperymentalna: więcej informacji znajdziesz na stronie https://developers.google.com/maps/tt/route-optimization/experimental/otlr/make-request.

Żądanie HTTP

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

Adres URL używa składni transkodowania gRPC.

Parametry ścieżki

Parametry
parent

string

Wymagane. Wybierz projekt lub lokalizację, do których chcesz zadzwonić.

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

Jeśli nie określisz 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 czas oczekiwania jest ustawiony, serwer zwraca odpowiedź, zanim upłynie czas oczekiwania lub termin serwera dla żądań synchronicznych, w zależności od tego, co nastąpi wcześniej.

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

Czas w sekundach z maksymalnie 9 miejscami po przecinku, zakończony literą „s”. Przykład: "3.5s".

model

object (ShipmentModel)

Model dostawy do rozwiązania.

solvingMode

enum (SolvingMode)

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

searchMode

enum (SearchMode)

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

injectedFirstSolutionRoutes[]

object (ShipmentRoute)

Pomaga algorytmowi optymalizacji w znalezieniu pierwszego rozwiązania, które jest podobne do poprzedniego.

Model jest ograniczony podczas tworzenia pierwszego rozwiązania. W pierwszym rozwiązaniu wszystkie przesyłki, które nie zostały zrealizowane na trasie, są domyślnie pomijane, ale mogą być realizowane w kolejnych rozwiązaniach.

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

  • w przypadku wszystkich tras vehicleIndex musi mieścić się w zakresie i nie może być powielany.
  • w przypadku wszystkich wizyt wartości shipmentIndexvisitRequestIndex muszą mieścić się w zakresie.
  • przesyłka może być uwzględniona tylko na jednej trasie;
  • odbiór przesyłki z odbiorem i dostawą musi zostać wykonany przed dostawą.
  • nie można wykonać więcej niż 1 alternatywy odbioru lub dostawy przesyłki;
  • w przypadku wszystkich tras czasy wydłużają się (tzn. vehicleStartTime <= visits[0].start_time <= visits[1].start_time ... <= vehicleEndTime).
  • dostawa może być realizowana tylko w pojazdach, które są do tego uprawnione; Pojazd jest dozwolony, jeśli Shipment.allowed_vehicle_indices jest pusty lub jego vehicleIndex jest zawarty w Shipment.allowed_vehicle_indices.

Jeśli wstrzyknięty kod nie jest wykonalny, niekoniecznie zwracany jest błąd weryfikacji. Zamiast tego może zostać zwrócony błąd wskazujący na brak możliwości wykonania.

injectedSolutionConstraint

object (InjectedSolutionConstraint)

Ograniczenie algorytmu optymalizacji do znalezienia ostatecznego rozwiązania podobnego do poprzedniego. Można go na przykład użyć do zamrożenia części tras, które zostały już ukończone lub mają zostać ukończone, ale nie mogą być modyfikowane.

Jeśli wstrzyknięty kod nie jest wykonalny, niekoniecznie zwracany jest błąd weryfikacji. Zamiast tego może zostać zwrócony błąd wskazujący na brak możliwości wykonania.

refreshDetailsRoutes[]

object (ShipmentRoute)

Jeśli nie jest pusty, dane trasy zostaną odświeżone bez zmiany ich sekwencji wizyt lub czasu podróży: zostaną zaktualizowane tylko inne szczegóły. Nie rozwiązuje to problemu.

Od listopada 2020 r. ta opcja wypełnia tylko linie wielokątów na niepustych trasach i wymaga, aby parametr populatePolylines miał wartość Prawda.

Pola routePolyline w przekazanych trasach mogą być niezgodne z trasą transitions.

Nie można go używać razem z kolumnami injectedFirstSolutionRoutes ani injectedSolutionConstraint.

Shipment.ignoreVehicle.ignore nie mają wpływu na sposób działania. Linie wielowymiarowe są nadal wypełniane między wszystkimi wizytami na wszystkich niepustych trasach niezależnie od tego, czy powiązane przesyłki lub pojazdy są ignorowane.

interpretInjectedSolutionsUsingLabels

boolean

Jeśli wartość to prawda:

Ta interpretacja dotyczy pól injectedFirstSolutionRoutes, injectedSolutionConstraintrefreshDetailsRoutes. Można go użyć, gdy indeksy przesyłek lub pojazdów w prośbie uległy zmianie od momentu utworzenia rozwiązania, np. dlatego, że przesyłki lub pojazdy zostały usunięte z prośby lub dodane do niej.

Jeśli ma wartość true, etykiety w tych kategoriach mogą się pojawiać maksymalnie raz w danej kategorii:

Jeśli vehicleLabel w wstrzykniętym rozwiązaniu nie odpowiada pojazdowi w żądaniu, odpowiednia trasa wraz z wizytami jest usuwana z rozwiązania. Jeśli shipmentLabel w wstrzykniętym rozwiązaniu nie odpowiada wysyłce żądania, odpowiednia wizyta zostaje usunięta z rozwiązania. Jeśli SkippedShipment.label w roztworze wstrzykniętym do rozwiązania nie odpowiada wysyłce żądania, SkippedShipment zostaje usunięty z roztworu.

Usunięcie wizyt na trasie lub całych tras z wstrzykniętego rozwiązania może mieć wpływ na implikowane ograniczenia, co może spowodować zmianę rozwiązania, błędy walidacji lub niemożliwość jego wykonania.

UWAGA: osoba dzwoniąca musi się upewnić, że każda wartość Vehicle.label (odpowiednio Shipment.label) jednoznacznie identyfikuje element pojazdu (odpowiednio przesyłki) używany w 2 odpowiednich żądaniach: poprzednim żądaniu, które wygenerowało OptimizeToursResponse użyte w wstrzykniętym rozwiązaniu, oraz bieżącym żądaniu, które zawiera wstrzyknięte rozwiązanie. Opisane powyżej kontrole unikalnych treści nie wystarczają do spełnienia tego wymagania.

considerRoadTraffic

boolean

Warto uwzględnić prognozę ruchu podczas obliczania pól ShipmentRoute Transition.travel_duration, Visit.start_timevehicleEndTime, ustawiania pola ShipmentRoute.has_traffic_infeasibilities oraz obliczania pola OptimizeToursResponse.total_cost.

populatePolylines

boolean

Jeśli ma wartość Prawda, w odpowiedzi ShipmentRoute zostaną wypełnione ścieżki poliliniowe.

populateTransitionPolylines

boolean

Jeśli ma wartość Prawda, w odpowiedzi ShipmentRoute.transitions zostaną wypełnione tokeny ścieżek i wielolinii.

allowLargeDeadlineDespiteInterruptionRisk

boolean

Jeśli ta opcja jest ustawiona, żądanie może mieć termin (patrz https://grpc.io/blog/deadlines) do 60 minut. W przeciwnym razie maksymalny termin to tylko 30 minut. Pamiętaj, że w przypadku długotrwałych żądań istnieje znacznie większe (choć nadal niewielkie) ryzyko przerwania.

useGeodesicDistances

boolean

Jeśli ustawisz wartość „prawda”, odległości przebytej na trasie obliczenia będą wykonywane na podstawie odległości geodezyjnych zamiast odległości w Mapach Google, a czasy przejazdu będą obliczane na podstawie odległości geodezyjnych z prędkością zdefiniowaną przez parametr geodesicMetersPerSecond.

label

string

Etykieta, która może służyć do identyfikowania tego żądania, zgłoszonego w formularzu OptimizeToursResponse.request_label.

geodesicMetersPerSecond

number

Gdy useGeodesicDistances ma wartość true, to pole musi być ustawione i określa szybkość stosowaną do obliczania czasu podróży. Jego wartość musi wynosić co najmniej 1,0 m/s.

maxValidationErrors

integer

Obcina zwracaną liczbę błędów weryfikacji. Te błędy są zwykle dołączane do ładunku błędu INVALID_ARGUMENT jako szczegóły błędu BadRequest (https://cloud.google.com/apis/design/errors#error_details), chyba że parametr solvingMode=VALIDATE_ONLY: patrz pole OptimizeToursResponse.validation_errors. Domyślna wartość to 100,a maksymalna – 10 tys.

Treść odpowiedzi

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

Zakresy autoryzacji

Wymaga następującego zakresu OAuth:

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

Uprawnienia

Wymaga tego uprawnienia IAM w zasobie parent:

  • routeoptimization.operations.create

Więcej informacji znajdziesz w dokumentacji dotyczącej uprawnień.