Method: projects.optimizeTours

Wysyła OptimizeToursRequest z ShipmentModel i zwraca OptimizeToursResponse zawierający ShipmentRoute, czyli zestaw tras, które mają wykonać pojazdy minimalizujące całkowity koszt.

Model ShipmentModel składa się głównie z Shipmentzasobów, które mają zostać wykonane, oraz Vehicleelementów, które można wykorzystać do transportu Shipment. Elementy typu ShipmentRoute przypiszą elementy Shipment do elementów Vehicle. Dokładniej rzecz ujmując, do każdego pojazdu przypisywane są ciągi Visit, gdzie Visit odpowiada elementowi VisitRequest oznaczającemu odbiór lub dostawę w przypadku Shipment.

Celem jest przydzielenie zasobów typu ShipmentRoute do elementów typu Vehicle, co minimalizuje całkowity koszt, gdy koszt ma wiele komponentów zdefiniowanych w tabeli ShipmentModel.

Żądanie HTTP

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

Adres URL używa składni transkodowania gRPC.

Parametry ścieżki

Parametry
parent

string

Wymagane. Wybierz docelowy projekt lub lokalizację, aby zadzwonić.

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 czas oczekiwania jest ustawiony, serwer zwraca odpowiedź przed upłynięciem limitu czasu lub upłynięciem terminu dla żą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 czasu oczekiwania.

Czas trwania w sekundach składający się z maksymalnie 9 cyfr po przecinku i kończący się „s”. Przykład: "3.5s".

model

object (ShipmentModel)

Model dostawy do rozwiązania.

solvingMode

enum (SolvingMode)

Domyślnie ustawiony jest tryb zadań DEFAULT_SOLVE (0).

searchMode

enum (SearchMode)

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

injectedFirstSolutionRoutes[]

object (ShipmentRoute)

Pomaganie algorytmowi optymalizacji w znalezieniu pierwszego rozwiązania podobnego do poprzedniego.

Podczas tworzenia pierwszego rozwiązania model jest ograniczony. Przesyłki, które nie zostały wykonane na danej trasie, są domyślnie pominięte w pierwszym rozwiązaniu, ale można je realizować w kolejnych rozwiązaniach.

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

  • w przypadku wszystkich tras vehicleIndex musi należeć do zakresu i nie może się powtarzać.
  • dla wszystkich wizyt shipmentIndex i visitRequestIndex muszą się mieścić w zakresie.
  • dostawa może być wskazana tylko na jednej trasie.
  • Odbiór przesyłki z odbiorem lub dostawą musi zostać zrealizowany przed dostawą.
  • nie może być dostępna więcej niż jedna opcja odbioru lub alternatywna opcja dostawy.
  • dla wszystkich tras wydłuża się (np. vehicleStartTime <= visits[0].start_time <= visits[1].start_time ... <= vehicleEndTime).
  • wysyłka może zostać zrealizowana wyłącznie za pomocą dozwolonego pojazdu. Pojazd jest dozwolony, jeśli pole Shipment.allowed_vehicle_indices jest puste lub jego vehicleIndex znajduje się w: Shipment.allowed_vehicle_indices.
  • jeśli zasada avoidUTurns ma wartość Prawda, parametr injectedSolutionLocationToken musi być ustawiony w przypadku odpowiednich wizyt;

Jeśli wstrzyknięte rozwiązanie nie jest możliwe, błąd weryfikacji nie musi być zwracany i zamiast niego może pojawić się błąd wskazujący na niewykonalność.

injectedSolutionConstraint

object (InjectedSolutionConstraint)

Ogranicz algorytm optymalizacji, aby znaleźć ostateczne rozwiązanie podobne do poprzedniego. Na przykład tej opcji można użyć do zablokowania części tras, które zostały już zakończone lub są jeszcze zakończone, ale nie można ich modyfikować.

Jeśli wstrzyknięte rozwiązanie nie jest możliwe, błąd weryfikacji nie musi być zwracany i zamiast niego może pojawić się błąd wskazujący na niewykonalność.

refreshDetailsRoutes[]

object (ShipmentRoute)

Jeśli pole nie jest puste, podane trasy zostaną odświeżone bez zmiany bazowej sekwencji wizyt czy czasów podróży. Zostaną zaktualizowane tylko inne szczegóły. Nie rozwiązuje to problemów z modelem.

Od 2020 roku wypełnia tylko linie łamane niepustych tras i wymaga, aby atrybut populatePolylines miał wartość prawda.

Pola routePolyline w przekazanych trasach 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. Linie łamane są nadal wypełniane dla wszystkich wizyt na wszystkich niepustych trasach niezależnie od tego, czy powiązane dostawy lub pojazdy są ignorowane.

interpretInjectedSolutionsUsingLabels

boolean

Jeśli ma wartość prawda:

Ta interpretacja ma zastosowanie do pól injectedFirstSolutionRoutes, injectedSolutionConstraint i refreshDetailsRoutes. Możesz go użyć, gdy indeksy przesyłek lub pojazdów w żądaniu uległy zmianie od czasu utworzenia rozwiązania, na przykład dlatego, że przesyłki lub pojazdy zostały usunięte z zgłoszenia lub dodane do niego.

Jeśli wartość to prawda, etykiety z tych kategorii mogą pojawić się w danej kategorii co najwyżej raz:

Jeśli wartość vehicleLabel we wstrzykiwanym roztworze nie odpowiada pojazdowi, którego dotyczy żądanie, odpowiednia trasa jest usuwana z rozwiązania razem z wizytami. Jeśli wartość shipmentLabel we wstrzykiwanym rozwiązaniu nie odpowiada wysyłce żądania, odpowiednia wizyta zostanie usunięta z rozwiązania. Jeśli wartość SkippedShipment.label we wstrzykiwanym rozwiązaniu nie odpowiada dostawie żądania, SkippedShipment jest usuwany z rozwiązania.

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

UWAGA: rozmówca musi upewnić się, że każde Vehicle.label (odp. Shipment.label) jednoznacznie identyfikuje pojazd (odpowiedź do przesyłki) użyty w 2 odpowiednich żądaniach: wcześniejsze żądanie, które spowodowało wygenerowanie kodu OptimizeToursResponse użytego we wstrzykiwanym roztworze, oraz bieżące żądanie, które obejmuje wstrzykiwany roztwór. Opisane powyżej testy niepowtarzalności nie wystarczają do zagwarantowania tego wymogu.

considerRoadTraffic

boolean

Przy obliczaniu obliczania pól ShipmentRoute Transition.travel_duration, Visit.start_time i vehicleEndTime weź pod uwagę oszacowanie ruchu; w ustawieniach pola ShipmentRoute.has_traffic_infeasibilities oraz obliczaniu pola OptimizeToursResponse.total_cost.

populatePolylines

boolean

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

populateTransitionPolylines

boolean

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

allowLargeDeadlineDespiteInterruptionRisk

boolean

Jeśli ta wartość jest ustawiona, termin żądania (patrz https://grpc.io/blog/deadlines) może wynosić maksymalnie 60 minut. W przeciwnym razie maksymalny termin to tylko 30 minut. Pamiętaj, że żądania długotrwałe wiążą się ze znacznie większym (ale i mniejszym) ryzykiem przerw w działaniu.

useGeodesicDistances

boolean

Jeśli wartość to prawda, odległości będą obliczane na podstawie odległości geodezyjnych zamiast z 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 pozwala zidentyfikować to żądanie. Zostanie ona zgłoszona w OptimizeToursResponse.request_label.

geodesicMetersPerSecond

number

Jeśli useGeodesicDistances ma wartość true (prawda), to pole musi być skonfigurowane i określa prędkość używaną do obliczania czasu podróży. Jego wartość musi wynosić co najmniej 1 m/s.

maxValidationErrors

integer

Skraca liczbę zwróconych błędów weryfikacji. Błędy te są zwykle dołączone do ładunku błędu Błędn_AR jako szczegóły błędu BadRequest (https://cloud.google.com/apis/design/errors#error_details), chyba że fulfillmentMode=VALIDATE_ONLY: zobacz pole OptimizeToursResponse.validation_errors. Domyślna wartość to 100,a limit jest ograniczony do 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

Uprawnienia

Wymaga tych uprawnień IAM w zasobie parent:

  • routeoptimization.locations.use

Więcej informacji znajdziesz w dokumentacji uprawnień.