Package google.maps.routeoptimization.v1

Indeks

RouteOptimization

Usługa optymalizacji tras pojazdów.

ważność określonych typów pól:

  • google.protobuf.Timestamp
    • Czas jest podawany w formacie uniksowym: sekundy od 1970-01-01T00:00:00+00:00.
    • sekundy muszą mieścić się w zakresie [0, 253402300799], czyli [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00].
    • Wartość nanos musi być nieustawiona lub ustawiona na 0.
  • google.protobuf.Duration
    • sekundy muszą mieścić się w zakresie [0, 253402300799], czyli [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00].
    • Wartość nanos musi być nieustawiona lub ustawiona na 0.
  • google.type.LatLng
    • Szerokość geograficzna musi mieścić się w zakresie [-90.0, 90.0].
    • Długość geograficzna musi mieścić się w zakresie [-180.0, 180.0].
    • co najmniej jedna z wartości szerokości i długości geograficznej musi być różna od zera.
BatchOptimizeTours

rpc BatchOptimizeTours(BatchOptimizeToursRequest) returns (Operation)

Optymalizuje trasy pojazdów dla co najmniej 1 wiadomości OptimizeToursRequest w ramach zbiorczego przetwarzania.

Ta metoda jest długo działającą operacją (LRO). Dane wejściowe do optymalizacji (wiadomości OptimizeToursRequest) i dane wyjściowe (wiadomości OptimizeToursResponse) są odczytywane z Cloud Storage i zapisywane w Cloud Storage w formacie określonym przez użytkownika. Podobnie jak metoda OptimizeTours, każda metoda OptimizeToursRequest zawiera pole ShipmentModel i zwraca pole OptimizeToursResponse zawierające pola ShipmentRoute, które są zestawem tras do wykonania przez pojazdy, co pozwala zminimalizować ogólny koszt.

Użytkownik może odpytywać operations.get, aby sprawdzić stan operacji długotrwałej:

Jeśli pole done operacji długotrwałej ma wartość false, oznacza to, że co najmniej 1 żądanie jest nadal przetwarzane. Inne żądania mogły zostać zrealizowane, a ich wyniki są dostępne w Cloud Storage.

Jeśli pole done operacji LRO ma wartość true, oznacza to, że wszystkie żądania zostały przetworzone. Wyniki wszystkich pomyślnie przetworzonych żądań będą dostępne w Cloud Storage. Wyniki żądań, które się nie powiodły, nie będą dostępne w Cloud Storage. Jeśli pole error operacji LRO jest ustawione, zawiera błąd z jednego z nieudanych żądań.

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ń.

OptimizeTours

rpc OptimizeTours(OptimizeToursRequest) returns (OptimizeToursResponse)

Wysyła OptimizeToursRequest zawierający ShipmentModel i zwraca OptimizeToursResponse zawierający ShipmentRoute, czyli zestaw tras, które mają pokonać pojazdy, aby zminimalizować ogólny koszt.

Model ShipmentModel składa się głównie z Shipment, które należy wykonać, i Vehicle, które mogą służyć do transportu Shipment. ShipmentRoute przypisuje Shipment do Vehicle. Mówiąc dokładniej, przypisują one do każdego pojazdu serię obiektów Visit, gdzie Visit odpowiada obiektowi VisitRequest, który jest odbiorem lub dostawą dla obiektu Shipment.

Celem jest przypisanie ShipmentRoute do Vehicle, które minimalizuje łączny koszt, przy czym koszt ma wiele komponentów zdefiniowanych w ShipmentModel.

Zakresy autoryzacji

Wymaga następującego zakresu OAuth:

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

Wymaga tych uprawnień uprawnień w zasobie parent:

  • routeoptimization.locations.use

Więcej informacji znajdziesz w dokumentacji uprawnień.

OptimizeToursLongRunning

rpc OptimizeToursLongRunning(OptimizeToursRequest) returns (Operation)

Jest to wariant metody 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 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.

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ń.

OptimizeToursUri

rpc OptimizeToursUri(OptimizeToursUriRequest) returns (Operation)

Jest to wariant metody OptimizeToursLongRunning przeznaczony do optymalizacji z dużymi wartościami limitu czasu i dużymi rozmiarami danych wejściowych/wyjściowych.

Klient określa identyfikator URI obiektu OptimizeToursRequest przechowywanego w Google Cloud Storage, a serwer zapisuje obiekt OptimizeToursResponse w identyfikatorze URI obiektu w Cloud Storage określonym przez klienta.

Ta metoda powinna być preferowana w stosunku do metody OptimizeTours w przypadku optymalizacji, które trwają dłużej niż kilka minut, oraz rozmiarów danych wejściowych/wyjściowych, które przekraczają 8 MB, chociaż można jej używać również w przypadku krótszych i mniejszych optymalizacji.

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 OptimizeToursUriMetadata. Jeśli operacja się powiedzie, pole response będzie miało typ OptimizeToursUriResponse.

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ń.

AggregatedMetrics

Zbiorcze dane dotyczące ShipmentRoute (lub OptimizeToursResponse) dla wszystkich elementów Transition lub Visit (lub wszystkich elementów ShipmentRoute).

Pola
performed_shipment_count

int32

Liczba zrealizowanych dostaw. Pamiętaj, że para odbioru i dostawy jest liczona tylko raz.

travel_duration

Duration

Łączny czas podróży na trasie lub w rozwiązaniu.

wait_duration

Duration

Łączny czas oczekiwania na trasę lub rozwiązanie.

delay_duration

Duration

Łączny czas opóźnienia na trasie lub w rozwiązaniu.

break_duration

Duration

Łączny czas trwania przerw na trasie lub w rozwiązaniu.

visit_duration

Duration

Łączny czas trwania wizyty na trasie lub w rozwiązaniu.

total_duration

Duration

Łączny czas trwania powinien być równy sumie wszystkich czasów trwania powyżej. W przypadku tras odpowiada on również:

[ShipmentRoute.vehicle_end_time][google.maps.routeoptimization.v1.ShipmentRoute.vehicle_end_time] - [ShipmentRoute.vehicle_start_time][google.maps.routeoptimization.v1.ShipmentRoute.vehicle_start_time]
travel_distance_meters

double

Łączna odległość do przebycia na trasie lub w rozwiązaniu.

max_loads

map<string, VehicleLoad>

Maksymalne obciążenie osiągnięte na całej trasie (lub w całym rozwiązaniu) dla każdej z ilości na tej trasie (lub w tym rozwiązaniu), obliczone jako maksymalna wartość dla wszystkich Transition.vehicle_loads (lub ShipmentRoute.metrics.max_loads.

performed_mandatory_shipment_count

int32

Liczba obowiązkowych wysyłek.

Eksperymentalne: działanie lub istnienie tego pola może się zmienić w przyszłości.

performed_shipment_penalty_cost_sum

double

Suma Shipment.penalty_cost zrealizowanych dostaw.

Eksperymentalne: działanie lub istnienie tego pola może się zmienić w przyszłości.

BatchOptimizeToursMetadata

Ten typ nie ma pól.

Metadane operacji dla wywołań BatchOptimizeToursRequest.

BatchOptimizeToursRequest

Żądanie zbiorczej optymalizacji tras jako operacji asynchronicznej. Każdy plik wejściowy powinien zawierać 1 OptimizeToursRequest, a każdy plik wyjściowy będzie zawierać 1 OptimizeToursResponse. Żądanie zawiera informacje umożliwiające odczyt/zapis i analizę plików. Wszystkie pliki wejściowe i wyjściowe powinny znajdować się w tym samym projekcie.

Pola
parent

string

Wymagane. Docelowy projekt i lokalizacja, w których ma zostać wykonane wywołanie.

Format:

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

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

model_configs[]

AsyncModelConfig

Wymagane. Informacje wejściowe i wyjściowe dla każdego modelu zakupu, takie jak ścieżki plików i formaty danych.

AsyncModelConfig

Informacje dotyczące asynchronicznego rozwiązywania jednego modelu optymalizacji.

Pola
display_name

string

Opcjonalnie: Zdefiniowana przez użytkownika nazwa modelu, która może być używana jako alias, aby ułatwić użytkownikom śledzenie modeli.

input_config

InputConfig

Wymagane. Informacje o modelu wejściowym.

output_config

OutputConfig

Wymagane. Informacje o żądanej lokalizacji wyjściowej.

BatchOptimizeToursResponse

Ten typ nie ma pól.

Odpowiedź na BatchOptimizeToursRequest. Jest on zwracany w długotrwałej operacji po jej zakończeniu.

BreakRule

Reguły generowania przerw dla pojazdu (np. przerw na lunch). Przerwa to ciągły okres, podczas którego pojazd pozostaje bezczynny w obecnej pozycji i nie może wykonywać żadnych wizyt. Przerwa może wystąpić:

  • podczas podróży między 2 wizytami (co obejmuje czas tuż przed wizytą lub tuż po niej, ale nie w jej trakcie) – w takim przypadku wydłuża odpowiedni czas przejazdu między wizytami;
  • lub przed rozpoczęciem trasy pojazdu (pojazd nie może rozpocząć trasy w trakcie przerwy), w którym to przypadku nie ma wpływu na czas rozpoczęcia trasy pojazdu.
  • lub po zakończeniu jazdy (podobnie, z godziną zakończenia jazdy).
Pola
break_requests[]

BreakRequest

Sekwencja przerw. Zobacz wiadomość BreakRequest.

frequency_constraints[]

FrequencyConstraint

Może obowiązywać kilka FrequencyConstraint. Wszystkie muszą być spełnione przez BreakRequest tego elementu: BreakRule. Zobacz: FrequencyConstraint.

BreakRequest

Sekwencja przerw (czyli ich liczba i kolejność) obowiązująca w przypadku każdego pojazdu musi być znana z góry. Powtarzające się pola BreakRequest definiują tę sekwencję w kolejności, w jakiej muszą wystąpić. Ich okna czasowe (earliest_start_time / latest_start_time) mogą się nakładać, ale muszą być zgodne z zamówieniem (jest to sprawdzane).

Pola
earliest_start_time

Timestamp

Wymagane. Dolna granica (włącznie) początku przerwy.

latest_start_time

Timestamp

Wymagane. Górna granica (włącznie) początku przerwy.

min_duration

Duration

Wymagane. Minimalny czas trwania przerwy. Wartość musi być dodatnia.

FrequencyConstraint

Można dodatkowo ograniczyć częstotliwość i czas trwania przerw określonych powyżej, wymuszając minimalną częstotliwość przerw, np. „Co 12 godzin musi być przerwa trwająca co najmniej 1 godzinę”. Zakładając, że można to interpretować jako „W dowolnym przedziale czasowym wynoszącym 12 godzin musi być co najmniej jedna przerwa trwająca co najmniej godzinę”, ten przykład można przełożyć na następujący element FrequencyConstraint:

{
   min_break_duration { seconds: 3600 }         # 1 hour.
   max_inter_break_duration { seconds: 39600 }  # 11 hours (12 - 1 = 11).
}

Czas i czas trwania przerw w rozwiązaniu będą uwzględniać wszystkie te ograniczenia, a także okna czasowe i minimalne czasy trwania określone już w polu BreakRequest.

W praktyce FrequencyConstraint może dotyczyć przerw, które nie następują po sobie. Na przykład ten harmonogram jest zgodny z przykładem „1 godzina co 12 godzin”:

  04:00 vehicle start
   .. performing travel and visits ..
  09:00 1 hour break
  10:00 end of the break
   .. performing travel and visits ..
  12:00 20-min lunch break
  12:20 end of the break
   .. performing travel and visits ..
  21:00 1 hour break
  22:00 end of the break
   .. performing travel and visits ..
  23:59 vehicle end
Pola
min_break_duration

Duration

Wymagane. Minimalny czas trwania przerwy dla tego ograniczenia. Nieujemna. Zobacz opis: FrequencyConstraint.

max_inter_break_duration

Duration

Wymagane. Maksymalny dozwolony czas trwania dowolnego przedziału czasu na trasie, który nie obejmuje co najmniej częściowo przerwy wynoszącej duration >= min_break_duration. Wartość musi być dodatnia.

DataFormat

Formaty danych plików wejściowych i wyjściowych.

Wartości w polu enum
DATA_FORMAT_UNSPECIFIED Nieprawidłowa wartość, format nie może być nieokreślony.
JSON JavaScript Object Notation.
PROTO_TEXT Format tekstowy buforów protokołu. Zobacz https://protobuf.dev/reference/protobuf/textformat-spec/.

DistanceLimit

Limit określający maksymalną odległość, jaką można pokonać. Może być twardy lub miękki.

Jeśli zdefiniowano limit miękki, należy zdefiniować zarówno soft_max_meters, jak i cost_per_kilometer_above_soft_max, i muszą one być nieujemne.

Pola
max_meters

int64

Ścisłe ograniczenie odległości do maksymalnie max_meters. Limit nie może być liczbą ujemną.

soft_max_meters

int64

Limit miękki nie wymusza maksymalnego limitu odległości, ale jego naruszenie powoduje naliczenie kosztu, który jest dodawany do innych kosztów zdefiniowanych w modelu, z tą samą jednostką.

Jeśli zdefiniowano, parametr soft_max_meters musi być mniejszy niż max_meters i musi być nieujemny.

cost_per_kilometer_below_soft_max

double

Poniesiony koszt za kilometr, który wzrasta do soft_max_meters, obliczany według wzoru:

  min(distance_meters, soft_max_meters) / 1000.0 *
  cost_per_kilometer_below_soft_max.

Ten koszt nie jest obsługiwany w: route_distance_limit.

cost_per_kilometer_above_soft_max

double

Koszt za kilometr naliczany, jeśli odległość przekracza limit soft_max_meters. Dodatkowy koszt wynosi 0, jeśli odległość jest mniejsza niż limit. W przeciwnym razie koszt jest obliczany według tego wzoru:

  (distance_meters - soft_max_meters) / 1000.0 *
  cost_per_kilometer_above_soft_max.

Koszt nie może być ujemny.

GcsDestination

Lokalizacja w Google Cloud Storage, w której zostaną zapisane pliki wyjściowe.

Pola
uri

string

Wymagane. Identyfikator URI obiektu w Google Cloud Storage.

GcsSource

Lokalizacja w Google Cloud Storage, z której zostanie odczytany plik wejściowy.

Pola
uri

string

Wymagane. Identyfikator URI obiektu w Google Cloud Storage w formacie gs://bucket/path/to/object.

InjectedSolutionConstraint

Rozwiązanie wstrzyknięte w żądanie, w tym informacje o tym, które wizyty muszą być ograniczone i jak muszą być ograniczone.

Pola
routes[]

ShipmentRoute

Trasy rozwiązania do wstrzyknięcia. Niektóre trasy mogą zostać pominięte w pierwotnym rozwiązaniu. Trasy i pominięte przesyłki muszą spełniać podstawowe założenia dotyczące ważności wymienione w przypadku injected_first_solution_routes.

skipped_shipments[]

SkippedShipment

Pominięte przesyłki rozwiązania do wstrzyknięcia. Niektóre z nich mogą zostać pominięte w pierwotnym rozwiązaniu. Zobacz pole routes.

constraint_relaxations[]

ConstraintRelaxation

W przypadku co najmniej 1 grupy pojazdów określa, kiedy i w jakim stopniu należy złagodzić ograniczenia. Jeśli to pole jest puste, wszystkie niepuste trasy pojazdów są w pełni ograniczone.

ConstraintRelaxation

W przypadku grupy pojazdów określa, przy jakich progach ograniczenia dotyczące wizyt zostaną złagodzone i do jakiego poziomu. Przesyłki wymienione w polu skipped_shipment muszą zostać pominięte, tzn. nie można ich zrealizować.

Pola
relaxations[]

Relaxation

Wszystkie złagodzenia ograniczeń wizyt, które będą miały zastosowanie do wizyt na trasach z pojazdami w vehicle_indices.

vehicle_indices[]

int32

Określa indeksy pojazdów, do których ma zastosowanie ograniczenie wizyty relaxations. Jeśli to pole jest puste, jest ono traktowane jako domyślne, a wartości relaxations mają zastosowanie do wszystkich pojazdów, które nie są określone w innych polach constraint_relaxations. Może być maksymalnie 1 wartość domyślna, czyli maksymalnie 1 pole rozluźnienia ograniczeń może być puste vehicle_indices. Indeks pojazdu może być wymieniony tylko raz, nawet w kilku elementach constraint_relaxations.

Indeks pojazdu jest mapowany tak samo jak ShipmentRoute.vehicle_index, jeśli interpret_injected_solutions_using_labels ma wartość true (patrz komentarz fields).

Relaks

Jeśli pole relaxations jest puste, czas rozpoczęcia i kolejność wszystkich wizyt w dniu routes są w pełni ograniczone i nie można wstawiać ani dodawać nowych wizyt do tych tras. Ponadto czas rozpoczęcia i zakończenia pojazdu w routes jest w pełni ograniczony, chyba że pojazd jest pusty (tzn. nie ma wizyt, a w modelu parametr used_if_route_is_empty ma wartość false).

relaxations(i).level określa poziom złagodzenia ograniczeń zastosowany do wizyty #j, która spełnia te warunki:

  • route.visits(j).start_time >= relaxations(i).threshold_time ORAZ
  • j + 1 >= relaxations(i).threshold_visit_count

Podobnie początek trasy pojazdu jest przesuwany do relaxations(i).level, jeśli spełnia warunek:

  • vehicle_start_time >= relaxations(i).threshold_time ORAZ
  • relaxations(i).threshold_visit_count == 0, a koniec pojazdu jest rozluźniony do relaxations(i).level, jeśli spełnia warunek:
  • vehicle_end_time >= relaxations(i).threshold_time ORAZ
  • route.visits_size() + 1 >= relaxations(i).threshold_visit_count

Aby zastosować poziom złagodzenia, gdy wizyta spełnia warunek threshold_visit_count LUB threshold_time, dodaj 2 relaxations z tym samym level: jeden z ustawionym tylko threshold_visit_count, a drugi z ustawionym tylko threshold_time. Jeśli wizyta spełnia warunki kilku relaxations, stosowany jest najmniej restrykcyjny poziom. W rezultacie od rozpoczęcia trasy przez pojazd do jej zakończenia poziom złagodzenia staje się coraz bardziej łagodny, tzn. nie maleje w miarę postępu trasy.

Czas i kolejność wizyt na trasie, które nie spełniają warunków progowych żadnego elementu relaxations, są w pełni ograniczone i nie można wstawiać do tych sekwencji żadnych wizyt. Jeśli początek lub koniec trasy pojazdu nie spełnia warunków żadnego złagodzenia, czas jest stały, chyba że pojazd jest pusty.

Pola
level

Level

Poziom złagodzenia ograniczeń, który obowiązuje, gdy spełnione są warunki w dniu threshold_time lub później ORAZ co najmniej threshold_visit_count.

threshold_time

Timestamp

Czas, w którym lub po którym można zastosować rozluźnienie level.

threshold_visit_count

int32

Liczba wizyt, po której można zastosować złagodzenie level. Jeśli zasada threshold_visit_count ma wartość 0 (lub nie jest skonfigurowana), zasada level może zostać zastosowana bezpośrednio po uruchomieniu pojazdu.

Jeśli jest to route.visits_size() + 1, level można zastosować tylko do pojazdu. Jeśli jest większa niż route.visits_size() + 1, level nie jest stosowana w przypadku tej trasy.

Poziom

Określa różne poziomy złagodzenia ograniczeń, które są stosowane do wizyty i kolejnych wizyt, gdy spełniają one warunki progowe.

Poniższe wyliczenie jest uporządkowane według rosnącego stopnia rozluźnienia.

Wartości w polu enum
LEVEL_UNSPECIFIED

Domyślny poziom złagodzenia: żadne ograniczenia nie są złagodzone, tzn. wszystkie wizyty są w pełni ograniczone.

Ta wartość nie może być używana bezpośrednio w level.

RELAX_VISIT_TIMES_AFTER_THRESHOLD Godziny rozpoczęcia wizyt i godziny rozpoczęcia/zakończenia przejazdów pojazdów zostaną złagodzone, ale każda wizyta pozostanie powiązana z tym samym pojazdem i należy przestrzegać kolejności wizyt: nie można wstawić żadnej wizyty między nimi ani przed nimi.
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD Tak samo jak RELAX_VISIT_TIMES_AFTER_THRESHOLD, ale sekwencja wizyt jest również mniej rygorystyczna: wizyty mogą być realizowane tylko przez ten pojazd, ale mogą też nie zostać zrealizowane.
RELAX_ALL_AFTER_THRESHOLD Tak samo jak RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD, ale pojazd jest również rozluźniony: wizyty są całkowicie bezpłatne w momencie osiągnięcia progu lub po jego przekroczeniu i mogą nie zostać zrealizowane.

InputConfig

Określ dane wejściowe dla [BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours].

Pola
data_format

DataFormat

Wymagane. Format danych wejściowych.

Pole zbiorcze source. Wymagane. source może mieć tylko jedną z tych wartości:
gcs_source

GcsSource

Lokalizacja w Google Cloud Storage. Musi to być pojedynczy obiekt (plik).

Lokalizacja

Zawiera lokalizację (punkt geograficzny i opcjonalny nagłówek).

Pola
lat_lng

LatLng

Współrzędne geograficzne punktu na trasie.

heading

int32

Kierunek kompasu powiązany z kierunkiem ruchu. Ta wartość służy do określenia strony drogi, po której ma nastąpić odbiór i wysadzenie pasażera. Wartości kierunku mogą wynosić od 0 do 360, gdzie 0 oznacza kierunek na północ, 90 – na wschód itd.

OptimizeToursLongRunningMetadata

Ten typ nie ma pól.

Metadane operacji dla wywołań OptimizeToursLongRunning.

OptimizeToursRequest

Żądanie, które ma zostać przekazane do narzędzia do rozwiązywania problemów z optymalizacją trasy, które definiuje model dostawy do rozwiązania oraz parametry optymalizacji.

Pola
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.

timeout

Duration

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

ShipmentModel

Model dostawy do rozwiązania.

solving_mode

SolvingMode

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

search_mode

SearchMode

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

injected_first_solution_routes[]

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 vehicle_index musi być w zakresie i nie może być duplikatem.
  • W przypadku wszystkich wizyt wartości shipment_index i visit_request_index 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. vehicle_start_time <= visits[0].start_time <= visits[1].start_time ... <= vehicle_end_time).
  • dostawa może być realizowana tylko przez dozwolony pojazd. Pojazd jest dozwolony, jeśli pole Shipment.allowed_vehicle_indices jest puste lub jego wartość vehicle_index 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ść.

injected_solution_constraint

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ść.

refresh_details_routes[]

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 populate_polylines miał wartość prawda.

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

Tego pola nie można używać razem z polem injected_first_solution_routes ani injected_solution_constraint.

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.

interpret_injected_solutions_using_labels

bool

Jeśli ma wartość prawda:

Ta interpretacja dotyczy pól injected_first_solution_routes, injected_solution_constraint i refresh_details_routes. 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 vehicle_label we wstrzykniętym rozwiązaniu nie odpowiada pojazdowi z żądania, odpowiednia trasa zostanie usunięta z rozwiązania wraz z wizytami. Jeśli shipment_label 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.

consider_road_traffic

bool

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

populate_polylines

bool

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

populate_transition_polylines

bool

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

allow_large_deadline_despite_interruption_risk

bool

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.

use_geodesic_distances

bool

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 geodesic_meters_per_second.

label

string

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

geodesic_meters_per_second

double

Gdy parametr use_geodesic_distances 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.

max_validation_errors

int32

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

SearchMode

Tryb określający zachowanie wyszukiwania, który stanowi kompromis między opóźnieniem a jakością rozwiązania. We wszystkich trybach obowiązuje globalny termin żądania.

Wartości w polu enum
SEARCH_MODE_UNSPECIFIED Nieokreślony tryb wyszukiwania, odpowiednik RETURN_FAST.
RETURN_FAST Zatrzymaj wyszukiwanie po znalezieniu pierwszego dobrego rozwiązania.
CONSUME_ALL_AVAILABLE_TIME Poświęć cały dostępny czas na poszukiwanie lepszych rozwiązań.

SolvingMode

Określa, jak solver powinien obsługiwać żądanie. We wszystkich trybach oprócz VALIDATE_ONLY, jeśli żądanie jest nieprawidłowe, otrzymasz błąd INVALID_REQUEST. Aby ograniczyć liczbę zwracanych błędów, zapoznaj się z max_validation_errors.

Wartości w polu enum
DEFAULT_SOLVE Rozwiąż model. Ostrzeżenia mogą być wyświetlane w polu [OptimizeToursResponse.validation_errors][google.cloud.optimization.v1.OptimizeToursResponse.validation_errors].
VALIDATE_ONLY Tylko sprawdza poprawność modelu bez jego rozwiązywania: wypełnia jak najwięcej pól OptimizeToursResponse.validation_errors.
DETECT_SOME_INFEASIBLE_SHIPMENTS

Wypełnia tylko pola OptimizeToursResponse.validation_errors lub OptimizeToursResponse.skipped_shipments i nie rozwiązuje pozostałej części żądania (pola status i routes nie są ustawione w odpowiedzi). Jeśli w trasach injected_solution_constraint zostaną wykryte nieprawidłowości, zostaną one wpisane w polu OptimizeToursResponse.validation_errors, a pole OptimizeToursResponse.skipped_shipments pozostanie puste.

WAŻNE: nie wszystkie niewykonalne przesyłki są tu zwracane, ale tylko te, które zostały wykryte jako niewykonalne podczas wstępnego przetwarzania.

TRANSFORM_AND_RETURN_REQUEST

Ten tryb działa tylko wtedy, gdy zasada ShipmentModel.objectives nie jest pusta. Problem nie został rozwiązany. Jest on tylko sprawdzany i uzupełniany o koszty odpowiadające danym celom. Zapoznaj się też z dokumentacją ShipmentModel.objectives. Wynikowe żądanie jest zwracane jako OptimizeToursResponse.processed_request.

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

OptimizeToursResponse

Odpowiedź po rozwiązaniu problemu z optymalizacją trasy, zawierająca trasy, którymi porusza się każdy pojazd, przesyłki, które zostały pominięte, oraz ogólny koszt rozwiązania.

Pola
routes[]

ShipmentRoute

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

request_label

string

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

skipped_shipments[]

SkippedShipment

Lista wszystkich pominiętych dostaw.

validation_errors[]

OptimizeToursValidationError

Lista wszystkich błędów weryfikacji, które udało nam się wykryć niezależnie. Zobacz wyjaśnienie „MULTIPLE ERRORS” dla komunikatu OptimizeToursValidationError. Zamiast błędów będą wyświetlane ostrzeżenia, jeśli solving_mode to DEFAULT_SOLVE.

processed_request

OptimizeToursRequest

W niektórych przypadkach przed rozwiązaniem problemu modyfikujemy przychodzące zgłoszenie, np. dodajemy koszty. Jeśli solving_mode == TRANSFORM_AND_RETURN_REQUEST, zmodyfikowane żądanie jest zwracane tutaj.

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

metrics

Metrics

Dane dotyczące czasu trwania, odległości i wykorzystania w przypadku tego rozwiązania.

Dane

Ogólne dane zagregowane dla wszystkich tras.

Pola
aggregated_route_metrics

AggregatedMetrics

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

skipped_mandatory_shipment_count

int32

Liczba pominiętych obowiązkowych przesyłek.

used_vehicle_count

int32

Liczba użytych pojazdów. Uwaga: jeśli trasa pojazdu jest pusta, a parametr Vehicle.used_if_route_is_empty ma wartość „true”, pojazd jest uznawany za używany.

earliest_vehicle_start_time

Timestamp

Najwcześniejszy czas rozpoczęcia dla używanego pojazdu, obliczony jako minimalna wartość dla wszystkich używanych pojazdów: ShipmentRoute.vehicle_start_time.

latest_vehicle_end_time

Timestamp

Najpóźniejszy czas zakończenia dla używanego pojazdu, obliczony jako maksymalna wartość dla wszystkich używanych pojazdów: ShipmentRoute.vehicle_end_time.

costs

map<string, double>

Koszt rozwiązania z podziałem na pola żądania związane z kosztami. Klucze to ścieżki proto względem wejściowego żądania OptimizeToursRequest, np. „model.shipments.pickups.cost”, a wartości to łączny koszt wygenerowany przez odpowiednie pole kosztu, zagregowany dla całego rozwiązania. Innymi słowy, costs["model.shipments.pickups.cost"] to suma wszystkich kosztów odbioru w rozwiązaniu. Wszystkie koszty zdefiniowane w modelu są tu szczegółowo raportowane, z wyjątkiem kosztów związanych z TransitionAttributes, które od stycznia 2022 r. są raportowane tylko w sposób zagregowany.

total_cost

double

Łączny koszt rozwiązania. Suma wszystkich wartości na mapie kosztów.

OptimizeToursUriMetadata

Ten typ nie ma pól.

Metadane operacji dla wywołań OptimizeToursUri.

OptimizeToursUriRequest

Żądanie używane przez metodę OptimizeToursUri.

Pola
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.

input

Uri

Wymagane. Identyfikator URI obiektu Cloud Storage zawierającego OptimizeToursRequest.

output

Uri

Wymagane. Identyfikator URI obiektu Cloud Storage, który będzie zawierać OptimizeToursResponse.

OptimizeToursUriResponse

Odpowiedź zwracana przez metodę OptimizeToursUri.

Pola
output

Uri

Opcjonalnie: Identyfikator URI obiektu Cloud Storage zawierającego OptimizeToursResponse zakodowany jako JSON lub textproto. Jeśli obiekt został zakodowany jako JSON, rozszerzenie nazwy obiektu będzie miało postać .json. Jeśli obiekt został zakodowany jako textproto, rozszerzenie nazwy obiektu będzie miało postać .txtpb.

crc32_checksum zasobu można użyć do sprawdzenia, czy zawartość zasobu nie została zmodyfikowana.

OptimizeToursValidationError

Opisuje błąd lub ostrzeżenie, które wystąpiły podczas sprawdzania poprawności OptimizeToursRequest.

Pola
code

int32

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

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

WIELE BŁĘDÓW: jeśli występuje wiele błędów, proces weryfikacji próbuje wyświetlić kilka z nich. Podobnie jak w przypadku kompilatora, jest to proces niedoskonały. Niektóre błędy weryfikacji będą „krytyczne”, co oznacza, że zatrzymają cały proces weryfikacji. Dotyczy to m.in. błędów display_name="UNSPECIFIED". Niektóre błędy mogą spowodować, że proces weryfikacji pominie inne błędy.

STABILNOŚĆ: code i display_name powinny być bardzo stabilne. Z czasem mogą się jednak pojawić nowe kody i wyświetlane nazwy, co może spowodować, że dane (nieprawidłowe) żądanie zwróci inną parę (code, display_name), ponieważ nowy błąd ukrył stary. Na przykład „MULTIPLE ERRORS”.

display_name

string

Wyświetlana nazwa błędu.

fields[]

FieldReference

Kontekst błędu może obejmować 0, 1 (najczęściej) lub więcej pól. Na przykład odwołanie do pojazdu 4 i pierwszego odbioru przesyłki 2 może wyglądać tak:

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

Pamiętaj jednak, że liczebność parametru fields nie powinna się zmieniać w przypadku danego kodu błędu.

error_message

string

Zrozumiały dla człowieka ciąg tekstowy opisujący błąd. Istnieje mapowanie 1:1 między code i error_message (gdy kod != „UNSPECIFIED”).

STABILNOŚĆ: niestabilny – komunikat o błędzie powiązany z danym elementem code może się z czasem zmienić (mamy nadzieję, że na bardziej zrozumiały). Zamiast tego użyj właściwości display_name i code.

offending_values

string

Może zawierać wartości pól. Ta opcja nie zawsze jest dostępna. Nie należy na nim polegać i używać go tylko do ręcznego debugowania modelu.

FieldReference

Określa kontekst błędu weryfikacji. FieldReference zawsze odnosi się do danego pola w tym pliku i ma tę samą strukturę hierarchiczną. Możemy na przykład określić element 2 atrybutu start_time_windows pojazdu 5, używając:

name: "vehicles" index: 5 sub_field { name: "end_time_windows" index: 2 }

Pomijamy jednak elementy najwyższego poziomu, takie jak OptimizeToursRequest lub ShipmentModel, aby nie przeładować wiadomości.

Pola
name

string

Nazwa pola, np. „vehicles”.

sub_field

FieldReference

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

Pole zbiorcze index_or_key.

Pole index_or_key może mieć tylko jedną z tych wartości:

index

int32

Indeks pola, jeśli jest powtarzane.

key

string

Klucz, jeśli pole jest mapą.

OutputConfig

Określ miejsce docelowe dla wyników [BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours].

Pola
data_format

DataFormat

Wymagane. Format danych wyjściowych.

Pole zbiorcze destination. Wymagane. destination może mieć tylko jedną z tych wartości:
gcs_destination

GcsDestination

Lokalizacja w Google Cloud Storage, w której mają być zapisywane dane wyjściowe.

RouteModifiers

Zawiera zestaw opcjonalnych warunków, które należy spełnić podczas obliczania tras pojazdów. Jest to podobne do RouteModifiers w interfejsie Routes Preferred API Google Maps Platform. Więcej informacji znajdziesz na stronie https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers.

Pola
avoid_tolls

bool

Określa, czy w miarę możliwości unikać dróg płatnych. Preferowane będą trasy, które nie obejmują dróg płatnych. Dotyczy tylko zmotoryzowanych środków transportu.

avoid_highways

bool

Określa, czy w miarę możliwości unikać autostrad. Preferowane będą trasy, które nie obejmują autostrad. Dotyczy tylko zmotoryzowanych środków transportu.

avoid_ferries

bool

Określa, czy w miarę możliwości unikać promów. Preferowane będą trasy, które nie obejmują podróży promem. Dotyczy tylko zmotoryzowanych środków transportu.

avoid_indoor

bool

Opcjonalnie: Określa, czy w miarę możliwości unikać nawigacji w budynkach. Preferowane będą trasy, które nie zawierają nawigacji wewnątrz budynków. Dotyczy tylko trybu podróży WALKING.

Wysyłka

Przesyłka pojedynczego produktu, od jednego z odbiorów do jednej z dostaw. Aby przesyłka została uznana za dostarczoną, unikalny pojazd musi odwiedzić jedną z jej lokalizacji odbioru (i odpowiednio zmniejszyć swoją wolną ładowność), a następnie odwiedzić jedną z jej lokalizacji dostawy (i odpowiednio zwiększyć swoją wolną ładowność).

Pola
display_name

string

Zdefiniowana przez użytkownika wyświetlana nazwa przesyłki. Może mieć maksymalnie 63 znaki i zawierać znaki UTF-8.

pickups[]

VisitRequest

Zestaw alternatywnych opcji odbioru powiązanych z przesyłką. Jeśli nie zostanie określona, pojazd musi tylko odwiedzić lokalizację odpowiadającą dostawom.

deliveries[]

VisitRequest

Zestaw alternatywnych opcji dostawy powiązanych z przesyłką. Jeśli nie zostanie określona, pojazd musi odwiedzić tylko lokalizację odpowiadającą odbiorom.

load_demands

map<string, Load>

wymagania dotyczące załadunku przesyłki (np. waga, objętość, liczba palet); Klucze na mapie powinny być identyfikatorami opisującymi typ odpowiedniego obciążenia, najlepiej z uwzględnieniem jednostek. Na przykład: „weight_kg”, „volume_gallons”, „pallet_count” itp. Jeśli dany klucz nie pojawia się na mapie, odpowiedni ładunek jest traktowany jako null.

allowed_vehicle_indices[]

int32

Zestaw pojazdów, które mogą zrealizować tę przesyłkę. Jeśli to pole jest puste, wszystkie pojazdy mogą wykonać to zadanie. Pojazdy są podawane według indeksu na liście vehicles w ShipmentModel.

costs_per_vehicle[]

double

Określa koszt ponoszony, gdy ta przesyłka jest dostarczana przez każdy pojazd. Jeśli jest określony, musi zawierać:

  • taką samą liczbę elementów jak costs_per_vehicle_indices. costs_per_vehicle[i] odpowiada pojazdowi costs_per_vehicle_indices[i] modelu.
  • taką samą liczbę elementów, ile jest pojazdów w modelu. Element i-ty odpowiada pojazdowi #i modelu.

Te koszty muszą być podane w tej samej jednostce co penalty_cost i nie mogą być ujemne. Jeśli nie ma takich kosztów, pozostaw to pole puste.

costs_per_vehicle_indices[]

int32

Indeksy pojazdów, których dotyczy costs_per_vehicle. Jeśli nie jest puste, musi zawierać taką samą liczbę elementów jak costs_per_vehicle. Indeks pojazdu nie może być określony więcej niż raz. Jeśli pojazd jest wykluczony z costs_per_vehicle_indices, jego koszt wynosi 0.

pickup_to_delivery_absolute_detour_limit

Duration

Określa maksymalny bezwzględny czas objazdu w porównaniu z najkrótszą trasą od miejsca odbioru do miejsca dostawy. Jeśli jest określona, musi być nieujemna, a przesyłka musi zawierać co najmniej odbiór i dostawę.

Załóżmy na przykład, że t to najkrótszy czas potrzebny na przejazd z wybranej alternatywy odbioru bezpośrednio do wybranej alternatywy dostawy. Ustawienie pickup_to_delivery_absolute_detour_limit wymusza:

start_time(delivery) - start_time(pickup) <=
t + pickup_to_delivery_absolute_detour_limit

Jeśli dla tej samej przesyłki określono zarówno limity względne, jak i bezwzględne, dla każdej możliwej pary odbioru i dostawy stosowany jest bardziej restrykcyjny limit. Od października 2017 r. objazdy są obsługiwane tylko wtedy, gdy czas podróży nie zależy od pojazdów.

pickup_to_delivery_time_limit

Duration

Określa maksymalny czas od rozpoczęcia odbioru do rozpoczęcia dostawy przesyłki. Jeśli jest określona, musi być nieujemna, a przesyłka musi zawierać co najmniej odbiór i dostawę. Nie zależy to od tego, które alternatywy zostały wybrane do odbioru i dostawy, ani od prędkości pojazdu. Można to określić razem z ograniczeniami maksymalnego objazdu – rozwiązanie będzie uwzględniać obie specyfikacje.

shipment_type

string

Ciąg znaków, który nie jest pusty i określa „typ” przesyłki. Ta funkcja może służyć do definiowania niezgodności lub wymagań między shipment_types (patrz shipment_type_incompatibilities i shipment_type_requirements w ShipmentModel).

Różni się od pola visit_types, które jest określone dla pojedynczej wizyty: wszystkie odbiory i dostawy należące do tej samej przesyłki mają to samo pole shipment_type.

label

string

Określa etykietę tej przesyłki. Ta etykieta jest raportowana w odpowiedzi w polu shipment_label odpowiedniego elementu ShipmentRoute.Visit.

ignore

bool

Jeśli ma wartość prawda, pomiń tę przesyłkę, ale nie stosuj penalty_cost.

Zignorowanie dostawy powoduje błąd weryfikacji, gdy w modelu występują elementy typu shipment_type_requirements.

Ignorowanie dostawy realizowanej w injected_first_solution_routes lub injected_solution_constraint jest dozwolone. Rozwiązujący usuwa powiązane wizyty odbioru/dostawy z realizowanej trasy. precedence_rules, które odwołują się do ignorowanych przesyłek, również będą ignorowane.

penalty_cost

double

Jeśli dostawa nie zostanie zrealizowana, ta kara zostanie dodana do łącznego kosztu tras. Przesyłka jest uznawana za zrealizowaną, jeśli odwiedzono jeden z punktów odbioru i dostawy. Koszt może być wyrażony w tej samej jednostce, która jest używana we wszystkich innych polach związanych z kosztami w modelu, i musi być dodatni.

WAŻNE: jeśli ta kara nie jest określona, jest uważana za nieskończoną, tzn. dostawa musi zostać zrealizowana.

pickup_to_delivery_relative_detour_limit

double

Określa maksymalny względny czas objazdu w porównaniu z najkrótszą trasą od odbioru do dostawy. Jeśli jest określona, musi być nieujemna, a przesyłka musi zawierać co najmniej odbiór i dostawę.

Załóżmy na przykład, że t to najkrótszy czas potrzebny na przejazd z wybranej alternatywy odbioru bezpośrednio do wybranej alternatywy dostawy. Ustawienie pickup_to_delivery_relative_detour_limit wymusza:

start_time(delivery) - start_time(pickup) <=
std::ceil(t * (1.0 + pickup_to_delivery_relative_detour_limit))

Jeśli dla tej samej przesyłki określono zarówno limity względne, jak i bezwzględne, dla każdej możliwej pary odbioru i dostawy stosowany jest bardziej restrykcyjny limit. Od października 2017 r. objazdy są obsługiwane tylko wtedy, gdy czas podróży nie zależy od pojazdów.

Wczytywanie

Podczas wizyty do ładunku pojazdu może zostać dodana wstępnie zdefiniowana kwota, jeśli jest to odbiór, lub odjęta, jeśli jest to dostawa. Ta wiadomość określa tę kwotę. Zobacz load_demands.

Pola
amount

int64

Wartość, o którą zmieni się obciążenie pojazdu realizującego odpowiednią wizytę. Ponieważ jest to liczba całkowita, zalecamy użytkownikom wybranie odpowiedniej jednostki, aby uniknąć utraty dokładności. Musi być ≥ 0.

VisitRequest

Prośba o wizytę, którą może wykonać pojazd: ma geolokalizację (lub 2, patrz poniżej), godziny otwarcia i zamknięcia reprezentowane przez okna czasowe oraz czas trwania usługi (czas spędzony przez pojazd po przybyciu w celu odbioru lub dostarczenia towarów).

Pola
arrival_location

LatLng

Lokalizacja geograficzna, do której pojazd dociera podczas wykonywania tego zadania (VisitRequest). Jeśli model przesyłki zawiera macierze czasu trwania i odległości, nie można określić parametru arrival_location.

arrival_waypoint

Waypoint

Punkt pośredni, do którego pojazd dociera podczas wykonywania tego działania (VisitRequest). Jeśli model dostawy zawiera macierze czasu trwania i odległości, nie można określić parametru arrival_waypoint.

departure_location

LatLng

Lokalizacja geograficzna, z której pojazd odjeżdża po zakończeniu tego zadania (VisitRequest). Można go pominąć, jeśli jest taki sam jak arrival_location. Jeśli model dostawy zawiera macierze czasu trwania i odległości, nie można określić parametru departure_location.

departure_waypoint

Waypoint

Punkt na trasie, z którego pojazd odjeżdża po zakończeniu tego zadania (VisitRequest). Można go pominąć, jeśli jest taki sam jak arrival_waypoint. Jeśli model dostawy zawiera macierze czasu trwania i odległości, nie można określić parametru departure_waypoint.

tags[]

string

Określa tagi dołączone do prośby o wizytę. Puste lub zduplikowane ciągi znaków są niedozwolone.

time_windows[]

TimeWindow

Przedziały czasu, które ograniczają czas przybycia na wizytę. Pamiętaj, że pojazd może odjechać poza oknem czasowym przyjazdu, tzn. czas przyjazdu + czas trwania nie muszą mieścić się w oknie czasowym. Jeśli pojazd przyjedzie przed TimeWindow.start_time, może to spowodować czas oczekiwania.

Brak pola TimeWindow oznacza, że pojazd może wykonać tę wizytę w dowolnym momencie.

Przedziały czasu muszą być rozłączne, tzn.żaden przedział czasu nie może nakładać się na inny ani z nim sąsiadować. Muszą być też podane w kolejności rosnącej.

Wartości cost_per_hour_after_soft_end_time i soft_end_time można ustawić tylko wtedy, gdy jest tylko jedno okno czasowe.

duration

Duration

Czas trwania wizyty, czyli czas spędzony przez pojazd między przyjazdem a odjazdem (należy go dodać do możliwego czasu oczekiwania; patrz time_windows).

cost

double

Koszt obsługi tej prośby o wizytę na trasie pojazdu. Można go użyć do opłacenia różnych kosztów za każdą alternatywną opcję odbioru lub dostawy przesyłki. Ten koszt musi być podany w tej samej jednostce co Shipment.penalty_cost i nie może być ujemny.

load_demands

map<string, Load>

Wczytaj wymagania dotyczące tej prośby o wizytę. To pole jest podobne do pola Shipment.load_demands, ale dotyczy tylko tego elementu VisitRequest, a nie całego elementu Shipment. Wymagania wymienione tutaj są dodawane do wymagań wymienionych w pliku Shipment.load_demands.

visit_types[]

string

Określa typy wizyt. Można go użyć do przydzielenia dodatkowego czasu wymaganego do zakończenia wizyty przez pojazd (patrz Vehicle.extra_visit_duration_for_visit_type).

Typ może pojawić się tylko raz.

label

string

Określa etykietę dla tego elementu VisitRequest. Ta etykieta jest raportowana w odpowiedzi jako visit_label w odpowiednim polu ShipmentRoute.Visit.

avoid_u_turns

bool

Określa, czy w tej lokalizacji należy unikać zawracania na trasach dojazdu. Unikanie zawracania jest realizowane w miarę możliwości i nie gwarantujemy, że uda się całkowicie uniknąć takich manewrów. To funkcja eksperymentalna, której działanie może ulec zmianie.

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

ShipmentModel

Model dostawy zawiera zestaw dostaw, które muszą zostać zrealizowane przez zestaw pojazdów, przy jednoczesnym zminimalizowaniu ogólnego kosztu, który jest sumą:

  • koszt wyznaczania tras pojazdów (suma kosztu za łączny czas, kosztu za czas podróży i kosztu stałego dla wszystkich pojazdów).
  • kar za niezrealizowaną dostawę.
  • koszt globalnego czasu trwania dostaw,
Pola
shipments[]

Shipment

Zbiór przesyłek, które muszą zostać zrealizowane w modelu.

vehicles[]

Vehicle

Zbiór pojazdów, które mogą być używane do wykonywania wizyt.

objectives[]

Objective

Zestaw celów dla tego modelu, które przekształcimy w koszty. Jeśli nie jest pusty, model wejściowy musi być bezpłatny. Aby uzyskać zmodyfikowane żądanie, użyj solving_mode = TRANSFORM_AND_RETURN_REQUEST. Pamiętaj, że w takim przypadku prośba nie zostanie rozpatrzona. Zobacz odpowiednią dokumentację.

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

global_start_time

Timestamp

Globalny czas rozpoczęcia i zakończenia modelu: żaden czas spoza tego zakresu nie może być uznany za prawidłowy.

Przedział czasu modelu musi być krótszy niż rok, tzn. global_end_time i global_start_time muszą być od siebie oddalone o maksymalnie 31 536 000 sekund.

Jeśli używasz pól cost_per_*hour, możesz ustawić mniejszy interwał, aby zwiększyć wydajność (np. jeśli modelujesz pojedynczy dzień, ustaw globalne limity czasu na ten dzień). Jeśli nie zostanie ustawiona, domyślnie używana jest godzina 00:00:00 czasu UTC 1 stycznia 1970 r. (czyli sekundy: 0, nanosekundy: 0).

global_end_time

Timestamp

Jeśli nie zostanie ustawiona, domyślnie używana jest godzina 00:00:00 czasu UTC 1 stycznia 1971 r. (czyli sekundy: 31536000, nanosekundy: 0).

global_duration_cost_per_hour

double

„Globalny czas trwania” całego planu to różnica między najwcześniejszym faktycznym czasem rozpoczęcia a najpóźniejszym faktycznym czasem zakończenia wszystkich pojazdów. Użytkownicy mogą przypisać koszt za godzinę do tej ilości, aby na przykład spróbować zoptymalizować zadanie pod kątem jak najszybszego ukończenia. Ten koszt musi być podany w tej samej jednostce co Shipment.penalty_cost.

duration_distance_matrices[]

DurationDistanceMatrix

Określa macierze czasu trwania i odległości używane w modelu. Jeśli to pole jest puste, używane są odległości z Map Google lub odległości geodezyjne, w zależności od wartości pola use_geodesic_distances. Jeśli nie jest puste, use_geodesic_distances nie może mieć wartości true, a pola duration_distance_matrix_src_tags i duration_distance_matrix_dst_tags nie mogą być puste.

Przykłady użycia:

  • Są 2 lokalizacje: locA i locB.
  • 1 pojazd, który rozpoczyna trasę w lokalizacji locA i kończy ją w lokalizacji locA.
  • 1 prośba o odbiór w lokalizacji B.
model {
  vehicles { start_tags: "locA"  end_tags: "locA" }
  shipments { pickups { tags: "locB" } }
  duration_distance_matrix_src_tags: "locA"
  duration_distance_matrix_src_tags: "locB"
  duration_distance_matrix_dst_tags: "locA"
  duration_distance_matrix_dst_tags: "locB"
  duration_distance_matrices {
    rows {  # from: locA
      durations { seconds: 0 }   meters: 0    # to: locA
      durations { seconds: 100 } meters: 1000 # to: locB
    }
    rows {  # from: locB
      durations { seconds: 102 } meters: 990 # to: locA
      durations { seconds: 0 }   meters: 0   # to: locB
    }
  }
}
  • Masz 3 lokalizacje: locA, locB i locC.
  • 1 pojazd rozpoczynający trasę w lokalizacji locA i kończący ją w lokalizacji locB, korzystający z macierzy „fast”.
  • 1 pojazd rozpoczynający trasę w lokalizacji locB i kończący ją w lokalizacji locB, korzystający z macierzy „slow”.
  • 1 pojazd rozpoczynający trasę w lokalizacji locB i kończący ją w lokalizacji locB, korzystający z macierzy „fast”.
  • 1 prośba o odbiór w lokalizacji C.
model {
  vehicles { start_tags: "locA" end_tags: "locB" start_tags: "fast" }
  vehicles { start_tags: "locB" end_tags: "locB" start_tags: "slow" }
  vehicles { start_tags: "locB" end_tags: "locB" start_tags: "fast" }
  shipments { pickups { tags: "locC" } }
  duration_distance_matrix_src_tags: "locA"
  duration_distance_matrix_src_tags: "locB"
  duration_distance_matrix_src_tags: "locC"
  duration_distance_matrix_dst_tags: "locB"
  duration_distance_matrix_dst_tags: "locC"
  duration_distance_matrices {
    vehicle_start_tag: "fast"
    rows {  # from: locA
      durations { seconds: 1000 } meters: 2000 # to: locB
      durations { seconds: 600 }  meters: 1000 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }   meters: 0    # to: locB
      durations { seconds: 700 } meters: 1200 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 702 } meters: 1190 # to: locB
      durations { seconds: 0 }   meters: 0    # to: locC
    }
  }
  duration_distance_matrices {
    vehicle_start_tag: "slow"
    rows {  # from: locA
      durations { seconds: 1800 } meters: 2001 # to: locB
      durations { seconds: 900 }  meters: 1002 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }    meters: 0    # to: locB
      durations { seconds: 1000 } meters: 1202 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 1001 } meters: 1195 # to: locB
      durations { seconds: 0 }    meters: 0    # to: locC
    }
  }
}
duration_distance_matrix_src_tags[]

string

Tagi definiujące źródła macierzy czasu trwania i macierzy odległości; duration_distance_matrices(i).rows(j) definiuje czas trwania i odległość od wizyt z tagiem duration_distance_matrix_src_tags(j) do innych wizyt w macierzy i.

Tagi odpowiadają VisitRequest.tags lub Vehicle.start_tags. Dana wartość VisitRequest lub Vehicle musi odpowiadać dokładnie jednemu tagowi w tym polu. Pamiętaj, że tagi źródła, miejsca docelowego i macierzy Vehicle mogą być takie same. Podobnie tagi źródła i miejsca docelowego VisitRequest mogą być takie same. Wszystkie tagi muszą być różne i nie mogą być pustymi ciągami znaków. Jeśli to pole nie jest puste, pole duration_distance_matrices nie może być puste.

duration_distance_matrix_dst_tags[]

string

Tagi definiujące miejsca docelowe macierzy czasu trwania i macierzy odległości; duration_distance_matrices(i).rows(j).durations(k) (lub ) duration_distance_matrices(i).rows(j).meters(k)) określa czas trwania (lub odległość) podróży od wizyt z tagiem duration_distance_matrix_src_tags(j) do wizyt z tagiem duration_distance_matrix_dst_tags(k) w macierzy i.

Tagi odpowiadają VisitRequest.tags lub Vehicle.start_tags. Dana wartość VisitRequest lub Vehicle musi odpowiadać dokładnie jednemu tagowi w tym polu. Pamiętaj, że tagi źródła, miejsca docelowego i macierzy Vehicle mogą być takie same. Podobnie tagi źródła i miejsca docelowego VisitRequest mogą być takie same. Wszystkie tagi muszą być różne i nie mogą być pustymi ciągami znaków. Jeśli to pole nie jest puste, pole duration_distance_matrices nie może być puste.

transition_attributes[]

TransitionAttributes

Do modelu dodano atrybuty przejścia.

shipment_type_incompatibilities[]

ShipmentTypeIncompatibility

Zbiory niezgodnych typów przesyłek (patrz ShipmentTypeIncompatibility).

shipment_type_requirements[]

ShipmentTypeRequirement

Zestawy wymagań shipment_type (patrz ShipmentTypeRequirement).

precedence_rules[]

PrecedenceRule

Zbiór reguł pierwszeństwa, które muszą być egzekwowane w modelu.

WAŻNE: użycie reguł pierwszeństwa ogranicza rozmiar problemu, który można zoptymalizować. Żądania korzystające z reguł pierwszeństwa, które obejmują wiele przesyłek, mogą zostać odrzucone.

max_active_vehicles

int32

Ogranicza maksymalną liczbę aktywnych pojazdów. Pojazd jest aktywny, jeśli jego trasa obejmuje co najmniej 1 przesyłkę. Można go użyć do ograniczenia liczby tras w przypadku, gdy jest mniej kierowców niż pojazdów, a flota pojazdów jest niejednorodna. Optymalizacja wybierze najlepszy podzbiór pojazdów do użycia. Musi być liczbą dodatnią.

DurationDistanceMatrix

Określa macierz czasu trwania i macierz odległości od lokalizacji wizyty i punktu początkowego pojazdu do lokalizacji wizyty i punktu końcowego pojazdu.

Pola
rows[]

Row

Określa wiersze macierzy czasu trwania i odległości. Musi zawierać tyle samo elementów co ShipmentModel.duration_distance_matrix_src_tags.

vehicle_start_tag

string

Tag określający, do których pojazdów ma zastosowanie ta macierz czasu trwania i odległości. Jeśli to pole jest puste, dotyczy wszystkich pojazdów i może istnieć tylko jedna macierz.

Każdy początek trasy pojazdu musi pasować do dokładnie jednej macierzy, tzn. dokładnie jedno pole start_tags musi pasować do pola vehicle_start_tag macierzy (i tylko tej macierzy).

Wszystkie macierze muszą mieć różne wartości vehicle_start_tag.

Wiersz

Określa wiersz macierzy czasu trwania i odległości.

Pola
durations[]

Duration

Wartości czasu trwania dla danego wiersza. Musi zawierać tyle samo elementów co ShipmentModel.duration_distance_matrix_dst_tags.

meters[]

double

Wartości odległości dla danego wiersza. Jeśli żadne koszty ani ograniczenia nie odnoszą się do odległości w modelu, to pole może pozostać puste. W przeciwnym razie musi zawierać tyle samo elementów co durations.

Cel

Cele całkowicie zastępują model kosztów, dlatego są niezgodne z dotychczasowymi kosztami. Każdy cel jest mapowany na szereg wstępnie zdefiniowanych kosztów, np. pojazdów, przesyłek lub atrybutów przejścia.

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

Pola
type

Type

Typ celu.

weight

double

Jak bardzo ten cel powinien się liczyć w porównaniu z innymi. Może to być dowolna liczba nieujemna, a wagi nie muszą sumować się do 1. Domyślna wartość wag to 1,0.

Typ

Typ celu, który zostanie zmapowany na zestaw kosztów.

Wartości w polu enum
DEFAULT Aby zapewnić rozsądne rozwiązanie, zostanie użyty domyślny zestaw kosztów. Uwaga: ten cel może być używany samodzielnie, ale zawsze będzie też dodawany z wagą 1,0 jako punkt odniesienia do celów określonych przez użytkownika, jeśli nie został jeszcze dodany.
MIN_DISTANCE „MIN”. Zminimalizuj całkowitą przebytą odległość.
MIN_WORKING_TIME Zminimalizuj łączny czas pracy wszystkich pojazdów.
MIN_TRAVEL_TIME To samo co powyżej, ale dotyczy tylko czasu podróży.
MIN_NUM_VEHICLES Zminimalizuj liczbę używanych pojazdów.

PrecedenceRule

Reguła pierwszeństwa między 2 zdarzeniami (każde zdarzenie to odbiór lub dostawa przesyłki): „drugie” zdarzenie musi rozpocząć się co najmniej offset_duration po rozpoczęciu „pierwszego”.

Kilka reguł pierwszeństwa może odnosić się do tych samych (lub powiązanych) zdarzeń, np. „odbiór B następuje po dostawie A” i „odbiór C następuje po odbiorze B”.

Ponadto pierwszeństwo obowiązuje tylko wtedy, gdy obie przesyłki są realizowane, a w przeciwnym razie jest ignorowane.

Pola
first_is_delivery

bool

Wskazuje, czy „pierwsze” zdarzenie to dostawa.

second_is_delivery

bool

Wskazuje, czy „drugie” zdarzenie to dostawa.

offset_duration

Duration

Przesunięcie między „pierwszym” a „drugim” zdarzeniem. Może być ujemna.

first_index

int32

Indeks przesyłki „pierwszego” zdarzenia. To pole musi być określone.

second_index

int32

Indeks przesyłki „drugiego” zdarzenia. To pole musi być określone.

ShipmentRoute

Trasę pojazdu można rozłożyć na osi czasu w ten sposób (zakładamy, że jest n wizyt):

  |            |            |          |       |  T[2], |        |      |
  | Transition |  Visit #0  |          |       |  V[2], |        |      |
  |     #0     |    aka     |   T[1]   |  V[1] |  ...   | V[n-1] | T[n] |
  |  aka T[0]  |    V[0]    |          |       | V[n-2],|        |      |
  |            |            |          |       | T[n-1] |        |      |
  ^            ^            ^          ^       ^        ^        ^      ^
vehicle    V[0].start   V[0].end     V[1].   V[1].    V[n].    V[n]. vehicle
 start     (arrival)   (departure)   start   end      start    end     end

Pamiętaj, że rozróżniamy:

  • „zdarzenia punktualne”, takie jak rozpoczęcie i zakończenie trasy pojazdu oraz rozpoczęcie i zakończenie każdej wizyty (czyli przyjazd i odjazd). Występują w określonej sekundzie.
  • „przedziały czasu”, takie jak same wizyty i przejścia między nimi. Chociaż przedziały czasu mogą czasami mieć zerowy czas trwania, tzn. zaczynać się i kończyć w tej samej sekundzie, często mają dodatni czas trwania.

Niezmienniki:

  • Jeśli jest n wizyt, jest n+1 przejść.
  • Wizyta jest zawsze poprzedzona przejściem (ten sam indeks) i następuje po niej przejście (indeks + 1).
  • Po uruchomieniu pojazdu zawsze następuje przejście 0.
  • Zakończenie trasy pojazdu jest zawsze poprzedzone przejazdem #n.

Oto co się dzieje podczas Transition i Visit:

---+-------------------------------------+-----------------------------+-->
   |           TRANSITION[i]             |           VISIT[i]          |
   |                                     |                             |
   |  * TRAVEL: the vehicle moves from   |      PERFORM the visit:     |
   |    VISIT[i-1].departure_location to |                             |
   |    VISIT[i].arrival_location, which |  * Spend some time:         |
   |    takes a given travel duration    |    the "visit duration".    |
   |    and distance                     |                             |
   |                                     |  * Load or unload           |
   |  * BREAKS: the driver may have      |    some quantities from the |
   |    breaks (e.g. lunch break).       |    vehicle: the "demand".   |
   |                                     |                             |
   |  * WAIT: the driver/vehicle does    |                             |
   |    nothing. This can happen for     |                             |
   |    many reasons, for example when   |                             |
   |    the vehicle reaches the next     |                             |
   |    event's destination before the   |                             |
   |    start of its time window         |                             |
   |                                     |                             |
   |  * DELAY: *right before* the next   |                             |
   |    arrival. E.g. the vehicle and/or |                             |
   |    driver spends time unloading.    |                             |
   |                                     |                             |
---+-------------------------------------+-----------------------------+-->
   ^                                     ^                             ^
V[i-1].end                           V[i].start                    V[i].end

Na koniec przedstawiamy, jak można rozmieścić elementy PODRÓŻ, PRZERWY, OPÓŹNIENIE i OCZEKIWANIE podczas przejścia.

  • Nie nakładają się na siebie.
  • OPÓŹNIENIE jest unikalne i musi być ciągłym okresem bezpośrednio przed następną wizytą (lub zakończeniem trasy pojazdu). Dlatego wystarczy znać czas trwania opóźnienia, aby określić jego początek i koniec.
  • PRZERWY to ciągłe, nienakładające się okresy. Odpowiedź określa czas rozpoczęcia i czas trwania każdej przerwy.
  • PODRÓŻ i OCZEKIWANIE są „wywłaszczalne”: mogą zostać przerwane kilka razy podczas tego przejścia. Klienci mogą założyć, że podróż odbywa się „jak najszybciej”, a „oczekiwanie” wypełnia pozostały czas.

Przykład (złożony):

                               TRANSITION[i]
--++-----+-----------------------------------------------------------++-->
  ||     |       |           |       |           |         |         ||
  ||  T  |   B   |     T     |       |     B     |         |    D    ||
  ||  r  |   r   |     r     |   W   |     r     |    W    |    e    ||
  ||  a  |   e   |     a     |   a   |     e     |    a    |    l    ||
  ||  v  |   a   |     v     |   i   |     a     |    i    |    a    ||
  ||  e  |   k   |     e     |   t   |     k     |    t    |    y    ||
  ||  l  |       |     l     |       |           |         |         ||
  ||     |       |           |       |           |         |         ||
--++-----------------------------------------------------------------++-->
Pola
vehicle_index

int32

Pojazd realizujący trasę, identyfikowany przez indeks w źródle ShipmentModel.

vehicle_label

string

Etykieta pojazdu, który obsługuje tę trasę, równa ShipmentModel.vehicles(vehicle_index).label, jeśli została określona.

vehicle_start_time

Timestamp

Godzina, o której pojazd rozpoczyna trasę.

vehicle_end_time

Timestamp

Godzina, o której pojazd kończy trasę.

visits[]

Visit

Uporządkowana sekwencja wizyt reprezentująca trasę. visits[i] to i-ta wizyta na trasie. Jeśli to pole jest puste, pojazd jest uznawany za nieużywany.

transitions[]

Transition

Lista uporządkowana przejść dla trasy.

has_traffic_infeasibilities

bool

Gdy parametr OptimizeToursRequest.consider_road_traffic ma wartość „true”, to pole wskazuje, że niespójności w czasach przejazdu są prognozowane na podstawie szacunkowego czasu podróży obliczonego na podstawie natężenia ruchu. Może nie być wystarczająco dużo czasu na przejazd dostosowany do natężenia ruchu, opóźnienia i przerwy między wizytami, przed pierwszą wizytą lub po ostatniej wizycie, przy jednoczesnym zachowaniu okien czasowych wizyt i pojazdów. Na przykład

  start_time(previous_visit) + duration(previous_visit) +
  travel_duration(previous_visit, next_visit) > start_time(next_visit)

Przybycie do lokalizacji next_visit prawdopodobnie nastąpi później niż w obecnym przedziale czasowym ze względu na dłuższy szacowany czas podróży (travel_duration(previous_visit, next_visit)) spowodowany natężeniem ruchu. Przerwa może też zostać wymuszona w czasie wizyty ze względu na wzrost szacowanego czasu podróży i ograniczenia dotyczące okna czasowego wizyty lub przerwy.

route_polyline

EncodedPolyline

Zakodowana reprezentacja linii łamanej trasy. To pole jest wypełniane tylko wtedy, gdy parametr OptimizeToursRequest.populate_polylines ma wartość „true”.

breaks[]

Break

Przerwy zaplanowane dla pojazdu obsługującego tę trasę. Sekwencja breaks reprezentuje przedziały czasu, z których każdy zaczyna się w odpowiednim start_time i trwa duration sekund.

metrics

AggregatedMetrics

Czas trwania, odległość i wskaźniki obciążenia dla tej trasy. Pola AggregatedMetrics są sumowane we wszystkich ShipmentRoute.transitions lub ShipmentRoute.visits, w zależności od kontekstu.

vehicle_fullness

VehicleFullness

Pole VehicleFullness do obliczania, jak blisko limitów pojazdów są dane z limitem. Jego pola to stosunki między polem danych z limitem (np. AggregatedMetrics.travel_distance_meters) a powiązanym limitem pojazdów (np. Vehicle.route_distance_limit).

Eksperymentalne: działanie lub istnienie tego pola może się zmienić w przyszłości.

route_costs

map<string, double>

Koszt trasy z podziałem na pola żądania związane z kosztami. Klucze to ścieżki proto względem wejściowego żądania OptimizeToursRequest, np. „model.shipments.pickups.cost”, a wartości to łączny koszt wygenerowany przez odpowiednie pole kosztu, zagregowany dla całej trasy. Innymi słowy, costs["model.shipments.pickups.cost"] to suma wszystkich kosztów odbioru na trasie. Wszystkie koszty zdefiniowane w modelu są tu szczegółowo raportowane, z wyjątkiem kosztów związanych z TransitionAttributes, które od stycznia 2022 r. są raportowane tylko w sposób zagregowany.

route_total_cost

double

Łączny koszt trasy. Suma wszystkich kosztów na mapie kosztów.

Przerwa

Dane reprezentujące wykonanie przerwy.

Pola
start_time

Timestamp

Czas rozpoczęcia przerwy.

duration

Duration

Czas trwania przerwy.

EncodedPolyline

Zakodowana reprezentacja linii łamanej. Więcej informacji o kodowaniu linii łamanej znajdziesz tutaj: https://developers.google.com/maps/documentation/utilities/polylinealgorithm https://developers.google.com/maps/documentation/javascript/reference/geometry#encoding.

Pola
points

string

Ciąg znaków reprezentujący zakodowane punkty linii łamanej.

Przejście

Przejście między 2 zdarzeniami na trasie. Zobacz opis: ShipmentRoute.

Jeśli pojazd nie ma start_location lub end_location, odpowiednie dane dotyczące podróży mają wartość 0.

Pola
travel_duration

Duration

Czas podróży podczas tej zmiany.

travel_distance_meters

double

Odległość przebyta podczas przejścia.

traffic_info_unavailable

bool

Gdy ruch jest żądany przez OptimizeToursRequest.consider_road_traffic, a informacji o ruchu nie można pobrać dla Transition, ta wartość logiczna jest ustawiona na „true”. Może to być problem tymczasowy (rzadki błąd serwerów ruchu w czasie rzeczywistym) lub stały (brak danych dla tej lokalizacji).

delay_duration

Duration

Suma czasów opóźnienia zastosowanych do tego przejścia. Jeśli występuje opóźnienie, zaczyna się ono dokładnie delay_duration s przed następnym zdarzeniem (wizytą lub zakończeniem trasy pojazdu). Zobacz TransitionAttributes.delay.

break_duration

Duration

Suma czasu trwania przerw występujących podczas tego przejścia (jeśli występują). Szczegóły dotyczące czasu rozpoczęcia i czasu trwania każdej przerwy są przechowywane w obiekcie ShipmentRoute.breaks.

wait_duration

Duration

Czas oczekiwania podczas tego przejścia. Czas oczekiwania odpowiada czasowi bezczynności i nie obejmuje czasu przerwy. Pamiętaj też, że ten czas oczekiwania może być podzielony na kilka nieciągłych przedziałów.

total_duration

Duration

Łączny czas trwania przejścia (podany dla wygody). Jest on równy:

  • następna wizyta start_time (lub vehicle_end_time, jeśli jest to ostatnie przejście) – start_time tego przejścia;
  • Jeśli ShipmentRoute.has_traffic_infeasibilities ma wartość false, dodatkowo obowiązuje ta zasada: `total_duration = travel_duration + delay_duration
  • break_duration + wait_duration`.
start_time

Timestamp

Czas rozpoczęcia tego przejścia.

route_polyline

EncodedPolyline

Zakodowana reprezentacja linii łamanej trasy, którą przebyto podczas przejścia. To pole jest wypełniane tylko wtedy, gdy parametr populate_transition_polylines ma wartość „true”.

route_token

string

Tylko dane wyjściowe. Nieprzezroczysty token, który można przekazać do Navigation SDK, aby odtworzyć trasę podczas nawigacji, a w przypadku zmiany trasy zachować pierwotny zamiar podczas tworzenia trasy. Traktuj ten token jako nieprzezroczysty obiekt blob. Nie porównuj jej wartości w różnych żądaniach, ponieważ może się ona zmieniać, nawet jeśli usługa zwraca dokładnie tę samą trasę. To pole jest wypełniane tylko wtedy, gdy parametr populate_transition_polylines ma wartość „true”.

vehicle_loads

map<string, VehicleLoad>

Ładunki pojazdu podczas tego przejścia dla każdego typu, który pojawia się w Vehicle.load_limits tego pojazdu lub ma niezerową wartość Shipment.load_demands w przypadku niektórych przesyłek realizowanych na tej trasie.

Ładunki podczas pierwszego przejścia to ładunki początkowe trasy pojazdu. Następnie po każdej wizycie load_demands wizyty są dodawane lub odejmowane, aby uzyskać obciążenia następnego przejazdu, w zależności od tego, czy wizyta była odbiorem czy dostawą.

VehicleLoad

Raportuje rzeczywiste obciążenie pojazdu w danym punkcie trasy dla danego typu (patrz Transition.vehicle_loads).

Pola
amount

int64

Obciążenie pojazdu danego typu. Jednostka obciążenia jest zwykle wskazywana przez typ. Zobacz Transition.vehicle_loads.

Odwiedź

Wizyta wykonana podczas trasy. Ta wizyta odpowiada odbiorowi lub dostawie Shipment.

Pola
shipment_index

int32

Indeks pola shipments w źródle ShipmentModel.

is_pickup

bool

Jeśli ma wartość „prawda”, wizyta odpowiada odbiorowi Shipment. W przeciwnym razie odpowiada dostawie.

visit_request_index

int32

Indeks VisitRequest w polu odbioru lub dostawy w Shipment (patrz is_pickup).

start_time

Timestamp

Czas rozpoczęcia wizyty. Pamiętaj, że pojazd może dotrzeć do miejsca wizyty wcześniej. Godziny są zgodne z ShipmentModel.

load_demands

map<string, Load>

Łączne zapotrzebowanie na obciążenie wizyty jako suma przesyłki i żądania wizyty load_demands. Wartości są ujemne, jeśli wizyta jest dostawą. Żądania są raportowane dla tych samych typów co Transition.loads (patrz to pole).

detour

Duration

Dodatkowy czas objazdu ze względu na przesyłki odwiedzone na trasie przed wizytą i potencjalny czas oczekiwania spowodowany oknami czasowymi. Jeśli wizyta jest dostawą, objazd jest obliczany na podstawie odpowiedniej wizyty odbioru i jest równy:

start_time(delivery) - start_time(pickup)
- (duration(pickup) + travel duration from the pickup location
to the delivery location).

W przeciwnym razie jest obliczana na podstawie pojazdu start_location i jest równa:

start_time - vehicle_start_time - travel duration from
the vehicle's `start_location` to the visit.
shipment_label

string

Kopia odpowiedniego elementu Shipment.label, jeśli określono go w zasadzie Shipment.

visit_label

string

Kopia odpowiedniego elementu VisitRequest.label, jeśli określono go w elemencie VisitRequest.

visit_type

VisitType

Opcjonalnie: Określa typ wizyty. Zastępuje pole Visit.is_pickup.

injected_solution_location_token

int32

Nieprzezroczysty token reprezentujący informacje o lokalizacji wizyty.

To pole może być wypełnione w wizytach na trasach wynikowych, gdy dla tej wizyty ustawiono wartość VisitRequest.avoid_u_turns na „true” lub gdy w żądaniu OptimizeToursRequest ustawiono wartość ShipmentModel.avoid_u_turns na „true”.

Eksperymentalne: więcej informacji znajdziesz na stronie https://developers.google.com/maps/tt/route-optimization/experimental/u-turn-avoidance/make-request.

VisitType

Wskazuje, czy wizyta dotyczy odbioru, dostawy czy wizyty w miejscu Stop. Wizyty na przystanku są używane tylko wtedy, gdy włączona jest optymalizacja multimodalna.

Wartości w polu enum
VISIT_TYPE_UNSPECIFIED Nieokreślony typ wizyty.
PICKUP_SHIPMENT Wizyta odpowiada odbiorowi przesyłki.
DELIVER_SHIPMENT Wizyta odpowiada dostawie przesyłki.

ShipmentTypeIncompatibility

Określa niezgodności między przesyłkami w zależności od ich shipment_type. Wyświetlanie niezgodnych przesyłek na tej samej trasie jest ograniczone na podstawie trybu niezgodności.

Pola
types[]

string

Lista niezgodnych typów. Dwie przesyłki, które mają różne wartości shipment_types spośród wymienionych, są „niezgodne”.

incompatibility_mode

IncompatibilityMode

Tryb zastosowany do niezgodności.

IncompatibilityMode

Tryby określające, jak ograniczone jest występowanie niezgodnych przesyłek na tej samej trasie.

Wartości w polu enum
INCOMPATIBILITY_MODE_UNSPECIFIED Nieokreślony tryb niezgodności. Ta wartość nie powinna być nigdy używana.
NOT_PERFORMED_BY_SAME_VEHICLE W tym trybie 2 przesyłki o niezgodnych typach nigdy nie mogą być przewożone tym samym pojazdem.
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY

W tym trybie 2 przesyłki o niezgodnych typach nigdy nie mogą znajdować się w tym samym pojeździe w tym samym czasie:

  • Mogą korzystać z tego samego pojazdu tylko wtedy, gdy jeden z nich zostanie dostarczony, zanim drugi zostanie odebrany.
  • Jeśli obie przesyłki są tylko do odbioru (bez dostaw) lub tylko do dostawy (bez odbioru), nie mogą być przewożone tym samym pojazdem.

ShipmentTypeRequirement

Określa wymagania między przesyłkami na podstawie ich shipment_type. Szczegóły wymagania są określane przez tryb wymagania.

Pola
required_shipment_type_alternatives[]

string

Lista alternatywnych typów przesyłek wymaganych przez dependent_shipment_types.

dependent_shipment_types[]

string

Wszystkie przesyłki z typem w polu dependent_shipment_types wymagają co najmniej 1 przesyłki typu required_shipment_type_alternatives, która zostanie dostarczona na tej samej trasie.

UWAGA: łańcuchy wymagań, w których shipment_type zależy od siebie, są niedozwolone.

requirement_mode

RequirementMode

Tryb zastosowany do wymagania.

RequirementMode

Tryby określające wygląd przesyłek zależnych na trasie.

Wartości w polu enum
REQUIREMENT_MODE_UNSPECIFIED Nieokreślony tryb wymagań. Ta wartość nie powinna być nigdy używana.
PERFORMED_BY_SAME_VEHICLE W tym trybie wszystkie przesyłki „zależne” muszą być przewożone tym samym pojazdem co co najmniej 1 z przesyłek „wymaganych”.
IN_SAME_VEHICLE_AT_PICKUP_TIME

W trybie IN_SAME_VEHICLE_AT_PICKUP_TIME wszystkie przesyłki „zależne” muszą mieć co najmniej 1 przesyłkę „wymaganą” w pojeździe w momencie odbioru.

Dlatego „zależny” odbiór przesyłki musi mieć:

  • przesyłka „wymagana” tylko do dostawy, która została dostarczona na trasie później, lub
  • „Wymagana” przesyłka musi zostać odebrana na trasie przed nią, a jeśli „wymagana” przesyłka ma zostać dostarczona, musi to nastąpić po odbiorze przesyłki „zależnej”.
IN_SAME_VEHICLE_AT_DELIVERY_TIME Tak samo jak wcześniej, z tym że „zależne” przesyłki muszą mieć „wymaganą” przesyłkę w pojeździe w momencie dostawy.

SkippedShipment

Określa szczegóły niezrealizowanych dostaw w rozwiązaniu. W przypadku prostych spraw lub gdy jesteśmy w stanie określić przyczynę pominięcia, podajemy ją tutaj.

Pola
index

int32

Indeks odpowiada indeksowi przesyłki w źródle ShipmentModel.

label

string

Kopia odpowiedniego elementu Shipment.label, jeśli określono go w elemencie Shipment.

reasons[]

Reason

Lista powodów, dla których dostawa została pominięta. Zobacz komentarz powyżej Reason. Jeśli nie będziemy w stanie ustalić, dlaczego dostawa została pominięta, przyczyny nie zostaną określone.

penalty_cost

double

To jest kopia Shipment.penalty_cost, którą dołączyliśmy tutaj, aby ułatwić Ci zrozumienie, jak poważne jest pominięcie dostawy.

Eksperymentalne: działanie lub istnienie tego pola może się zmienić w przyszłości.

estimated_incompatible_vehicle_ratio

double

Szacowany odsetek pojazdów, które nie mogą zrealizować tej dostawy z co najmniej jednego z poniższych powodów. Uwaga: to pole jest wypełniane tylko wtedy, gdy przyczyny dotyczą pojazdu.

Eksperymentalne: działanie lub istnienie tego pola może się zmienić w przyszłości.

Przyczyna

Jeśli możemy wyjaśnić, dlaczego dostawa została pominięta, przyczyny zostaną wymienione tutaj. Jeśli przyczyna nie jest taka sama dla wszystkich pojazdów, element reason będzie zawierać więcej niż 1 element. Pominięta dostawa nie może mieć zduplikowanych powodów, tzn. takich, w których wszystkie pola są takie same z wyjątkiem example_vehicle_index. Przykład:

reasons {
  code: DEMAND_EXCEEDS_VEHICLE_CAPACITY
  example_vehicle_index: 1
  example_exceeded_capacity_type: "Apples"
}
reasons {
  code: DEMAND_EXCEEDS_VEHICLE_CAPACITY
  example_vehicle_index: 3
  example_exceeded_capacity_type: "Pears"
}
reasons {
  code: CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT
  example_vehicle_index: 1
}

Pominięta przesyłka jest niezgodna ze wszystkimi pojazdami. Przyczyny mogą być różne w przypadku poszczególnych pojazdów, ale co najmniej 1 pojazd przekroczy pojemność „Jabłka” (w tym pojazd 1), co najmniej 1 pojazd przekroczy pojemność „Gruszki” (w tym pojazd 3) i co najmniej 1 pojazd przekroczy limit odległości (w tym pojazd 1).

Pola
code

Code

Zapoznaj się z komentarzami do kodu.

example_vehicle_indices[]

int32

Tak samo jak example_vehicle_index, z tym że podajemy listę wielu zidentyfikowanych pojazdów. Ta lista nie jest wyczerpująca. To pole jest wypełniane tylko wtedy, gdy [fill_example_vehicle_indices_in_skipped_reasons][] ma wartość true.

Eksperymentalne: działanie lub istnienie tego pola może się zmienić w przyszłości.

example_exceeded_capacity_type

string

Jeśli kod przyczyny to DEMAND_EXCEEDS_VEHICLE_CAPACITY, dokumentuje 1 typ pojemności, który został przekroczony.

example_vehicle_index

int32

Jeśli przyczyna jest związana z niezgodnością przesyłki z pojazdem, to pole zawiera indeks jednego odpowiedniego pojazdu.

Kod

Kod określający typ przyczyny. Kolejność nie ma znaczenia. W szczególności nie wskazuje, czy dany powód pojawi się przed innym w rozwiązaniu, jeśli oba mają zastosowanie.

Wartości w polu enum
CODE_UNSPECIFIED Nigdy nie należy używać tej opcji.
NO_VEHICLE W modelu nie ma pojazdu, co uniemożliwia realizację wszystkich dostaw.
DEMAND_EXCEEDS_VEHICLE_CAPACITY Zapotrzebowanie na przesyłkę przekracza pojemność pojazdu w przypadku niektórych typów pojemności, z których jednym jest example_exceeded_capacity_type.
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT

Minimalna odległość niezbędna do wykonania tej przesyłki, czyli od start_location pojazdu do lokalizacji odbioru lub dostawy przesyłki i do lokalizacji końcowej pojazdu, przekracza route_distance_limit pojazdu.

Pamiętaj, że do tych obliczeń używamy odległości geodezyjnych.

CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT

Minimalny czas potrzebny na realizację tej dostawy, w tym czas podróży, czas oczekiwania i czas obsługi, przekracza route_duration_limit pojazdu.

Uwaga: czas podróży jest obliczany w najlepszym przypadku, czyli jako odległość geodezyjna x 36 m/s (około 130 km/h).

CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TRAVEL_DURATION_LIMIT To samo co powyżej, ale porównujemy tylko minimalny czas podróży i travel_duration_limit pojazdu.
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TIME_WINDOWS Pojazd nie może zrealizować tej przesyłki w najlepszym przypadku (obliczenia czasu znajdziesz w CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT), jeśli rozpocznie ją w najwcześniejszym czasie rozpoczęcia: łączny czas spowoduje, że pojazd zakończy realizację po najpóźniejszym czasie zakończenia.
VEHICLE_NOT_ALLOWED Pole allowed_vehicle_indices przesyłki nie jest puste, a ten pojazd nie należy do tej przesyłki.
VEHICLE_IGNORED

Pole ignore pojazdu ma wartość true.

Eksperymentalne: działanie lub istnienie tego pola może się zmienić w przyszłości.

SHIPMENT_IGNORED

Pole ignore przesyłki ma wartość true.

Eksperymentalne: działanie lub istnienie tego pola może się zmienić w przyszłości.

SKIPPED_IN_INJECTED_SOLUTION_CONSTRAINT

Dostawa została pominięta w: injected_solution_constraint.

Eksperymentalne: działanie lub istnienie tego pola może się zmienić w przyszłości.

VEHICLE_ROUTE_IS_FULLY_SEQUENCE_CONSTRAINED

Złagodzenie ograniczeń trasy pojazdu określone w: injected_solution_constraint nie zezwala na wstawianie wizyt.

Eksperymentalne: działanie lub istnienie tego pola może się zmienić w przyszłości.

ZERO_PENALTY_COST

Przesyłka ma zerowy koszt kary. Może to być przydatne jako zaawansowana opcja modelowania, ale może też wyjaśniać, dlaczego przesyłka została pominięta.

Eksperymentalne: działanie lub istnienie tego pola może się zmienić w przyszłości.

TimeWindow

Okna czasowe ograniczają czas zdarzenia, np. czas przybycia na wizytę lub czas rozpoczęcia i zakończenia pracy pojazdu.

Sztywne granice przedziału czasu, start_time i end_time, wymuszają najwcześniejszy i najpóźniejszy czas zdarzenia, tak aby start_time <= event_time <= end_time. Dolna granica elastycznego okna czasowego, soft_start_time, określa preferencję, aby zdarzenie miało miejsce o soft_start_time lub później, przez naliczenie kosztu proporcjonalnego do czasu, jaki upłynął przed soft_start_time, gdy zdarzenie miało miejsce. Górna granica elastycznego okna czasowego, soft_end_time, wyraża preferencję, aby zdarzenie miało miejsce o soft_end_time lub wcześniej, przez naliczenie kosztu proporcjonalnego do czasu, jaki upłynął od soft_end_time do momentu wystąpienia zdarzenia. start_time, end_time, soft_start_time i soft_end_time powinny mieścić się w globalnych limitach czasu (patrz ShipmentModel.global_start_time i ShipmentModel.global_end_time) i powinny uwzględniać:

  0 <= `start_time` <= `end_time` and
  0 <= `start_time` <= `soft_start_time` and
  0 <= `soft_end_time` <= `end_time`.
Pola
start_time

Timestamp

Czas rozpoczęcia sztywnego przedziału czasu. Jeśli nie zostanie określony, zostanie ustawiony na ShipmentModel.global_start_time.

end_time

Timestamp

Czas zakończenia sztywnego przedziału czasu. Jeśli nie zostanie określony, zostanie ustawiony na ShipmentModel.global_end_time.

soft_start_time

Timestamp

Czas rozpoczęcia „miękkiego” okna czasowego.

soft_end_time

Timestamp

Miękki czas zakończenia przedziału czasu.

cost_per_hour_before_soft_start_time

double

Koszt za godzinę dodawany do innych kosztów w modelu, jeśli zdarzenie występuje przed wartością soft_start_time, obliczany w ten sposób:

   max(0, soft_start_time - t.seconds)
                          * cost_per_hour_before_soft_start_time / 3600,
t being the time of the event.

Ten koszt musi być dodatni, a pole można ustawić tylko wtedy, gdy ustawiono soft_start_time.

cost_per_hour_after_soft_end_time

double

Koszt za godzinę dodawany do innych kosztów w modelu, jeśli zdarzenie występuje po soft_end_time, obliczany w ten sposób:

   max(0, t.seconds - soft_end_time.seconds)
                    * cost_per_hour_after_soft_end_time / 3600,
t being the time of the event.

Ten koszt musi być dodatni, a pole można ustawić tylko wtedy, gdy ustawiono soft_end_time.

TransitionAttributes

Określa atrybuty przejść między 2 kolejnymi wizytami na trasie. Do tego samego przejścia może mieć zastosowanie kilka TransitionAttributes: w takim przypadku wszystkie dodatkowe koszty sumują się i obowiązuje najbardziej rygorystyczne ograniczenie lub limit (zgodnie z naturalną semantyką „ORAZ”).

Pola
src_tag

string

Tagi definiujące zbiór przejść (src->dst), do których mają zastosowanie te atrybuty.

Wizyta źródłowa lub początek pojazdu pasuje, jeśli jego VisitRequest.tags lub Vehicle.start_tags zawiera src_tag lub nie zawiera excluded_src_tag (w zależności od tego, które z tych 2 pól nie jest puste).

excluded_src_tag

string

Zobacz src_tag. Tylko jedna z wartości src_tag i excluded_src_tag może być niepusta.

dst_tag

string

Wizyta w miejscu docelowym lub zakończenie trasy pojazdu pasuje, jeśli VisitRequest.tags lub Vehicle.end_tags zawiera dst_tag lub nie zawiera excluded_dst_tag (w zależności od tego, które z tych 2 pól nie jest puste).

excluded_dst_tag

string

Zobacz dst_tag. Tylko jedna z wartości dst_tag i excluded_dst_tag może być niepusta.

cost

double

Określa koszt wykonania tego przejścia. Jest to ta sama jednostka co w przypadku wszystkich innych kosztów w modelu i nie może być ujemna. Jest on stosowany oprócz wszystkich innych istniejących kosztów.

cost_per_kilometer

double

Określa koszt za kilometr stosowany do odległości przebytej podczas wykonywania tego przejścia. Suma jest dodawana do wartości Vehicle.cost_per_kilometer określonej w przypadku pojazdów.

distance_limit

DistanceLimit

Określa limit odległości przebytej podczas tego przejścia.

Od czerwca 2021 r. obsługiwane są tylko limity miękkie.

delay

Duration

Określa opóźnienie podczas wykonywania tego przejścia.

To opóźnienie zawsze występuje po zakończeniu wizyty w lokalizacji źródłowej i przed rozpoczęciem wizyty w lokalizacji docelowej.

Uri

Identyfikator URI wskazujący zasób, który może być odczytywany i zapisywany przez interfejs Route Optimization API.

Pola
uri

string

Identyfikator URI zasobu. Zasób może jeszcze nie istnieć.

Zawartość zasobu jest zakodowana jako JSON lub textproto. Obsługiwane są tylko zasoby Google Cloud Storage. Jeśli zasób jest zakodowany jako JSON, nazwa zasobu musi mieć sufiks .json. Jeśli zasób jest zakodowany jako textproto, nazwa zasobu musi mieć sufiks .txtpb. Na przykład identyfikator URI obiektu w Google Cloud Storage do pliku zakodowanego w formacie JSON może wyglądać tak: gs://bucket/path/input/object.json.

Pojazd

Modeluje pojazd w problemie z wysyłką. Rozwiązanie problemu z przesyłką spowoduje utworzenie dla tego pojazdu trasy rozpoczynającej się w lokalizacji start_location i kończącej się w lokalizacji end_location. Trasa to sekwencja wizyt (patrz ShipmentRoute).

Pola
display_name

string

Zdefiniowana przez użytkownika wyświetlana nazwa pojazdu. Może mieć maksymalnie 63 znaki i zawierać znaki UTF-8.

travel_mode

TravelMode

Tryb podróży, który wpływa na drogi, po których może poruszać się pojazd, i jego prędkość. Zobacz też travel_duration_multiple.

route_modifiers

RouteModifiers

Zbiór warunków, które należy spełnić, wpływających na sposób obliczania tras dla danego pojazdu.

start_location

LatLng

Położenie geograficzne, w którym pojazd zaczyna trasę, zanim odbierze przesyłki. Jeśli nie zostanie określony, pojazd rozpocznie trasę od pierwszego odbioru. Jeśli model przesyłki zawiera macierze czasu trwania i odległości, nie można określić parametru start_location.

start_waypoint

Waypoint

Punkt pośredni reprezentujący położenie geograficzne, w którym pojazd zaczyna trasę, zanim odbierze przesyłki. Jeśli nie określono ani start_waypoint, ani start_location, pojazd rozpoczyna trasę od pierwszego odbioru. Jeśli model dostawy zawiera macierze czasu trwania i odległości, nie można określić parametru start_waypoint.

end_location

LatLng

Położenie geograficzne, w którym pojazd kończy ostatnią trasę VisitRequest. Jeśli nie zostanie określona, ShipmentRoute pojazdu kończy się natychmiast po zakończeniu ostatniego VisitRequest. Jeśli model dostawy zawiera macierze czasu trwania i odległości, nie można określić parametru end_location.

end_waypoint

Waypoint

Punkt pośredni reprezentujący położenie geograficzne, w którym pojazd kończy ostatnie zadanie VisitRequest. Jeśli nie określono ani end_waypoint, ani end_location, ShipmentRoute pojazdu kończy się natychmiast po zakończeniu ostatniej VisitRequest. Jeśli model przesyłki zawiera macierze czasu trwania i odległości, nie można określić parametru end_waypoint.

start_tags[]

string

Określa tagi dołączone na początku trasy pojazdu.

Puste lub zduplikowane ciągi znaków są niedozwolone.

end_tags[]

string

Określa tagi dołączone na końcu trasy pojazdu.

Puste lub zduplikowane ciągi znaków są niedozwolone.

start_time_windows[]

TimeWindow

Okna czasowe, w których pojazd może opuścić lokalizację początkową. Muszą mieścić się w globalnych limitach czasu (patrz pola ShipmentModel.global_*). Jeśli nie określisz tej wartości, nie będzie żadnych ograniczeń poza globalnymi limitami czasu.

Okna czasowe należące do tego samego pola powtarzanego muszą być rozłączne, tzn.żadne okno czasowe nie może nakładać się na inne ani z nim sąsiadować. Muszą być też uporządkowane chronologicznie.

Wartości cost_per_hour_after_soft_end_time i soft_end_time można ustawić tylko wtedy, gdy jest tylko jedno okno czasowe.

end_time_windows[]

TimeWindow

Przedziały czasu, w których pojazd może dotrzeć do lokalizacji końcowej. Muszą mieścić się w globalnych limitach czasu (patrz pola ShipmentModel.global_*). Jeśli nie określisz tej wartości, nie będzie żadnych ograniczeń poza globalnymi limitami czasu.

Okna czasowe należące do tego samego pola powtarzanego muszą być rozłączne, tzn.żadne okno czasowe nie może nakładać się na inne ani z nim sąsiadować. Muszą być też uporządkowane chronologicznie.

Wartości cost_per_hour_after_soft_end_time i soft_end_time można ustawić tylko wtedy, gdy jest tylko jedno okno czasowe.

unloading_policy

UnloadingPolicy

Zasada rozładunku obowiązująca w pojeździe.

load_limits

map<string, LoadLimit>

pojemność pojazdu (np. waga, objętość, liczba palet); Klucze na mapie to identyfikatory typu obciążenia, zgodne z kluczami pola Shipment.load_demands. Jeśli w tej mapie nie ma danego klucza, odpowiadająca mu pojemność jest uważana za nieograniczoną.

cost_per_hour

double

Koszty pojazdu: wszystkie koszty sumują się i muszą być podane w tej samej jednostce co Shipment.penalty_cost.

Koszt za godzinę trasy pojazdu. Ten koszt jest stosowany do łącznego czasu trwania trasy i obejmuje czas podróży, czas oczekiwania i czas wizyty. Użycie cost_per_hour zamiast cost_per_traveled_hour może spowodować dodatkowe opóźnienie.

cost_per_traveled_hour

double

Koszt godziny podróży na trasie pojazdu. Ten koszt jest stosowany tylko do czasu podróży na trasie (czyli czasu podanego w polu ShipmentRoute.transitions) i nie obejmuje czasu oczekiwania ani czasu wizyty.

cost_per_kilometer

double

Koszt kilometra trasy pojazdu. Ten koszt jest stosowany do odległości podanej w polu ShipmentRoute.transitions i nie dotyczy odległości przebytej między polami arrival_location i departure_location w ramach pojedynczego pola VisitRequest.

fixed_cost

double

Koszt stały stosowany, jeśli ten pojazd jest używany do obsługi przesyłki.

used_if_route_is_empty

bool

To pole dotyczy tylko pojazdów, których trasa nie obejmuje żadnych przesyłek. Wskazuje, czy w tym przypadku pojazd powinien być uznawany za używany.

Jeśli ma wartość „true”, pojazd jedzie z lokalizacji początkowej do końcowej, nawet jeśli nie obsługuje żadnych przesyłek, a koszty czasu i odległości wynikające z podróży z lokalizacji początkowej do końcowej są brane pod uwagę.

W przeciwnym razie nie przemieszcza się z lokalizacji początkowej do końcowej i nie są dla niego planowane żadne break_rule ani opóźnienia (z TransitionAttributes). W takim przypadku ShipmentRoute pojazdu nie zawiera żadnych informacji oprócz indeksu i etykiety pojazdu.

route_duration_limit

DurationLimit

Limit stosowany do łącznego czasu trwania trasy pojazdu. W danym OptimizeToursResponse czas trwania trasy pojazdu to różnica między vehicle_end_time a vehicle_start_time.

travel_duration_limit

DurationLimit

Limit stosowany do czasu podróży na trasie pojazdu. W danym OptimizeToursResponse czas podróży trasą jest sumą wszystkich transitions.travel_duration.

route_distance_limit

DistanceLimit

Limit stosowany do łącznej odległości trasy pojazdu. W danym OptimizeToursResponse odległość trasy jest sumą wszystkich jej transitions.travel_distance_meters.

extra_visit_duration_for_visit_type

map<string, Duration>

Określa mapę od ciągów znaków visit_types do czasów trwania. Czas trwania to czas dodatkowy do VisitRequest.duration, który zostanie wykorzystany podczas wizyt z określonym visit_types. Ten dodatkowy czas wizyty zwiększa koszt, jeśli określono parametr cost_per_hour. Klucze (np. visit_types) nie mogą być pustymi ciągami znaków.

Jeśli prośba o wizytę ma kilka typów, na mapie zostanie dodany czas trwania dla każdego typu.

break_rule

BreakRule

Opisuje harmonogram przerw, który ma być stosowany w przypadku tego pojazdu. Jeśli pole jest puste, dla tego pojazdu nie zostaną zaplanowane żadne przerwy.

label

string

Określa etykietę tego pojazdu. Ta etykieta jest raportowana w odpowiedzi jako vehicle_label odpowiedniego ShipmentRoute.

ignore

bool

Jeśli ma wartość true, parametr used_if_route_is_empty musi mieć wartość false, a ten pojazd pozostanie nieużywany.

Jeśli przesyłka jest realizowana przez ignorowany pojazd w injected_first_solution_routes, jest pomijana w pierwszym rozwiązaniu, ale może zostać zrealizowana w odpowiedzi.

Jeśli przesyłka jest realizowana przez ignorowany pojazd w injected_solution_constraint, a powiązany odbiór lub dostawa muszą pozostać w pojeździe (czyli nie są rozluźnione do poziomu RELAX_ALL_AFTER_THRESHOLD), są pomijane w odpowiedzi. Jeśli przesyłka ma niepuste pole allowed_vehicle_indices, a wszystkie dozwolone pojazdy są ignorowane, jest ona pomijana w odpowiedzi.

travel_duration_multiple

double

Określa współczynnik, który może służyć do zwiększania lub zmniejszania czasu podróży tego pojazdu. Na przykład ustawienie wartości 2,0 oznacza, że pojazd jest wolniejszy, a czas podróży jest 2 razy dłuższy niż w przypadku standardowych pojazdów. Ta wielokrotność nie ma wpływu na czas trwania wizyt. Ma to wpływ na koszt, jeśli określono cost_per_hour lub cost_per_traveled_hour. Musi mieścić się w zakresie [0,001; 1000,0]. Jeśli nie zostanie ustawiony, pojazd jest standardowy, a mnożnik wynosi 1,0.

OSTRZEŻENIE: po zastosowaniu tej wielokrotności, ale przed wykonaniem jakichkolwiek operacji numerycznych, czasy podróży zostaną zaokrąglone do najbliższej sekundy, więc mała wielokrotność może spowodować utratę precyzji.

Zobacz też extra_visit_duration_for_visit_type poniżej.

DurationLimit

Limit określający maksymalny czas trwania trasy pojazdu. Może być twardy lub miękki.

Jeśli zdefiniowane jest pole limitu miękkiego, należy zdefiniować zarówno próg maksymalny, jak i powiązany z nim koszt.

Pola
max_duration

Duration

Ścisły limit ograniczający czas trwania do maksymalnie wartości max_duration.

soft_max_duration

Duration

Limit miękki nie wymusza maksymalnego czasu trwania, ale jego przekroczenie powoduje naliczenie kosztu trasy. Ten koszt jest dodawany do innych kosztów zdefiniowanych w modelu, z tą samą jednostką.

Jeśli podasz właściwość soft_max_duration, nie może ona być ujemna. Jeśli zdefiniowano również parametr max_duration, wartość soft_max_duration musi być mniejsza niż max_duration.

quadratic_soft_max_duration

Duration

Miękki limit, który nie wymusza maksymalnego czasu trwania, ale gdy zostanie naruszony, powoduje, że trasa generuje koszt, który jest kwadratem czasu trwania. Ten koszt jest dodawany do innych kosztów zdefiniowanych w modelu, z tą samą jednostką.

Jeśli ustawiono quadratic_soft_max_duration, muszą być spełnione te warunki:

  • Nie może być ujemna.
  • Wartość max_duration musi być zdefiniowana.
  • Wartość quadratic_soft_max_duration musi być mniejsza niż max_duration.
  • Różnica nie może przekraczać 1 dnia: max_duration - quadratic_soft_max_duration <= 86400 seconds
cost_per_hour_after_soft_max

double

Koszt za godzinę naliczany w przypadku przekroczenia progu soft_max_duration. Dodatkowy koszt wynosi 0, jeśli czas trwania jest poniżej progu. W przeciwnym razie koszt zależy od czasu trwania w następujący sposób:

  cost_per_hour_after_soft_max * (duration - soft_max_duration)

Koszt nie może być ujemny.

cost_per_square_hour_after_quadratic_soft_max

double

Koszt za godzinę kwadratową naliczany w przypadku przekroczenia progu quadratic_soft_max_duration.

Dodatkowy koszt wynosi 0, jeśli czas trwania jest krótszy niż próg. W przeciwnym razie koszt zależy od czasu trwania w następujący sposób:

  cost_per_square_hour_after_quadratic_soft_max *
  (duration - quadratic_soft_max_duration)^2

Koszt nie może być ujemny.

LoadLimit

Określa limit obciążenia pojazdu, np. „ta ciężarówka może przewozić tylko do 3500 kg”. Zobacz load_limits.

Pola
soft_max_load

int64

Limit obciążenia. Zobacz cost_per_unit_above_soft_max.

cost_per_unit_above_soft_max

double

Jeśli obciążenie na trasie tego pojazdu przekroczy soft_max_load, zostanie naliczona następująca kara (tylko raz na pojazd): (obciążenie – soft_max_load) * cost_per_unit_above_soft_max. Wszystkie koszty sumują się i muszą być podane w tej samej jednostce co Shipment.penalty_cost. Limity miękkie można definiować tylko w przypadku typów, które w całym modelu dotyczą tylko odbiorów lub tylko dostaw.

start_load_interval

Interval

Dopuszczalny przedział obciążenia pojazdu na początku trasy.

end_load_interval

Interval

Dopuszczalny przedział obciążenia pojazdu na końcu trasy.

max_load

int64

Maksymalna dopuszczalna wielkość obciążenia.

cost_per_kilometer

LoadCost

Koszt przewozu 1 jednostki ładunku na odległość 1 kilometra tym pojazdem. Można go używać jako wskaźnika zużycia paliwa: jeśli obciążenie jest wagą (w niutonach), to obciążenie*kilometr ma wymiar energii.

Eksperymentalne: więcej informacji znajdziesz na stronie https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request.

cost_per_traveled_hour

LoadCost

Koszt podróży z jednostką ładunku przez godzinę w przypadku tego pojazdu.

Eksperymentalne: więcej informacji znajdziesz na stronie https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request.

Interwał

Przedział dopuszczalnych kwot doładowania.

Pola
min

int64

Minimalne dopuszczalne obciążenie. Musi być ≥ 0. Jeśli podano obie wartości, min musi być mniejsze lub równe max.

max

int64

Maksymalne dopuszczalne obciążenie. Musi być ≥ 0. Jeśli nie zostanie określone, maksymalne obciążenie nie będzie ograniczone przez tę wiadomość. Jeśli podano obie wartości, min musi być mniejsze lub równe max.

LoadCost

Koszt przeniesienia 1 jednostki ładunku w ciągu Transition. W przypadku danego obciążenia koszt jest sumą 2 części:

  • min(load, load_threshold) * cost_per_unit_below_threshold
  • max(0, load - load_threshold) * cost_per_unit_above_threshold

Przy tym koszcie rozwiązania wolą najpierw dostarczać duże zapotrzebowanie lub, co jest równoważne, odbierać duże zapotrzebowanie na końcu. Jeśli na przykład pojazd ma

load_limit {
  key: "weight"
  value {
    cost_per_kilometer {
      load_threshold: 15
      cost_per_unit_below_threshold: 2.0
      cost_per_unit_above_threshold: 10.0
    }
  }
}

a jej trasa to start,odbiór,odbiór,dostawa,dostawa,koniec z przejściami:

transition { vehicle_load['weight'] { amount: 0 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 20 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travel_distance_meters: 1000.0 }

to koszt poniesiony przez ten pojazd LoadCost wynosi (cost_below * load_below * kilometry + cost_above * load_above * kilometry)

  • przejście 0: 0.0
  • przejście 1: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
  • przejście 2: 2,0 * 15 * 1,0 + 10,0 * (20 – 15) * 1,0 = 80,0
  • przejście 3: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
  • przejście 4: 0.0

Wartość LoadCost na trasie wynosi więc 120,0.

Jeśli jednak trasa to początek, odbiór, dostawa, odbiór, dostawa, koniec z przejściami:

transition { vehicle_load['weight'] { amount: 0 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
             travel_distance_meters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
             travel_distance_meters: 1000.0 }

to koszt poniesiony przez ten LoadCost wynosi

  • przejście 0: 0.0
  • przejście 1: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
  • przejście 2: 0.0
  • przejście 3: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
  • przejście 4: 0.0

W tym przypadku wartość LoadCost na trasie wynosi 40,0.

LoadCost sprawia, że rozwiązania z dużą liczbą przejść są droższe.

Eksperymentalne: więcej informacji znajdziesz na stronie https://developers.google.com/maps/tt/route-optimization/experimental/load-cost/make-request.

Pola
load_threshold

int64

Ilość ładunku, powyżej której koszt przeniesienia jednostki ładunku zmienia się z cost_per_unit_below_threshold na cost_per_unit_above_threshold. Musi być większa lub równa 0.

cost_per_unit_below_threshold

double

Koszt przeniesienia jednostki ładunku dla każdej jednostki między 0 a progiem. Musi być wartością skończoną i większą lub równą 0.

cost_per_unit_above_threshold

double

Koszt przeniesienia jednostki ładunku dla każdej jednostki powyżej progu. W szczególnym przypadku, gdy próg = 0, jest to stały koszt jednostkowy. Musi być wartością skończoną i większą lub równą 0.

TravelMode

Środki transportu, z których mogą korzystać pojazdy.

Powinien to być podzbiór środków transportu dostępnych w interfejsie Routes API Google Maps Platform. Więcej informacji znajdziesz na stronie https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode.

Uwaga: trasy WALKING są w wersji beta i czasami mogą nie uwzględniać chodników lub ścieżek dla pieszych. Musisz wyświetlać to ostrzeżenie użytkownikowi w przypadku wszystkich tras pieszych, które wyświetlasz w aplikacji.

Wartości w polu enum
TRAVEL_MODE_UNSPECIFIED Nieokreślony środek transportu, odpowiednik DRIVING.
DRIVING Tryb podróży odpowiadający wskazówkom dojazdu (samochód, ...).
WALKING Tryb podróży odpowiadający trasie pieszej.

UnloadingPolicy

Zasada dotycząca sposobu rozładunku pojazdu. Dotyczy tylko przesyłek, które mają zarówno odbiór, jak i dostawę.

Inne przesyłki mogą być dostarczane w dowolnym miejscu na trasie niezależnie od przesyłki unloading_policy.

Wartości w polu enum
UNLOADING_POLICY_UNSPECIFIED Nieokreślona zasada rozładunku; dostawy muszą nastąpić po odpowiednich odbiorach.
LAST_IN_FIRST_OUT Dostawy muszą być realizowane w odwrotnej kolejności niż odbiory
FIRST_IN_FIRST_OUT Dostawy muszą odbywać się w tej samej kolejności co odbiory

VehicleFullness

VehicleFullness to dane, które obliczają, jak pełny jest pojazd. Każde pole VehicleFullness ma wartość od 0 do 1, obliczaną jako stosunek pola danych z limitem (np. AggregatedMetrics.travel_distance_meters) do powiązanego limitu pojazdu (np. Vehicle.route_distance_limit), jeśli istnieje. W przeciwnym razie współczynnik zapełnienia pozostanie nieustawiony. Jeśli limit wynosi 0, pole jest ustawione na 1. Uwaga: gdy trasa jest niemożliwa do zrealizowania ze względu na natężenie ruchu, niektóre surowe współczynniki zapełnienia mogą przekraczać 1,0, np. pojazd może przekroczyć limit odległości. W takich przypadkach ograniczamy wartości zapełnienia do 1, 0.

Pola
max_fullness

double

Maksymalna wartość wszystkich pozostałych pól w tej wiadomości.

distance

double

Stosunek między AggregatedMetrics.travel_distance_meters a Vehicle.route_distance_limit. Jeśli pole Vehicle.route_distance_limit nie jest ustawione, to pole nie będzie ustawione.

travel_duration

double

Stosunek [AggregatedMetrics.travel_duration_seconds][] do Vehicle.travel_duration_limit. Jeśli pole Vehicle.travel_duration_limit nie jest ustawione, to pole nie będzie ustawione.

active_duration

double

Stosunek [AggregatedMetrics.total_duration_seconds][] do Vehicle.route_duration_limit. Jeśli pole Vehicle.route_duration_limit nie jest ustawione, to pole nie będzie ustawione.

max_load

double

Maksymalny współczynnik spośród wszystkich typów [AggregatedMetrics.max_load][] i odpowiadających im Vehicle.load_limits. Jeśli wszystkie pola Vehicle.load_limits nie są ustawione, to pole nie będzie ustawione.

active_span

double

Stosunek (vehicle_end_time - vehicle_start_time) / (latest_vehicle_end_time - earliest_vehicle_start_time) dla danego pojazdu. Jeśli nie ma mianownika, używana jest wartość (ShipmentModel.global_end_time – ShipmentModel.global_start_time).

Punkt pośredni

Hermetyzuje punkt pośredni. Punkty pośrednie oznaczają lokalizacje przyjazdu i odjazdu w przypadku żądań wizyty oraz lokalizacje początkowe i końcowe pojazdów.

Pola
side_of_road

bool

Opcjonalnie: Wskazuje, że lokalizacja tego punktu na trasie ma preferować zatrzymanie pojazdu po określonej stronie drogi. Gdy ustawisz tę wartość, trasa będzie przebiegać przez lokalizację, dzięki czemu pojazd będzie mógł zatrzymać się po tej stronie drogi, po której znajduje się lokalizacja. Ta opcja nie działa w przypadku trybu podróży „WALKING”.

vehicle_stopover

bool

Wskazuje, że punkt na trasie jest przeznaczony dla pojazdów, które mają się zatrzymać, aby odebrać lub wysadzić pasażera. Ta opcja działa tylko w trybie podróży „SAMOCHODEM” i gdy „location_type” to „location”.

Eksperymentalne: działanie lub istnienie tego pola może się zmienić w przyszłości.

Pole zbiorcze location_type. Różne sposoby przedstawiania lokalizacji. location_type może mieć tylko jedną z tych wartości:
location

Location

Punkt określony za pomocą współrzędnych geograficznych, w tym opcjonalnego nagłówka.

place_id

string

Identyfikator miejsca POI powiązany z punktem na trasie.

Jeśli używasz identyfikatora miejsca do określenia lokalizacji przyjazdu lub wyjazdu w obiekcie VisitRequest, użyj identyfikatora miejsca, który jest wystarczająco szczegółowy, aby określić lokalizację LatLng na potrzeby nawigacji do tego miejsca. Na przykład identyfikator miejsca reprezentujący budynek jest odpowiedni, ale identyfikator miejsca reprezentujący drogę nie jest zalecany.