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 ją preferować zamiast metody locations.optimizeTours.

Zwrócona operacja long-running operation (LRO) będzie miała nazwę w formacie <parent>/operations/<operation_id> i może być używana do śledzenia postępu obliczeń. Typ pola metadata to OptimizeToursLongRunningMetadata. Jeśli operacja się powiedzie, pole response będzie miało typ OptimizeToursResponse.

Żą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. Docelowy projekt lub lokalizacja, w której ma zostać wykonane wywołanie.

Format:

  • projects/{project-id}
  • projects/{project-id}/locations/-

Regionalne wartości {location-id} nie są obsługiwane.

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ływem limitu czasu lub przed upływem terminu 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.

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)

Pomóż algorytmowi optymalizacji znaleźć pierwsze rozwiązanie, które jest podobne do poprzedniego.

Model jest ograniczony, gdy tworzone jest pierwsze rozwiązanie. Wszystkie przesyłki, które nie zostały zrealizowane na trasie, są domyślnie pomijane w pierwszym rozwiązaniu, ale mogą zostać zrealizowane w kolejnych rozwiązaniach.

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

  • W przypadku wszystkich tras vehicleIndex musi być w zakresie i nie może być duplikatem.
  • W przypadku wszystkich wizyt wartości shipmentIndex i visitRequestIndex muszą mieścić się w zakresie.
  • przesyłka może być uwzględniona tylko na jednej trasie.
  • odbiór przesyłki musi nastąpić przed jej dostawą.
  • można wykonać nie więcej niż 1 alternatywny odbiór lub 1 alternatywną dostawę przesyłki.
  • na wszystkich trasach czas się wydłuża (np. vehicleStartTime <= visits[0].start_time <= visits[1].start_time ... <= vehicleEndTime).
  • dostawa może być realizowana tylko przez dozwolony pojazd. Pojazd jest dozwolony, jeśli pole Shipment.allowed_vehicle_indices jest puste lub jego wartość vehicleIndex jest uwzględniona w polu Shipment.allowed_vehicle_indices.

Jeśli wstrzyknięte rozwiązanie jest niewykonalne, niekoniecznie zostanie zwrócony błąd weryfikacji, ale może zostać zwrócony błąd wskazujący na niewykonalność.

injectedSolutionConstraint

object (InjectedSolutionConstraint)

Ogranicz algorytm optymalizacji, aby znaleźć ostateczne rozwiązanie podobne do poprzedniego. Można to wykorzystać na przykład do zablokowania części tras, które zostały już ukończone lub które mają zostać ukończone, ale nie mogą być modyfikowane.

Jeśli wstrzyknięte rozwiązanie jest niewykonalne, niekoniecznie zostanie zwrócony błąd weryfikacji, ale 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 modyfikowania ich podstawowej sekwencji wizyt lub czasów podróży: zostaną zaktualizowane tylko inne szczegóły. Nie rozwiązuje to problemu z modelem.

Od listopada 2020 r. ta funkcja wypełnia tylko linie łamane niepustych tras i wymaga, aby parametr populatePolylines miał wartość prawda.

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

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

Shipment.ignore i Vehicle.ignore nie mają wpływu na działanie. Polilinie są nadal wypełniane między wszystkimi wizytami we wszystkich niepustych trasach, niezależnie od tego, czy powiązane przesyłki lub pojazdy są ignorowane.

interpretInjectedSolutionsUsingLabels

boolean

Jeśli ma wartość prawda:

Ta interpretacja dotyczy pól injectedFirstSolutionRoutes, injectedSolutionConstraint i refreshDetailsRoutes. Można go użyć, gdy indeksy przesyłek lub pojazdów w żądaniu uległy zmianie od czasu utworzenia rozwiązania, np. z powodu usunięcia lub dodania przesyłek lub pojazdów do żądania.

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

Jeśli vehicleLabel we wstrzykniętym rozwiązaniu nie odpowiada pojazdowi z żądania, odpowiednia trasa zostanie usunięta z rozwiązania wraz z wizytami. Jeśli shipmentLabel we wstrzykniętym rozwiązaniu nie odpowiada przesyłce żądania, odpowiednia wizyta zostanie usunięta z rozwiązania. Jeśli SkippedShipment.label we wstrzykniętym rozwiązaniu nie odpowiada przesyłce z żądania, SkippedShipment jest usuwany z rozwiązania.

Usunięcie wizyt na trasie lub całych tras z wstrzykniętego rozwiązania może mieć wpływ na domniemane ograniczenia, co może prowadzić do zmiany rozwiązania, błędów weryfikacji lub niemożliwości realizacji.

UWAGA: wywołujący musi upewnić się, że każdy element Vehicle.label (lub) Shipment.label) jednoznacznie identyfikuje encję pojazdu (lub przesyłki) używaną w 2 odpowiednich żądaniach: poprzednim żądaniu, które wygenerowało identyfikator OptimizeToursResponse użyty we wstrzykniętym rozwiązaniu, oraz bieżącym żądaniu, które zawiera wstrzyknięte rozwiązanie. Opisane powyżej kontrole unikalności nie wystarczą, aby zagwarantować spełnienie tego wymagania.

considerRoadTraffic

boolean

Uwzględnij szacunkowe natężenie ruchu podczas obliczania pól ShipmentRoute Transition.travel_duration, Visit.start_time i vehicleEndTime, ustawiania pola ShipmentRoute.has_traffic_infeasibilities i obliczania pola OptimizeToursResponse.total_cost.

populatePolylines

boolean

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

populateTransitionPolylines

boolean

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

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 długotrwałe żądania wiążą się ze znacznie większym (ale nadal niewielkim) ryzykiem przerwania.

useGeodesicDistances

boolean

Jeśli ma wartość „true”, odległości będą obliczane przy użyciu odległości geodezyjnych zamiast odległości z Map Google, a czasy podróży będą obliczane przy użyciu odległości geodezyjnych z prędkością określoną przez parametr geodesicMetersPerSecond.

label

string

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

geodesicMetersPerSecond

number

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

maxValidationErrors

integer

Skraca liczbę zwracanych 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 solvingMode=VALIDATE_ONLY: patrz pole OptimizeToursResponse.validation_errors. Domyślna wartość to 100,a maksymalna – 10 000.

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 tych uprawnień uprawnień w zasobie parent:

  • routeoptimization.operations.create

Więcej informacji znajdziesz w dokumentacji uprawnień.