Package google.maps.routeoptimization.v1

Indeks

RouteOptimization

Usługa optymalizacji trasy pojazdu.

Ważność niektórych typów pól:

  • google.protobuf.Timestamp
    • Czas jest podany w czasie uniksowym: sekundy od 1970-01-01T00:00:00+00:00.
    • sekundy musi zawierać się w przedziale [0, 253402300799], czyli w przedziale [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00].
    • nanos musi być nieustawiony lub ustawiony na 0.
  • google.protobuf.Duration
    • sekundy musi mieścić się w przedziale [0, 253402300799], czyli w przedziale [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00].
    • nanos musi być ustawiony na wartość nieokreślona lub 0.
  • google.type.LatLng
    • Szerokość geograficzna musi mieścić się w zakresie [-90,0, 90,0].
    • Długość geograficzna musi mieścić się w przedziale [-180,0, 180,0].
    • co najmniej jedna z szerokości i długości geograficznej musi być różna od 0;
BatchOptimizeTours

rpc BatchOptimizeTours(BatchOptimizeToursRequest) returns (Operation)

Optymalizuje wycieczki po pojeździe w przypadku co najmniej 1 wiadomości OptimizeToursRequest w partii.

Ta metoda jest długotrwałą operacją (LRO). Dane wejściowe służące do optymalizacji (wiadomości OptimizeToursRequest) i dane wyjściowe (wiadomości OptimizeToursResponse) są odczytywane i zapisywane w Cloud Storage w określonym przez użytkownika formacie. Podobnie jak metoda OptimizeTours, każdy element OptimizeToursRequest zawiera element ShipmentModel i zwraca element OptimizeToursResponse zawierający pola ShipmentRoute, czyli zestaw tras, które mają być wykonane przez pojazdy w celu zminimalizowania łącznych kosztów.

Użytkownik może wysłać zapytanie operations.get, aby sprawdzić stan LRO:

Jeśli pole LRO done ma wartość false, co najmniej 1 żądanie jest nadal przetwarzane. Inne żądania mogą być już przetworzone, a ich wyniki są dostępne w Cloud Storage.

Jeśli pole done w LRO zawiera wartość true, oznacza to, że wszystkie żądania zostały przetworzone. Wyniki wszystkich przetworzonych żądań będą dostępne w Cloud Storage. Wyniki żądań, które zakończyły się niepowodzeniem, nie będą dostępne w Cloud Storage. Jeśli pole error w LRO jest ustawione, zawiera ono 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ń IAM do zasobu parent:

  • routeoptimization.operations.create

Więcej informacji znajdziesz w dokumentacji dotyczącej 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ą być wykonane przez pojazdy w taki sposób, aby zminimalizować łączny koszt.

Model ShipmentModel składa się głównie z Shipment, które muszą być wykonywane, oraz z Vehicle, które mogą być używane do transportu Shipment. ShipmentRoute przypisuje Shipment do Vehicle. W szczególności przypisują do każdego pojazdu serię Visit, gdzie Visit odpowiada VisitRequest, czyli odbiór lub dostawę dla Shipment.

Celem jest przypisanie ShipmentRoute do Vehicle, które minimalizuje łączny koszt, gdzie 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ń IAM do zasobu parent:

  • routeoptimization.locations.use

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

AggregatedMetrics

Dane zbiorcze dotyczące ShipmentRoute (odpowiednio OptimizeToursResponse dla wszystkich elementów Transition lub Visit (odpowiednio dla wszystkich elementów ShipmentRoute).

Pola
performed_shipment_count

int32

Liczba zrealizowanych przesyłek. Pamiętaj, że para „odbiór” i „dostawa” jest liczona tylko raz.

travel_duration

Duration

Łączny czas podróży na danej trasie lub w ramach danego rozwiązania.

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 przerwy na trasie lub w rozwiązaniu.

visit_duration

Duration

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

total_duration

Duration

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

[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

Całkowita odległość do przebycia na trasie lub w ramach rozwiązania.

max_loads

map<string, VehicleLoad>

Maksymalne obciążenie osiągnięte na całej trasie (odpowiednio: w rozwiązaniu) dla każdej ilości na tej trasie (odpowiednio: w rozwiązaniu) obliczone jako maksimum wszystkich Transition.vehicle_loads (odpowiednio: ShipmentRoute.metrics.max_loads.

BatchOptimizeToursMetadata

Ten typ nie ma pól.

Metadane operacji dla wywołań BatchOptimizeToursRequest.

BatchOptimizeToursRequest

Przesyłanie żądania zbiorczej optymalizacji tras jako operacji asynchronicznej. Każdy plik wejściowy powinien zawierać 1 plik OptimizeToursRequest, a każdy plik wyjściowy – 1 plik OptimizeToursResponse. Żądanie zawiera informacje potrzebne do odczytania, zapisania i przeanalizowania plików. Wszystkie pliki wejściowe i wyjściowe powinny znajdować się w tym samym projekcie.

Pola
parent

string

Wymagane. Wybierz projekt i lokalizację, aby wykonać połączenie.

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

Jeśli nie określisz lokalizacji, region zostanie wybrany automatycznie.

model_configs[]

AsyncModelConfig

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

AsyncModelConfig

Informacje potrzebne do asynchronicznego rozwiązywania jednego modelu optymalizacji.

Pola
display_name

string

Opcjonalnie: Nazwa modelu zdefiniowana przez użytkownika, która może być używana jako alias do śledzenia modeli.

input_config

InputConfig

Wymagane. Informacje o modelu wejściowym.

output_config

OutputConfig

Wymagane. Informacje o chcianej lokalizacji wyjściowej.

BatchOptimizeToursResponse

Ten typ nie ma pól.

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

BreakRule

Reguły generowania przerw czasowych dla pojazdu (np. przerwa na lunch). Przerwa to ciągły okres czasu, w którym pojazd pozostaje w swojej bieżącej pozycji i nie może wykonywać żadnych wizyt. Przerwa może wystąpić:

  • podczas przemieszczania się między 2 wizytami (co obejmuje czas bezpośrednio przed wizytą lub bezpośrednio po niej, ale nie w jej trakcie), w którym przypadku wydłuża się czas przemieszczania się między wizytami,
  • lub przed uruchomieniem pojazdu (samochód nie może się uruchomić w trakcie przerwy), w którym to przypadku nie wpływa na czas uruchomienia pojazdu.
  • lub po zakończeniu korzystania z pojazdu (w tym przypadku również podaj godzinę zakończenia korzystania z pojazdu).
Pola
break_requests[]

BreakRequest

Sekwencja przerw. Zobacz wiadomość BreakRequest.

frequency_constraints[]

FrequencyConstraint

Mogą obowiązywać różne FrequencyConstraint. Wszystkie te warunki muszą być spełnione w ciągu BreakRequest tego BreakRule. Zobacz FrequencyConstraint.

BreakRequest

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

Pola
earliest_start_time

Timestamp

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

latest_start_time

Timestamp

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

min_duration

Duration

Wymagane. Minimalny czas trwania przerwy. Musi być dodatni.

FrequencyConstraint

Można też dodatkowo ograniczyć częstotliwość i czas trwania przerw określonych powyżej, narzucając minimalną częstotliwość przerwy, np. „Co 12 godzin musi być przerwa trwająca co najmniej 1 godzinę”. Zakładając, że można to interpretować jako „W dowolnym przesuwającym się oknie czasowym o długości 12 godzin musi być co najmniej 1 przerwa trwająca co najmniej 1 godzinę”, przykład ten przetłumaczylibyśmy w ten sposób: FrequencyConstraint:

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

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

FrequencyConstraint może w praktyce dotyczyć przerw nieciągłych. Na przykład poniższy harmonogram uwzględnia przykład „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 przedział czasu na trasie, który nie obejmuje co najmniej częściowej przerwy duration >= min_break_duration. Musi być dodatni.

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ć UNSPECIFIED.
JSON JavaScript Object Notation.
PROTO_TEXT Format tekstowy buforów protokołu. 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 zdefiniowany jest miękki limit, wartości soft_max_meters i cost_per_kilometer_above_soft_max muszą być zdefiniowane i nieujemne.

Pola
max_meters

int64

twardy limit ograniczający odległość do maksymalnie max_metrów. Limit nie może być liczbą ujemną.

soft_max_meters

int64

miękki limit, który nie narzuca maksymalnego limitu odległości, ale w przypadku jego naruszenia powoduje koszt, który jest dodawany do innych kosztów zdefiniowanych w modelu, z tą samą jednostką.

Jeśli parametr soft_max_meters jest zdefiniowany, musi być mniejszy niż max_meters i nie może być liczbą ujemną.

cost_per_kilometer_below_soft_max

double

Koszty na kilometr, które mogą wzrosnąć do soft_max_meters, według formuły:

  min(distance_meters, soft_max_meters) / 1000.0 *
  cost_per_kilometer_below_soft_max.

Te koszty nie są obsługiwane w route_distance_limit.

cost_per_kilometer_above_soft_max

double

Koszt za kilometr, jeśli odległość przekracza limit soft_max_meters. Jeśli odległość jest mniejsza od limitu, dodatkowy koszt wynosi 0. W przeciwnym razie koszt jest obliczany według tego wzoru:

  (distance_meters - soft_max_meters) / 1000.0 *
  cost_per_kilometer_above_soft_max.

Koszt musi być nieujemny.

GcsDestination

Lokalizacja w Google Cloud Storage, w której będą zapisywane pliki wyjściowe.

Pola
uri

string

Wymagane. Identyfikator URI obiektu w Google Cloud Storage.

GcsSource

Lokalizacja w Google Cloud Storage, z której będzie odczytywany 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 w jaki sposób.

Pola
routes[]

ShipmentRoute

Trasy, którymi roztwór ma być podawany. Niektóre trasy mogą zostać pominięte w początkowym rozwiązaniu. Trasy i przesyłki pominięte muszą spełniać podstawowe założenia oparte na 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. Zapoznaj się z polem routes.

constraint_relaxations[]

ConstraintRelaxation

W przypadku co najmniej 1 grupy pojazdów określa, kiedy i w jakim stopniu można 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 wartościach progowych i o ile zostaną złagodzone ograniczenia dotyczące wizyt. Przesyłki wymienione w polu skipped_shipment są przeznaczone do pominięcia, co oznacza, że nie można ich realizować.

Pola
relaxations[]

Relaxation

Wszystkie łagodniejsze ograniczenia dotyczące wizyt, które będą obowiązywać w przypadku wizyt na trasach z pojazdami w vehicle_indices.

vehicle_indices[]

int32

Określa indeksy pojazdów, do których ma zastosowanie ograniczenie wizyt relaxations. Jeśli pole jest puste, jest ono uważane za domyślne, a relaxations dotyczy wszystkich pojazdów, które nie są określone w innych constraint_relaxations. Może być maksymalnie 1 wartość domyślna, czyli maksymalnie 1 pole z opcją zniesienia ograniczenia może być puste vehicle_indices. Indeks pojazdu może być wymieniony tylko raz, nawet w kilku 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 relaxations jest pusty, czas rozpoczęcia i kolejność wszystkich wizyt na routes są całkowicie ograniczone, a do tych tras nie można dodawać nowych wizyt. Czas rozpoczęcia i zakończenia w elementach routes jest też całkowicie ograniczony, chyba że pojazd jest pusty (czyli nie ma żadnych wizyt i w modelu element used_if_route_is_empty ma wartość false).

relaxations(i).level określa poziom zniesienia 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, uruchomienie pojazdu jest łagodzone do relaxations(i).level, jeśli spełnia te kryteria:

  • vehicle_start_time >= relaxations(i).threshold_time ORAZ
  • relaxations(i).threshold_visit_count == 0, a na końcu pojazdu relaxations(i).level, jeśli spełnia te wymagania:
  • vehicle_end_time >= relaxations(i).threshold_time ORAZ
  • route.visits_size() + 1 >= relaxations(i).threshold_visit_count

Aby zastosować poziom zrelaksowania, jeśli wizyta spełnia kryterium threshold_visit_count LUB threshold_time, dodaj 2 elementy relaxations z tym samym elementem level: jeden z ustawionym tylko parametrem threshold_visit_count, a drugi tylko parametrem threshold_time. Jeśli wizyta spełnia warunki wielu relaxations, stosuje się najbardziej liberalny poziom. W efekcie od początku do końca przejazdu poziom relaksacji staje się coraz niższy: innymi słowy, nie maleje w miarę upływu czasu.

Czas i kolejność wizyt w trasach, które nie spełniają warunków progowych dotyczących żadnego relaxations, są całkowicie ograniczone i nie można w tych sekwencjach wstawiać żadnych wizyt. Jeśli początek lub koniec okresu użytkowania pojazdu nie spełnia warunków żadnego poluzowania, czas jest stały, chyba że pojazd jest pusty.

Pola
level

Level

Poziom zniesienia ograniczenia, który ma zastosowanie, gdy warunki na poziomie threshold_time LUB PO threshold_time są spełnione.threshold_visit_count

threshold_time

Timestamp

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

threshold_visit_count

int32

Liczba wizyt, po których można zastosować level. Jeśli wartość threshold_visit_count to 0 (lub nie jest określona), wartość level może zostać zastosowana bezpośrednio po uruchomieniu pojazdu.

Jeśli jest to route.visits_size() + 1, level może być stosowany tylko w przypadku pojazdu. Jeśli jest większa niż route.visits_size() + 1, level nie jest w ogóle stosowana na tej trasie.

Poziom

Określa różne poziomy zniesienia ograniczeń, które są stosowane w przypadku wizyty i tych, które następują po spełnieniu warunków progowych.

Wyliczenie poniżej jest uporządkowane według rosnącego stopnia relaksacji.

Wartości w polu enum
LEVEL_UNSPECIFIED

Domyślny dopuszczalny poziom zawężenia: nie ma żadnych zawężeń, co oznacza, że wszystkie wizyty są w pełni ograniczone.

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

RELAX_VISIT_TIMES_AFTER_THRESHOLD Czasy rozpoczęcia i zakończenia wizyty oraz czasy rozpoczęcia i zakończenia jazdy pojazdem zostaną złagodzone, ale każda wizyta będzie nadal powiązana z tym samym pojazdem i musi być zachowana kolejność wizyt: nie można wstawiać wizyt między sobą ani przed nimi.
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD To samo co RELAX_VISIT_TIMES_AFTER_THRESHOLD, ale z mniej restrykcyjną sekwencją wizyt: wizyty mogą być wykonywane tylko przez ten pojazd, ale mogą też zostać anulowane.
RELAX_ALL_AFTER_THRESHOLD To samo co RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD, ale pojazd jest też zrelaksowany: wizyty są całkowicie bezpłatne w czasie progowym lub po nim i potencjalnie mogą zostać anulowane.

InputConfig

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

Pola
data_format

DataFormat

Wymagane. Format danych wejściowych.

Pole unii source. Wymagane. source może być tylko jednym z tych elementów:
gcs_source

GcsSource

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

Lokalizacja

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

Pola
lat_lng

LatLng

Współrzędne geograficzne punktu drogi.

heading

int32

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

OptimizeToursRequest

Prośba o przekazanie danych do rozwiązywania problemu optymalizacji trasy, który definiuje model dostawy do rozwiązania, a także parametry optymalizacji.

Pola
parent

string

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

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

Jeśli nie określisz lokalizacji, region zostanie wybrany automatycznie.

timeout

Duration

Jeśli ten czas oczekiwania jest ustawiony, serwer zwraca odpowiedź, zanim upłynie czas oczekiwania lub termin serwera dla żądań synchronicznych, w zależności od tego, co nastąpi wcześniej.

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

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

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

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

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

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

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

injected_solution_constraint

InjectedSolutionConstraint

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

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

refresh_details_routes[]

ShipmentRoute

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

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

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

Nie można używać tego pola razem z polem injected_first_solution_routes ani injected_solution_constraint.

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

interpret_injected_solutions_using_labels

bool

Jeśli wartość to prawda:

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

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

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

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

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

consider_road_traffic

bool

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

populate_polylines

bool

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

populate_transition_polylines

bool

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

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 w przypadku długotrwałych żądań występuje znacznie większe (choć nadal niewielkie) ryzyko przerwania.

use_geodesic_distances

bool

Jeśli to ustawienie ma wartość true, odległości przebycia zostaną obliczone na podstawie odległości geodezyjnych zamiast odległości w Mapach Google, a czasy przejazdu zostaną obliczone na podstawie odległości geodezyjnych przy prędkości określonej przez parametr geodesic_meters_per_second.

label

string

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

geodesic_meters_per_second

double

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

max_validation_errors

int32

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

SearchMode

Tryb definiujący zachowanie wyszukiwania, który umożliwia zrównoważenie opóźnienia i jakości rozwiązania. W przypadku wszystkich trybów obowiązuje globalny termin składania żądań.

Wartości w polu enum
SEARCH_MODE_UNSPECIFIED Tryb wyszukiwania nieokreślony, równoważny z RETURN_FAST.
RETURN_FAST Zatrzymaj wyszukiwanie po znalezieniu pierwszego odpowiedniego rozwiązania.
CONSUME_ALL_AVAILABLE_TIME Poświęć cały dostępny czas na poszukiwanie lepszych rozwiązań.

SolvingMode

Określa, jak rozwiązanie ma obsłużyć żądanie. W wszystkich trybach oprócz VALIDATE_ONLY, jeśli żądanie jest nieprawidłowe, otrzymasz błąd INVALID_REQUEST. Aby ograniczyć liczbę zwracanych błędów, zobacz max_validation_errors.

Wartości w polu enum
DEFAULT_SOLVE Rozwiąż model. Ostrzeżenia mogą być wydawane w ramach [OptimizeToursResponse.validation_errors][google.cloud.optimization.v1.OptimizeToursResponse.validation_errors].
VALIDATE_ONLY Weryfikuje tylko model bez rozwiązywania: wypełnia jak najwięcej OptimizeToursResponse.validation_errors.
DETECT_SOME_INFEASIBLE_SHIPMENTS

Wypełnia tylko pola OptimizeToursResponse.validation_errors lub OptimizeToursResponse.skipped_shipments, a nie rozwiązuje reszty żądania (w odpowiedzi nie są ustawione pola status ani routes). Jeśli wykryto nierealne trasy injected_solution_constraint, są one wypełniane w polu OptimizeToursResponse.validation_errors, a pole OptimizeToursResponse.skipped_shipments pozostaje puste.

WAŻNE: zwracane są tylko te przesyłki, które zostały wykryte jako niemożliwe do zrealizowania podczas wstępnego przetwarzania.

OptimizeToursResponse

Odpowiedź po rozwiązaniu problemu optymalizacji trasy zawierająca trasy przebyte przez każdy pojazd, przesyłki, które zostały pominięte, oraz łączny koszt rozwiązania.

Pola
routes[]

ShipmentRoute

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

request_label

string

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

skipped_shipments[]

SkippedShipment

Lista wszystkich pominiętych przesyłek.

validation_errors[]

OptimizeToursValidationError

Lista wszystkich błędów weryfikacji, które udało nam się wykryć. Więcej informacji o komunikacie OptimizeToursValidationError znajdziesz w sekcji „WIELE BŁĘDÓW”. W przypadku wartości solving_mode DEFAULT_SOLVE zamiast błędów będą wyświetlane ostrzeżenia.

metrics

Metrics

Dane o czasie trwania, odległości i użytkowaniu tego rozwiązania.

Dane

Ogólne dane, zagregowane na podstawie wszystkich tras.

Pola
aggregated_route_metrics

AggregatedMetrics

Dane zbiorcze dotyczące tras. Każde dane to suma (lub wartość maksymalna w przypadku obciążeń) we wszystkich polach ShipmentRoute.metrics o tej samej nazwie.

skipped_mandatory_shipment_count

int32

Liczba pominiętych przesyłek obowiązkowych.

used_vehicle_count

int32

Liczba używanych pojazdów. Uwaga: jeśli trasa pojazdu jest pusta, a wartość atrybutu Vehicle.used_if_route_is_empty to Prawda, pojazd jest uważany za używany.

earliest_vehicle_start_time

Timestamp

Najwcześniejszy czas rozpoczęcia używania pojazdu, obliczony jako minimalny 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 maksymalny dla wszystkich używanych pojazdów ShipmentRoute.vehicle_end_time.

costs

map<string, double>

Koszt rozwiązania z podziałem według pól żądania związanych z kosztami. Klucze to ścieżki proto, odnoszące się do wejścia OptimizeToursRequest, np. „model.shipments.pickups.cost”, a wartości to łączny koszt wygenerowany przez odpowiednie pole kosztu, zsumowany w całym rozwiązaniu. Inaczej mówiąc, costs[„model.shipments.pickups.cost”] to suma wszystkich kosztów odbioru w ramach rozwiązania. Wszystkie koszty zdefiniowane w modelu są tutaj szczegółowo raportowane, z wyjątkiem kosztów związanych z atributem TransitionAttributes, które od 1 stycznia 2022 r. są raportowane tylko w sposób zagregowany.

total_cost

double

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

OptimizeToursValidationError

Opisuje błąd lub ostrzeżenie występujące podczas sprawdzania OptimizeToursRequest.

Pola
code

int32

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

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

WIELE BŁĘDÓW: gdy występuje wiele błędów, proces weryfikacji próbuje wygenerować kilka z nich. Podobnie jak w przypadku kompilatorów, 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ć pominięcie innych błędów podczas procesu weryfikacji.

STABILNOŚĆ: codedisplay_name powinny być bardzo stabilne. Z czasem mogą jednak pojawić się nowe kody i nazwy wyświetlania, co może spowodować, że dana (nieprawidłowa) prośba zwróci inną parę (code, display_name), ponieważ nowy błąd zastąpi stary. Przykład: „WIELE BŁĘDÓW”.

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 pierwszy odbiór pojazdu 4 w ramach dostawy 2 można wykonać w ten sposób:

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

Pamiętaj jednak, że liczba elementów 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. Wartości codeerror_message są ze sobą powiązane 1:1 (gdy kod nie jest równy „UNSPECIFIED”).

STAŁOŚĆ: niestabilna: komunikat o błędzie powiązany z danym code może z czasem ulec zmianie (miejmy nadzieję, że na lepsze). Zamiast tego użyj zasad display_namecode.

offending_values

string

Może zawierać wartości pól. Ta opcja nie jest zawsze dostępna. Nie należy się na niego w żaden sposób opierać. Należy go używać tylko do ręcznego debugowania modelu.

FieldReference

Określa kontekst błędu weryfikacji. FieldReference zawsze odnosi się do określonego pola w tym pliku i podąża za tą samą strukturą hierarchiczną. Możemy na przykład określić element 2 w elementach start_time_windows pojazdu 5 za pomocą:

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

Jednak pomijamy elementy najwyższego poziomu, takie jak OptimizeToursRequest lub ShipmentModel, aby nie zaśmiecać wiadomości.

Pola
name

string

Nazwa pola, np. „vehicles”.

sub_field

FieldReference

W razie potrzeby rekurencyjnie zagnieżdżone podpole.

Pole unii index_or_key.

index_or_key może być tylko jednym z tych elementów:

index

int32

Indeks pola, jeśli jest powtarzany.

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 unii destination. Wymagane. destination może być tylko jednym z tych elementów:
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 API Preferowane trasy na platformie Mapy Google (https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers).

Pola
avoid_tolls

bool

Określa, czy w uzasadnionych przypadkach należy unikać dróg płatnych. Preferowane będą trasy nieobejmujące dróg płatnych. Dotyczy to tylko pojazdów mechanicznych.

avoid_highways

bool

Określa, czy w uzasadnionych przypadkach ma być unikana jazda autostradami. Preferowane będą trasy nieobejmujące autostrad. Dotyczy to tylko pojazdów mechanicznych.

avoid_ferries

bool

Określa, czy w uzasadnionych przypadkach ma być unikana przeprawa promowa. Preferowane będą trasy nieobejmujące przejazdów promem. Dotyczy to tylko pojazdów mechanicznych.

avoid_indoor

bool

Opcjonalnie: Określa, czy w uzasadnionych przypadkach ma być unikana nawigacja wewnątrz budynków. Preferowane będą trasy nieobejmujące nawigacji wewnątrz budynków. Dotyczy tylko trybu podróży WALKING.

Wysyłka

Przesyłka pojedynczego produktu, od momentu jego odebrania do momentu dostarczenia. Aby przesyłka została uznana za zrealizowaną, pojazd musi odwiedzić jedną z lokalizacji odbioru (i odpowiednio zmniejszyć ilość wolnych miejsc), a następnie odwiedzić jedną z lokalizacji dostawy (i odpowiednio zwiększyć ilość wolnych miejsc).

Pola
display_name

string

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

pickups[]

VisitRequest

Zestaw alternatyw odbioru powiązanych z przesyłką. Jeśli nie określono inaczej, pojazd musi tylko odwiedzić lokalizację odpowiadającą dostawom.

deliveries[]

VisitRequest

Zestaw alternatyw dostawy powiązanych z przesyłką. Jeśli nie wskażesz lokalizacji, pojazd musi tylko odwiedzić lokalizację odpowiadającą odbiorowi.

load_demands

map<string, Load>

wymagania dotyczące ładunku (np. waga, objętość, liczba palet itp.); Klucze w mapie powinny być identyfikatorami, które opisują typ odpowiadającego im obciążenia. W idealnej sytuacji powinny też zawierać jednostki. Na przykład: „weight_kg”, „volume_gallons”, „pallet_count” itp. Jeśli dany klucz nie pojawia się na mapie, odpowiadający mu ładunek jest uważany za pusty.

allowed_vehicle_indices[]

int32

Zestaw pojazdów, które mogą wykonać tę dostawę. Jeśli pole jest puste, wszystkie pojazdy mogą je wykonać. Pojazdy są identyfikowane przez ich numer na liście ShipmentModel vehicles.

costs_per_vehicle[]

double

Określa koszt poniesiony podczas dostawy przesyłki przez dany pojazd. Jeśli jest podany, musi zawierać 1 z tych elementów:

  • zawierać taką samą liczbę elementów jak costs_per_vehicle_indices. costs_per_vehicle[i] odpowiada pojazdowi costs_per_vehicle_indices[i] w przypadku modelu.
  • taką samą liczbę elementów, jak pojazdów w modelu. I-ty element odpowiada pojazdowi o numerze i w danym modelu.

Te koszty muszą być wyrażone w tych samych jednostkach 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, do których ma zastosowanie costs_per_vehicle. Jeśli nie jest pusta, musi zawierać taką samą liczbę elementów jak costs_per_vehicle. Indeksu pojazdu nie można określić 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ą ścieżką od odbioru do dostawy. Jeśli jest podany, musi być dodatni, a przesyłka musi zawierać co najmniej odbiór i dostawę.

Niech na przykład t będzie najkrótszym czasem potrzebnym na dotarcie z wybranego miejsca odbioru bezpośrednio do wybranego miejsca dostawy. Ustawienie pickup_to_delivery_absolute_detour_limit powoduje:

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

Jeśli w przypadku jednej przesyłki są określone zarówno względne, jak i bezwzględne limity, w przypadku każdej możliwej pary odbioru/dostawy stosuje się bardziej restrykcyjny limit. Od października 2017 r. objazdy są obsługiwane tylko wtedy, gdy czas podróży nie zależy od pojazdu.

pickup_to_delivery_time_limit

Duration

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

shipment_type

string

Niepusty ciąg znaków określający „typ” przesyłki. Za pomocą tej funkcji można definiować niezgodności lub wymagania dotyczące shipment_types (patrz shipment_type_incompatibilities i shipment_type_requirements w ShipmentModel).

Różnica w porównaniu z visit_types, który jest określony dla pojedynczej wizyty: wszystkie odbiory i dostawy należące do tej samej przesyłki mają ten sam shipment_type.

label

string

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

ignore

bool

Jeśli wartość to prawda, pomiń tę dostawę, ale nie stosuj penalty_cost.

Ignorowanie dostawy powoduje błąd weryfikacji, jeśli w modelu występują jakiekolwiek shipment_type_requirements.

Ignorowanie dostawy realizowanej w ramach injected_first_solution_routes lub injected_solution_constraint jest dozwolone; Solver usuwa powiązane wizyty odbioru/dostawy z trasy. precedence_rules, które odwołują się do ignorowanych przesyłek, również zostaną zignorowane.

penalty_cost

double

Jeśli przesyłka nie zostanie dostarczona, ta kara zostanie dodana do łącznego kosztu tras. Przesyłka jest uważana za ukończoną, jeśli wybrano jedną z dostępnych opcji odbioru lub dostawy. Koszt może być wyrażony w tych samych jednostkach co wszystkie inne pola związane z kosztami w modelu i musi być dodatni.

WAŻNE: jeśli nie określisz tej kary, zostanie ona uznana za nieskończoną, co oznacza, że przesyłka musi zostać zrealizowana.

pickup_to_delivery_relative_detour_limit

double

Określa maksymalny czas objazdu w porównaniu z najkrótszą ścieżką od odbioru do dostawy. Jeśli jest podany, musi być dodatni, a przesyłka musi zawierać co najmniej odbiór i dostawę.

Niech na przykład t będzie najkrótszym czasem potrzebnym na dotarcie z wybranego miejsca odbioru bezpośrednio do wybranego miejsca dostawy. Ustawienie pickup_to_delivery_relative_detour_limit powoduje:

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

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

Wczytaj

Podczas wizyty w przypadku odbioru ładunku do pojazdu może zostać dodana zdefiniowana kwota, a w przypadku dostawy – odjęta. Ta wiadomość określa tę kwotę. Zobacz load_demands.

Pola
amount

int64

Wartość, o którą będzie się zmieniać ładunek pojazdu podczas danej wizyty. Ponieważ jest to liczba całkowita, zalecamy wybranie odpowiedniej jednostki, aby uniknąć utraty dokładności. Wartość musi być większa lub równa 0.

VisitRequest

Prośba o wizytę, którą można wykonać pojazdem: zawiera ona lokalizację geograficzną (lub dwie, patrz poniżej), godziny otwarcia i zamknięcia reprezentowane przez okna czasowe oraz czas trwania usługi (czas spędzony przez pojazd po przybyciu do miejsca odbioru lub dostarczenia towarów).

Pola
arrival_location

LatLng

Geolokalizacja miejsca, do którego dociera pojazd podczas wykonywania tej VisitRequest. Jeśli model dostawy zawiera macierze odległości czasowej, nie można podać parametru arrival_location.

arrival_waypoint

Waypoint

Punkt orientacyjny, w którym pojazd dociera podczas wykonywania tego VisitRequest. Jeśli model dostawy zawiera macierze odległości czasowej, nie można podać parametru arrival_waypoint.

departure_location

LatLng

Miejsce docelowe, do którego pojazd ma dojechać po zakończeniu tego VisitRequest. Można go pominąć, jeśli jest taki sam jak arrival_location. Jeśli model dostawy zawiera macierze odległości czasowej, nie można podać parametru departure_location.

departure_waypoint

Waypoint

Punkt orientacyjny, w którym pojazd wyrusza po zakończeniu tego VisitRequest. Można go pominąć, jeśli jest taki sam jak arrival_waypoint. Jeśli model dostawy zawiera macierze odległości czasowej, nie należy podawać parametru departure_waypoint.

tags[]

string

Określa tagi dołączone do żądania wizyty. Pustych lub powtarzających się ciągów znaków nie można stosować.

time_windows[]

TimeWindow

Okna czasowe, które ograniczają czas przybycia podczas wizyty. Pamiętaj, że pojazd może wyjechać poza oknem czasowym przyjazdu, czyli czas przyjazdu + czas trwania nie musi mieścić się w oknie czasowym. Może to spowodować oczekiwanie, jeśli pojazd dotrze przed TimeWindow.start_time.

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

Okna czasowe muszą być odseparowane, co oznacza, że żadne z nich nie może się pokrywać z innym ani być sąsiadować z innym. Okna czasowe muszą być uporządkowane według rosnącej kolejności.

Wartości cost_per_hour_after_soft_end_timesoft_end_time można ustawić tylko wtedy, gdy istnieje jedno okno czasowe.

duration

Duration

Czas trwania wizyty, czyli czas spędzony przez pojazd między przybyciem a odejściem (dodawany do możliwego czasu oczekiwania; patrz time_windows).

cost

double

Koszt realizacji tego żądania wizyty na trasie pojazdu. Można go używać do płacenia różnych kosztów za odbiór lub dostawę przesyłki. Koszt musi być wyrażony w tych samych jednostkach co Shipment.penalty_cost i nie może być ujemny.

load_demands

map<string, Load>

Wczytaj wymagania dotyczące tego żądania wizyty. To pole jest podobne do pola Shipment.load_demands, z tym że ma zastosowanie tylko do tego elementu VisitRequest, a nie do całego elementu Shipment. Wymagania wymienione tutaj są dodawane do wymagań wymienionych w Shipment.load_demands.

visit_types[]

string

Określa typy wizyt. Może ona służyć do przydzielenia dodatkowego czasu potrzebnego pojazdowi na wykonanie tej wizyty (patrz Vehicle.extra_visit_duration_for_visit_type).

Typ może wystąpić tylko raz.

label

string

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

ShipmentModel

Model dostawy zawiera zestaw dostaw, które muszą być realizowane przez zestaw pojazdów, przy jednoczesnym minimalizowaniu łącznego kosztu, który jest sumą:

  • kosztu wyznaczania trasy pojazdów (suma kosztu na godzinę, kosztu na czas przejazdu i kosztów stałych wszystkich pojazdów);
  • kary za niewywiązanie się z obowiązku dostawy.
  • koszt globalnego czasu trwania przesyłek;
Pola
shipments[]

Shipment

Zestaw dostaw, które muszą być wykonane w ramach modelu.

vehicles[]

Vehicle

Zestaw pojazdów, których można używać do wykonywania wizyt.

global_start_time

Timestamp

Globalny czas rozpoczęcia i zakończenia modelu: nie można uznać za prawidłowego żadnego czasu spoza tego zakresu.

Zakres czasowy modelu musi być krótszy niż rok, czyli global_end_timeglobal_start_time muszą być oddalone od siebie o nie więcej niż 31536 000 sekund.

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

global_end_time

Timestamp

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

global_duration_cost_per_hour

double

„Całkowity czas trwania” ogólnego planu to różnica między najwcześniejszym skutecznym czasem rozpoczęcia a najpóźniejszym skutecznym czasem zakończenia wszystkich pojazdów. Użytkownicy mogą przypisać do tej ilości koszt za godzinę, aby na przykład zoptymalizować zadanie pod kątem jak najszybszego ukończenia. Te koszty muszą być wyrażone w tych samych jednostkach 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, zamiast niego używane są odległości na mapach Google lub geodezyjne, w zależności od wartości pola use_geodesic_distances. Jeśli pole nie jest puste, use_geodesic_distances nie może być prawdą, a pole duration_distance_matrix_src_tags ani duration_distance_matrix_dst_tags nie może być puste.

Przykłady użycia:

  • Istnieją 2 lokalizacje: locA i locB.
  • 1 pojazd, który rozpoczyna trasę w miejscu locA i kończy w miejscu locA.
  • 1 prośba o odbiór w miejscu locB.
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
    }
  }
}
  • Istnieją 3 lokalizacje: locA, locB i locC.
  • 1 pojazd zaczynający trasę w miejscu locA i kończący ją w miejscu locB, korzystając z macierzy „szybka”.
  • 1 pojazd zaczynający swoją trasę w locB i kończący ją w locB, korzystając z matrycy „slow”.
  • 1 pojazd zaczynający trasę w miejscu locB i kończący ją w miejscu locB, korzystając z macierzy „fast”.
  • 1 prośba o odbiór w miejscu: locC.
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 określające źródła macierzy czasu trwania i odległości; duration_distance_matrices(i).rows(j) określa czas trwania i odległości od wizyt z tagiem duration_distance_matrix_src_tags(j) do innych wizyt w macierzy i.

Tagi odpowiadają elementom VisitRequest.tags lub Vehicle.start_tags. Podany identyfikator VisitRequest lub Vehicle musi odpowiadać dokładnie 1 tagowi w tym polu. Pamiętaj, że tagi źródła, miejsca docelowego i matriksu 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 określające miejsca docelowe macierzy czasu i odległości; duration_distance_matrices(i).rows(j).durations(k) (odpowiednio duration_distance_matrices(i).rows(j).meters(k)) określa czas trwania (odpowiednio odległość) podróży z wizytacji z tagiem duration_distance_matrix_src_tags(j) do wizytacji z tagiem duration_distance_matrix_dst_tags(k) w macierz i.

Tagi odpowiadają VisitRequest.tags lub Vehicle.start_tags. Podany identyfikator VisitRequest lub Vehicle musi odpowiadać dokładnie 1 tagowi w tym polu. Pamiętaj, że tagi źródła, miejsca docelowego i matriksu 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

Dodano do modelu atrybuty przejścia.

shipment_type_incompatibilities[]

ShipmentTypeIncompatibility

Zestawy niezgodnych typów dostawy (patrz ShipmentTypeIncompatibility).

shipment_type_requirements[]

ShipmentTypeRequirement

zestawy wymagań shipment_type (patrz ShipmentTypeRequirement).

precedence_rules[]

PrecedenceRule

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

max_active_vehicles

int32

Ogranicza maksymalną liczbę aktywnych pojazdów. Pojazd jest aktywny, jeśli jego trasa obejmuje co najmniej jedną dostawę. Można go użyć do ograniczenia liczby tras w przypadku, gdy kierowców jest mniej niż pojazdów, a flota pojazdów jest zróżnicowana. Następnie optymalizacja wybierze najlepszy podzbiór pojazdów do użycia. Musi być dodatni.

DurationDistanceMatrix

Określa czas trwania i macierz odległości od miejsc początkowych wizyt i pojazdu do miejsc końcowych wizyt i pojazdu.

Pola
rows[]

Row

Określa wiersze macierzy czasu trwania i odległości. Musi zawierać taką samą liczbę elementów jak ShipmentModel.duration_distance_matrix_src_tags.

vehicle_start_tag

string

Tag określający, do których pojazdów ma zastosowanie ta tablica czasu trwania i odległości. Jeśli jest pusty, ma zastosowanie do wszystkich pojazdów i może być tylko jedna matryca.

Każdy początek pojazdu musi odpowiadać dokładnie jednej macierzy, czyli dokładnie jedno z pol start_tags musi odpowiadać vehicle_start_tag macierzy (i tylko tej macierzy).

Wszystkie macierze muszą mieć inną wartość vehicle_start_tag.

Wiersz

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

Pola
durations[]

Duration

Wartości czasu trwania w danym wierszu. Musi zawierać taką samą liczbę elementów jak ShipmentModel.duration_distance_matrix_dst_tags.

meters[]

double

Wartości odległości w danym wierszu. Jeśli w modelu nie ma żadnych kosztów ani ograniczeń odnoszących się do odległości, można pozostawić to pole puste. W przeciwnym razie musi ono zawierać tyle elementów, co durations.

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 s po rozpoczęciu „pierwszego”.

Kilka priorytetów może dotyczyć 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 priorytety mają zastosowanie tylko wtedy, gdy obie przesyłki są realizowane, a w przeciwnym razie są 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

Odstęp między zdarzeniami „first” i „second”. Może być ujemna.

first_index

int32

Indeks dostawy „pierwszego” zdarzenia. To pole musi być określone.

second_index

int32

Indeks dostawy „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:

  • „dokładne zdarzenia”, takie jak początek i koniec jazdy oraz początek i koniec każdej wizyty (czyli przyjazd i wyjazd). Mają miejsce w danej sekundzie.
  • „przedziały czasowe”, np. same wizyty i przejście między wizytami. Chociaż czasami interwały czasowe mogą mieć zerową długość, czyli zaczynają się i kończą w tej samej sekundzie, często mają dodatnią długość.

Niezmienniki:

  • Jeśli jest n wizyt, to jest n + 1 przejście.
  • Wizyta jest zawsze otoczona przez przejście poprzedzające ją (ten sam indeks) i przejście następujące po niej (indeks + 1).
  • Po uruchomieniu pojazdu zawsze następuje przejście #0.
  • Koniec pojazdu jest zawsze poprzedzony przez przejście #n.

Oto, co się dzieje podczas TransitionVisit:

---+-------------------------------------+-----------------------------+-->
   |           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 opisujemy, jak można ustawić elementy TRAVEL, BREAKS, DELAY i WAIT podczas przejścia.

  • Nie nakładają się.
  • OPÓŹNIENIE jest unikalne i musi być ciągłym okresem czasu bezpośrednio przed następną wizytą (lub końcem okresu użytkowania pojazdu). Wystarczy więc znać czas opóźnienia, aby określić czas jego rozpoczęcia i zakończenia.
  • PRZERWY to ciągłe, niepokrywające się okresy czasu. Odpowiedź zawiera czas rozpoczęcia i czas trwania każdej przerwy.
  • TRAVEL i WAIT są „wymienne”: mogą być przerywane kilka razy podczas tego przejścia. Klienci mogą założyć, że podróż odbywa się „jak najszybciej”, a pozostały czas wypełnia „czekanie”.

Przykład (skomplikowany):

                               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 wykonujący trasę, zidentyfikowany przez swój indeks w źródle ShipmentModel.

vehicle_label

string

Etykieta pojazdu wykonującego tę trasę, równa ShipmentModel.vehicles(vehicle_index).label, jeśli została określona.

vehicle_start_time

Timestamp

Czas rozpoczęcia przez pojazd trasy.

vehicle_end_time

Timestamp

Czas, w którym 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 uważany za nieużywany.

transitions[]

Transition

Uporządkowana lista przejść na trasie.

has_traffic_infeasibilities

bool

Gdy OptimizeToursRequest.consider_road_traffic jest ustawione na wartość true, to pole wskazuje, że niezgodności w czasie trwania trasy są przewidywane na podstawie szacunków czasu przejazdu na podstawie natężenia ruchu. Może nie wystarczyć czasu na przebycie trasy z uwzględnieniem natężenia ruchu, opóźnień i przestojów między wizytami przed pierwszą wizytą lub po ostatniej, przy zachowaniu limitów czasu wizyty i czasu pracy pojazdu. Na przykład

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

Przybycie do next_visit nastąpi prawdopodobnie później niż w obecnym oknie czasowym z powodu wydłużenia szacowanego czasu podróży travel_duration(previous_visit, next_visit) z powodu korków. Przerwa może też nakładać się na wizytę z powodu wydłużenia szacowanego czasu podróży oraz ograniczeń dotyczących czasu wizyty lub przerwy.

route_polyline

EncodedPolyline

Zakodowana linia łamana reprezentująca trasę. To pole jest wypełniane tylko wtedy, gdy zasada OptimizeToursRequest.populate_polylines ma wartość Prawda.

breaks[]

Break

Przerwy zaplanowane dla pojazdu wykonują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

Dane dotyczące czasu trwania, odległości i obciążenia na tej trasie. Pola AggregatedMetrics są sumowane dla wszystkich elementów ShipmentRoute.transitions lub ShipmentRoute.visits, w zależności od kontekstu.

route_costs

map<string, double>

Koszt trasy z podziałem na pola żądania związane z kosztami. Klucze to ścieżki proto, odnoszące się do wejścia OptimizeToursRequest, np. „model.shipments.pickups.cost”, a wartości to łączny koszt wygenerowany przez odpowiednie pole kosztu, zsumowany na całej trasie. Innymi słowy, costs["model.shipments.pickups.cost"] to suma wszystkich kosztów odbioru na trasie. Wszystkie koszty zdefiniowane w modelu są tutaj szczegółowo raportowane, z wyjątkiem kosztów związanych z atributem TransitionAttributes, które od 1 stycznia 2022 r. są raportowane tylko w postaci zagregowanej.

route_total_cost

double

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

Przerwa

Dane przedstawiające wykonanie przerwy.

Pola
start_time

Timestamp

Czas rozpoczęcia przerwy.

duration

Duration

Czas trwania przerwy.

EncodedPolyline

Zakodowana reprezentacja linii złożonej. Więcej informacji o kodowaniu łańcucha znaków 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 wartości start_location ani end_location, odpowiednie dane dotyczące podróży mają wartość 0.

Pola
travel_duration

Duration

Czas trwania podróży podczas tej zmiany.

travel_distance_meters

double

Odległość przebyta podczas przejścia.

traffic_info_unavailable

bool

Gdy żądanie ruchu jest wysyłane za pomocą OptimizeToursRequest.consider_road_traffic, a nie udało się pobrać informacji o ruchu dla Transition, ta wartość logiczna jest ustawiana na Prawda. Może to być problem tymczasowy (rzadki problem na serwerach ruchu w czasie rzeczywistym) lub trwały (brak danych o tej lokalizacji).

delay_duration

Duration

Suma czasów opóźnienia zastosowanych do tego przejścia. Opóźnienie rozpoczyna się dokładnie delay_duration sekund przed następnym zdarzeniem (końcem wizyty lub pojazdu). Zobacz TransitionAttributes.delay.

break_duration

Duration

Suma czasu trwania przerw, które wystąpiły podczas tego przejścia (jeśli wystąpiły). Szczegóły dotyczące czasu rozpoczęcia i długości przerwy są przechowywane w pliku ShipmentRoute.breaks.

wait_duration

Duration

Czas oczekiwania podczas tego przejścia. Czas oczekiwania odpowiada czasowi bezczynności i nie obejmuje przerwy. Pamiętaj też, że 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 równe:

  • następna wizyta start_time (lub vehicle_end_time, jeśli jest to ostatnia zmiana) – start_time tej zmiany;
  • Jeśli ShipmentRoute.has_traffic_infeasibilities ma wartość fałsz, dodatkowo zachodzi zależność: `total_duration = travel_duration + delay_duration
  • break_duration + wait_duration`.
start_time

Timestamp

Czas rozpoczęcia tego przejścia.

route_polyline

EncodedPolyline

Zakodowana linia łamana reprezentująca trasę przebytą podczas przemieszczania. To pole jest wypełniane tylko wtedy, gdy zasada populate_transition_polylines ma wartość Prawda.

route_token

string

Tylko dane wyjściowe. Nieprzezroczysty token, który można przekazać do Navigation SDK w celu odtworzenia trasy podczas nawigacji. W przypadku zmiany trasy token ten zachowuje pierwotny zamiar podczas tworzenia trasy. Traktuj ten token jako nieprzejrzysty blok danych. Nie porównuj wartości w różnych żądaniach, ponieważ może się ona zmieniać, nawet jeśli usługa zwróci dokładnie tę samą trasę. To pole jest wypełniane tylko wtedy, gdy zasada populate_transition_polylines ma wartość Prawda.

vehicle_loads

map<string, VehicleLoad>

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

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

VehicleLoad

Raport o rzeczywistym obciążeniu pojazdu w określonym punkcie trasy dla danego typu (patrz Transition.vehicle_loads).

Pola
amount

int64

Ilość ładunku w danym pojeździe. Jednostka ładunku jest zwykle określana przez typ. Zobacz Transition.vehicle_loads.

Odwiedź

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

Pola
shipment_index

int32

Indeks pola shipments w źródle ShipmentModel.

is_pickup

bool

Jeśli wartość to 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. Czasy są zgodne z ShipmentModel.

load_demands

map<string, Load>

Łączna liczba wizyt, która jest sumą żądania dostawy i żądania wizyty load_demands. Jeśli wizyta to dostawa, wartości są ujemne. Zapotrzebowania są raportowane w przypadku tych samych typów co Transition.loads (patrz to pole).

detour

Duration

Dodatkowy czas objazdu spowodowany wizytami w miejscach na trasie przed wizytą oraz potencjalny czas oczekiwania spowodowany oknami czasowymi. Jeśli wizyta to dostawa, 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 odpowiedniej wartości Shipment.label, jeśli została ona określona w elementach Shipment.

visit_label

string

Kopia odpowiedniej wartości VisitRequest.label, jeśli została ona określona w elementach VisitRequest.

ShipmentTypeIncompatibility

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

Pola
types[]

string

Lista niezgodnych typów. 2 dostawy z różnymi wartościami shipment_types spośród wymienionych są „niezgodne”.

incompatibility_mode

IncompatibilityMode

Tryb zastosowany do niezgodności.

IncompatibilityMode

Tryby określające, jak ograniczać pojawianie się niezgodnych przesyłek na tej samej trasie.

Wartości w polu enum
INCOMPATIBILITY_MODE_UNSPECIFIED Nieokreślony tryb niezgodności. Ta wartość nigdy nie powinna być używana.
NOT_PERFORMED_BY_SAME_VEHICLE W tym trybie 2 przesyłki z niekompatybilnymi typami nigdy nie mogą korzystać z tego samego pojazdu.
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY

W przypadku dwóch przesyłek z niezgodnymi typami w trybie niezgodności NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY:

  • Jeśli obie usługi to tylko odbiór (bez dostawy) lub tylko dostawa (bez odbioru), nie mogą korzystać z tego samego pojazdu.
  • Jeśli jedna z przesyłek ma być dostarczona, a druga odebrana, mogą one być przewożone tym samym pojazdem, o ile pierwsza z nich zostanie dostarczona przed odebraniem drugiej.

ShipmentTypeRequirement

Określa wymagania dotyczące przesyłek na podstawie ich typu przesyłki. Szczegóły wymagań są definiowane przez tryb wymagań.

Pola
required_shipment_type_alternatives[]

string

Lista alternatywnych typów dostawy 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 ma być odwiedzona na tym samym szlaku.

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

requirement_mode

RequirementMode

Tryb zastosowany do wymagań.

RequirementMode

Tryby definiujące sposób wyświetlania przesyłek zależnych na trasie.

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

W trybie IN_SAME_VEHICLE_AT_PICKUP_TIME wszystkie „zależne” przesyłki muszą mieć w momencie odbioru co najmniej jedną „wymagającą” przesyłkę w pojazdzie.

Odbiór „zależnej” przesyłki musi więc mieć:

  • „Wymagana” przesyłka tylko z dostawą dostarczona na trasie po:
  • „Wymagany” przesyłka odebrana na trasie przed „zależną” przesyłką. Jeśli „wymagany” przesyłka ma być dostarczona, dostawa musi zostać wykonana po odebraniu „zależnej” przesyłki.
IN_SAME_VEHICLE_AT_DELIVERY_TIME To samo co wcześniej, z tą różnicą, że w momencie dostawy przesyłki „zależne” muszą mieć w pojeździe przesyłkę „wymaganą”.

SkippedShipment

Określa szczegóły niewykonanych dostaw w rozwiązaniu. W przypadku błahych przypadków lub jeśli możemy zidentyfikować przyczynę pominięcia, podajemy ją tutaj.

Pola
index

int32

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

label

string

Kopia odpowiedniej wartości Shipment.label, jeśli została ona określona w elementach Shipment.

reasons[]

Reason

Lista powodów, dla których przesyłka została pominięta. Zobacz komentarz powyżej Reason. Jeśli nie będziemy w stanie ustalić, dlaczego przesyłka została pominięta, nie ustawimy przyczyn.

Przyczyna

Jeśli możemy wyjaśnić, dlaczego przesyłka została pominięta, podamy tutaj powody. Jeśli przyczyna nie jest taka sama w przypadku wszystkich pojazdów, element reason będzie zawierał więcej niż 1 element. Przesyłka pominięta nie może mieć zduplikowanych przyczyn, czyli wszystkich pól, z wyjątkiem pola 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
}

Przesyłka, która została pominięta, jest niezgodna ze wszystkimi pojazdami. Powody mogą być różne w przypadku poszczególnych pojazdów, ale w przynajmniej jednym z nich przekroczona byłaby pojemność „jabłek” (w tym w samochodzie 1), w przynajmniej jednym przekroczona byłaby pojemność „jabłek” (w tym w samochodzie 3), a w przynajmniej jednym przekroczony byłby limit odległości (w tym w samochodzie 1).

Pola
code

Code

Zapoznaj się z komentarzami w kodzie.

example_exceeded_capacity_type

string

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

example_vehicle_index

int32

Jeśli przyczyna dotyczy niezgodności przesyłki z pojazdem, to pole zawiera indeks odpowiedniego pojazdu.

Kod

Kod identyfikujący typ przyczyny. Kolejność nie ma znaczenia. W szczególności nie wskazuje, czy dana przyczyna pojawi się przed inną w rozwiązaniu, jeśli obie są stosowane.

Wartości w polu enum
CODE_UNSPECIFIED Nigdy nie należy ich używać.
NO_VEHICLE W modelu nie ma żadnego pojazdu, przez co wszystkie dostawy są niemożliwe.
DEMAND_EXCEEDS_VEHICLE_CAPACITY Popyt na przesyłkę przekracza pojemność pojazdu w przypadku niektórych typów pojemności, w tym example_exceeded_capacity_type.
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT

Minimalna odległość niezbędna do wykonania tej dostawy, czyli od start_location pojazdu do miejsc odbioru lub dostawy oraz do miejsca docelowego pojazdu, przekracza route_distance_limit pojazdu.

Pamiętaj, że do tego obliczenia używamy odległości geodezyjnych.

CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT

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

Uwaga: czas podróży jest obliczany w najlepszym możliwym scenariuszu, czyli jako odległość geodezyjna × 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 wykonać tej dostawy w najlepszym scenariuszu (patrz CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT w celu obliczenia czasu), jeśli rozpoczyna się w najwcześniejszym możliwym czasie: łączny czas pracy pojazdu spowoduje, że zakończy on pracę po upływie najpóźniejszego czasu zakończenia.
VEHICLE_NOT_ALLOWED Pole allowed_vehicle_indices w przesyłce nie jest puste, a pojazd do niej nie należy.

TimeWindow

Okna czasowe ograniczają czas trwania zdarzenia, np. czas przybycia w ramach wizyty lub czas rozpoczęcia i zakończenia korzystania z pojazdu.

Sztywne granice przedziału czasowego, start_timeend_time, narzucają najwcześniejszy i najpóźniejszy czas zdarzenia, tak aby start_time <= event_time <= end_time. Dolna granica okna czasowego (soft_start_time), soft_start_time, wyraża preferencję, aby zdarzenie miało miejsce w czasie lub po soft_start_time, przy czym koszt jest proporcjonalny do czasu, jaki upływa od soft_start_time do wystąpienia zdarzenia. Górna granica okna czasowego, soft_end_time, wyraża preferencję, aby zdarzenie miało miejsce w czasie lub przed czasem soft_end_time, przynosząc koszt proporcjonalny do czasu, jaki upłynie od tego momentu.soft_end_time Wartości start_time, end_time, soft_start_timesoft_end_time powinny mieścić się w globalnych limitach czasowych (patrz ShipmentModel.global_start_timeShipmentModel.global_end_time) oraz spełniać te wymagania:

  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 okna czasowego. Jeśli nie podasz żadnej wartości, zostanie użyta wartość ShipmentModel.global_start_time.

end_time

Timestamp

Czas zakończenia sztywnego przedziału czasu. Jeśli nie podasz żadnej wartości, zostanie użyta wartość ShipmentModel.global_end_time.

soft_start_time

Timestamp

Czas rozpoczęcia przedziału czasu (miękki).

soft_end_time

Timestamp

Czas zakończenia przedziału czasu (miękki).

cost_per_hour_before_soft_start_time

double

Koszt na godzinę dodany do innych kosztów w modelu, jeśli zdarzenie występuje przed wartością soft_start_time, obliczany jako:

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

Koszt musi być dodatni, a pole może być ustawione tylko wtedy, gdy ustawiono pole soft_start_time.

cost_per_hour_after_soft_end_time

double

Koszt na godzinę dodany do innych kosztów w modelu, jeśli zdarzenie wystąpiło po soft_end_time, obliczany jako:

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

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 są sumowane, a następnie stosowany jest najbardziej restrykcyjny warunek lub limit (zgodnie z naturalną semantyką „AND”).

Pola
src_tag

string

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

Odpowiednia wizyta w źródle lub uruchomienie pojazdu jest zgodne, jeśli pole VisitRequest.tags lub Vehicle.start_tags zawiera wartość src_tag lub nie zawiera wartości excluded_src_tag (w zależności od tego, które z tych pól jest niepuste).

excluded_src_tag

string

Zobacz src_tag. Dokładnie jeden z pól src_tag i excluded_src_tag musi być niepusty.

dst_tag

string

Odpowiednio wizyta w miejscu docelowym lub koniec podróży pasażera jest zgodny, jeśli pole VisitRequest.tags lub Vehicle.end_tags zawiera wartość dst_tag lub nie zawiera wartości excluded_dst_tag (w zależności od tego, które z tych pól jest niepuste).

excluded_dst_tag

string

Zobacz dst_tag. Dokładnie jeden z pól dst_tag i excluded_dst_tag musi być niepusty.

cost

double

Określa koszt wykonania tego przejścia. Jest on podawany w tych samych jednostkach co wszystkie inne koszty w modelu i nie może być ujemny. Jest ona naliczana dodatkowo do wszystkich innych kosztów.

cost_per_kilometer

double

Określa koszt na kilometr zastosowany do przebytej odległości podczas wykonywania tego przejścia. Dodaje się do wszystkich Vehicle.cost_per_kilometer określonych w pojazdach.

distance_limit

DistanceLimit

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

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

delay

Duration

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

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

Pojazd

Model pojazdu w przypadku problemu z dostawą. Rozwiązanie problemu z dostawą spowoduje utworzenie trasy dla tego pojazdu, która rozpoczyna się w miejscu start_location, a kończy w miejscu end_location. Trasa to sekwencja wizyt (patrz ShipmentRoute).

Pola
display_name

string

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

travel_mode

TravelMode

Tryb podróży, który wpływa na drogi dostępne dla pojazdu i jego prędkość. Zobacz też travel_duration_multiple.

route_modifiers

RouteModifiers

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

start_location

LatLng

Geograficzna lokalizacja, w której pojazd rozpoczyna przejazd przed odbiorem przesyłek. Jeśli nie określisz inaczej, pojazd rozpoczyna kurs od pierwszego odbioru. Jeśli model dostawy zawiera macierze czasu i odległości, nie należy podawać parametru start_location.

start_waypoint

Waypoint

Punkt drogi przedstawiający lokalizację geograficzną, w której pojazd rozpoczyna przejazd przed odbiorem przesyłek. Jeśli nie określono ani właściwości start_waypoint, ani start_location, pojazd rozpoczyna działanie od pierwszego odbioru. Jeśli model dostawy zawiera macierze czasu i odległości, nie można określić parametru start_waypoint.

end_location

LatLng

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

end_waypoint

Waypoint

Punkt drogi reprezentujący lokalizację geograficzną, w której pojazd kończy ostatnią VisitRequest. Jeśli nie określisz ani end_waypoint, ani end_location, ShipmentRoute pojazdu kończy się natychmiast po zakończeniu ostatniego VisitRequest. Jeśli model dostawy zawiera macierze czasu i odległości, nie należy podawać parametru end_waypoint.

start_tags[]

string

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

Pustych lub powtarzających się ciągów znaków nie można używać.

end_tags[]

string

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

Pustych lub powtarzających się ciągów znaków nie można stosować.

start_time_windows[]

TimeWindow

Okna czasowe, w których pojazd może opuścić miejsce początkowe. Muszą mieścić się w globalnych limitach czasowych (patrz pola ShipmentModel.global_*). Jeśli nie określisz tu żadnej wartości, nie będzie limitów poza tymi globalnymi limitami czasowymi.

Przedziały czasu należące do tego samego powtarzającego się pola muszą być rozłączne, czyli żaden z nich nie może się pokrywać z innym ani być sąsiadować z innym. Muszą być uporządkowane chronologicznie.

Wartości cost_per_hour_after_soft_end_timesoft_end_time można ustawić tylko wtedy, gdy istnieje jedno okno czasowe.

end_time_windows[]

TimeWindow

Okna czasowe, w których pojazd może dotrzeć do miejsca docelowego. Muszą mieścić się w globalnych limitach czasowych (patrz pola ShipmentModel.global_*). Jeśli nie określisz tu żadnej wartości, nie będzie limitów poza tymi globalnymi limitami czasowymi.

Przedziały czasu należące do tego samego powtarzającego się pola muszą być rozłączne, czyli żaden z nich nie może się pokrywać z innym ani być sąsiadować z innym. Muszą być uporządkowane chronologicznie.

Wartości cost_per_hour_after_soft_end_timesoft_end_time można ustawić tylko wtedy, gdy istnieje jedno okno czasowe.

unloading_policy

UnloadingPolicy

Zasady rozładunku stosowane w pojazdach.

load_limits

map<string, LoadLimit>

Pojemność pojazdu (np. waga, objętość, liczba palet). Klucze na mapie to identyfikatory typu wczytania zgodne z kluczami pola Shipment.load_demands. Jeśli dany klucz nie jest obecny na tej mapie, odpowiadająca mu pojemność jest uważana za nieograniczoną.

cost_per_hour

double

Koszty pojazdu: wszystkie koszty są sumowane i muszą być wyrażone w tej samej jednostce co Shipment.penalty_cost.

Koszt godziny przejazdu pojazdu. Koszt ten jest naliczany za cały czas trwania trasy, w tym czas podróży, oczekiwania i wizyty. Używanie operatora cost_per_hour zamiast samego cost_per_traveled_hour może spowodować wydłużenie czasu oczekiwania.

cost_per_traveled_hour

double

Koszt godziny przejazdu pojazdu. Ten koszt jest stosowany tylko do czasu przejazdu po trasie (czyli podanego w ShipmentRoute.transitions) i nie obejmuje czasu oczekiwania ani czasu wizyty.

cost_per_kilometer

double

Koszt przejechania 1 km trasy przez pojazd. Ten koszt jest stosowany do odległości podanej w ShipmentRoute.transitions i nie dotyczy odległości przebytej z arrival_location do departure_location w ramach jednego VisitRequest.

fixed_cost

double

Stałe koszty stosowane, jeśli pojazd jest używany do obsługi przesyłki.

used_if_route_is_empty

bool

To pole ma zastosowanie tylko do pojazdów, których trasa nie obsługuje żadnych przesyłek. Wskazuje, czy w tym przypadku pojazd powinien być uznany za używany.

Jeśli to ustawienie ma wartość true, pojazd jedzie z miejsca początkowego do miejsca docelowego, nawet jeśli nie obsługuje żadnych przesyłek. Uwzględniane są koszty czasu i odległości wynikające z przejazdu od początku do końca.

W przeciwnym razie pojazd nie przemieszcza się z punktu początkowego do końcowego i nie ma dla niego zaplanowanego break_rule ani opóźnienia (z TransitionAttributes). W takim przypadku ShipmentRoute pojazdu nie zawiera żadnych informacji oprócz indeksu i oznaczenia pojazdu.

route_duration_limit

DurationLimit

Limit zastosowany do łącznego czasu trwania trasy pojazdu. W danym OptimizeToursResponse czas trwania trasy pojazdu to różnica między jego vehicle_end_timevehicle_start_time.

travel_duration_limit

DurationLimit

Ograniczenie czasu trwania przejazdu na trasie pojazdu. W danym OptimizeToursResponse czas przejazdu trasy jest sumą wszystkich transitions.travel_duration.

route_distance_limit

DistanceLimit

Ograniczenie stosowane do całkowitej odległości przebytej przez pojazd. W danym OptimizeToursResponse odległość trasy jest sumą wszystkich 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 należy uwzględnić w wizytach z określonym visit_types. Ten dodatkowy czas wizyty zwiększa koszty, jeśli ustawiono 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 z nich.

break_rule

BreakRule

Opisuje harmonogram przerw, który ma być stosowany w tym pojeździe. Jeśli pole jest puste, dla tego pojazdu nie będą planowane żadne przerwy.

label

string

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

ignore

bool

Jeśli wartość used_if_route_is_empty ma być ustawiona na prawda, musisz ustawić wartość used_if_route_is_empty na fałsz, a samochód pozostanie nieużywany.

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

Jeśli dostawa jest realizowana przez pojazd ignorowany w injected_solution_constraint, a wszelkie powiązane odbiory/dostawy są ograniczone do pozostania w pojeździe (czyli nie są rozluźnione do poziomu RELAX_ALL_AFTER_THRESHOLD), są one 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 mnożenia, który może być używany do zwiększania lub zmniejszania czasu przejazdu tego pojazdu. Ustawienie tej wartości na 2,0 oznacza, że pojazd jest wolniejszy i czas podróży jest dwukrotnie dłuższy niż w przypadku standardowych pojazdów. Ten współczynnik nie wpływa na długość wizyty. Wpływa 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 wielokrotność jest uważana za 1,0.

OSTRZEŻENIE: czasy przejazdu zostaną zaokrąglone do najbliższej sekundy po zastosowaniu tego wielokrotnego, ale przed wykonaniem jakichkolwiek operacji numerycznych, dlatego małe wielokrotne może spowodować utratę dokładności.

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.

Gdy zdefiniujesz pole z miękkim limitem, musisz zdefiniować zarówno miękki maksymalny próg, jak i powiązany z nim koszt.

Pola
max_duration

Duration

Stały limit ograniczający czas trwania do max_duration.

soft_max_duration

Duration

miękki limit, który nie narzuca maksymalnego czasu trwania, ale w przypadku jego naruszenia powoduje powstanie kosztu trasy; Ten koszt jest sumowany z innymi kosztami zdefiniowanymi w modelu, przy użyciu tej samej jednostki.

Jeśli jest zdefiniowana, wartość soft_max_duration musi być nieujemna. Jeśli zdefiniowano też parametr max_duration, wartość soft_max_duration musi być mniejsza niż max_duration.

quadratic_soft_max_duration

Duration

Miękki limit, który nie narzuca maksymalnego czasu trwania, ale w przypadku jego przekroczenia powoduje, że trasa powoduje koszt proporcjonalny do kwadratu czasu. Ten koszt jest sumowany z innymi kosztami zdefiniowanymi w modelu, przy użyciu tej samej jednostki.

Jeśli jest zdefiniowana, wartość quadratic_soft_max_duration musi być nieujemna. Jeśli zdefiniowana jest też wartość max_duration, wartość quadratic_soft_max_duration musi być mniejsza od wartości max_duration, a różnica nie może być większa niż jeden dzień:

max_duration - quadratic_soft_max_duration <= 86400 seconds

cost_per_hour_after_soft_max

double

Koszt na godzinę, jeśli zostanie przekroczony próg soft_max_duration. Jeśli czas trwania jest poniżej progu, dodatkowy koszt wynosi 0. W innych przypadkach koszt zależy od czasu trwania w następujący sposób:

  cost_per_hour_after_soft_max * (duration - soft_max_duration)

Koszt musi być nieujemny.

cost_per_square_hour_after_quadratic_soft_max

double

Koszt za godzinę kwadratową, który jest naliczany, gdy przekroczony zostanie próg quadratic_soft_max_duration.

Jeśli czas trwania jest poniżej progu, dodatkowy koszt wynosi 0. W innych przypadkach 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 musi być nieujemny.

LoadLimit

Określa limit ładunku dla pojazdu, np. „ten samochód może przewozić maksymalnie 3500 kg”. Zobacz load_limits.

Pola
soft_max_load

int64

Miękki limit obciążenia. Zobacz cost_per_unit_above_soft_max.

cost_per_unit_above_soft_max

double

Jeśli ładunek przekroczy wartość soft_max_load na trasie tego pojazdu, zostanie zastosowana następująca kara za koszty (tylko raz na pojazd): (load - soft_max_load) * cost_per_unit_above_soft_max. Wszystkie koszty są sumowane i muszą być wyrażone w tej samej jednostce co Shipment.penalty_cost.

start_load_interval

Interval

Dopuszczalny przedział ładowania pojazdu na początku trasy.

end_load_interval

Interval

Dopuszczalny przedział ładowania pojazdu na końcu trasy.

max_load

int64

Maksymalny dopuszczalny ładunek.

Interwał

Przedział dopuszczalnych wartości obciążenia.

Pola
min

int64

minimalny dopuszczalny ładunek; Wartość musi być większa lub równa 0. Jeśli oba parametry są określone, wartość min musi być mniejsza lub równa wartości max.

max

int64

Maksymalny dopuszczalny ładunek. Wartość musi być większa lub równa 0. Jeśli nie podasz maksymalnego obciążenia, wiadomość nie będzie nakładać żadnych ograniczeń. Jeśli oba parametry są określone, wartość min musi być mniejsza lub równa wartości max.

TravelMode

Tryby podróży, z których mogą korzystać pojazdy.

Powinny to być podzbiór preferowanych trybów podróży interfejsu API Routes na platformie Google Maps. Szczegóły: https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode.

Wartości w polu enum
TRAVEL_MODE_UNSPECIFIED Nieokreślony środek transportu, równoważny z DRIVING.
DRIVING Tryb podróży odpowiadający wskazówkom dojazdu (samochód, ...).
WALKING Tryb podróży odpowiadający wskazówkom dojazdu pieszo.

UnloadingPolicy

Zasady dotyczące rozładunku pojazdu. Dotyczy tylko przesyłek, które obejmują zarówno odbiór, jak i dostawę.

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

Wartości w polu enum
UNLOADING_POLICY_UNSPECIFIED Nieokreślona polityka rozładunku; dostawy muszą odbywać się po odpowiednich odbiorach.
LAST_IN_FIRST_OUT Dostawy muszą odbywać się w odwrotnej kolejności odbioru
FIRST_IN_FIRST_OUT Dostawy muszą odbywać się w tej samej kolejności co odbiory

Punkt pośredni

Zawiera punkt na trasie. Punkty kontrolne oznaczają miejsca przyjazdu i odjazdu dotyczące żądań wizyty oraz miejsca początkowe i końcowe dotyczące pojazdów.

Pola
side_of_road

bool

Opcjonalnie: Wskazuje, że lokalizacja tego punktu kontrolnego ma być preferowaną lokalizacją dla pojazdu, aby zatrzymał się on po konkretnej stronie drogi. Gdy ustawisz tę wartość, trasa będzie przebiegać przez lokalizację, aby pojazd mógł się zatrzymać po tej stronie drogi, po której znajduje się ta lokalizacja, z dala od środka jezdni. Ta opcja nie działa w przypadku trybu „Chodzenie”.

Pole unii location_type. różne sposoby przedstawiania lokalizacji; location_type może być tylko jednym z tych elementów:
location

Location

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

place_id

string

Identyfikator miejsca docelowego powiązany z punktem drogi.