Indeks
RouteOptimization(interfejs)AggregatedMetrics(komunikat)BatchOptimizeToursMetadata(komunikat)BatchOptimizeToursRequest(komunikat)BatchOptimizeToursRequest.AsyncModelConfig(komunikat)BatchOptimizeToursResponse(komunikat)BreakRule(komunikat)BreakRule.BreakRequest(komunikat)BreakRule.FrequencyConstraint(komunikat)DataFormat(wyliczenie)DistanceLimit(komunikat)GcsDestination(komunikat)GcsSource(komunikat)InjectedSolutionConstraint(komunikat)InjectedSolutionConstraint.ConstraintRelaxation(komunikat)InjectedSolutionConstraint.ConstraintRelaxation.Relaxation(komunikat)InjectedSolutionConstraint.ConstraintRelaxation.Relaxation.Level(wyliczenie)InputConfig(komunikat)Location(komunikat)OptimizeToursLongRunningMetadata(komunikat)OptimizeToursRequest(komunikat)OptimizeToursRequest.SearchMode(wyliczenie)OptimizeToursRequest.SolvingMode(wyliczenie)OptimizeToursResponse(komunikat)OptimizeToursResponse.Metrics(komunikat)OptimizeToursUriMetadata(komunikat)OptimizeToursUriRequest(komunikat)OptimizeToursUriResponse(komunikat)OptimizeToursValidationError(komunikat)OptimizeToursValidationError.FieldReference(komunikat)OutputConfig(komunikat)RouteModifiers(komunikat)Shipment(komunikat)Shipment.Load(komunikat)Shipment.VisitRequest(komunikat)ShipmentModel(komunikat)ShipmentModel.DurationDistanceMatrix(komunikat)ShipmentModel.DurationDistanceMatrix.Row(komunikat)ShipmentModel.Objective(komunikat)ShipmentModel.Objective.Type(wyliczenie)ShipmentModel.PrecedenceRule(komunikat)ShipmentRoute(komunikat)ShipmentRoute.Break(komunikat)ShipmentRoute.EncodedPolyline(komunikat)ShipmentRoute.Transition(komunikat)ShipmentRoute.VehicleLoad(komunikat)ShipmentRoute.Visit(komunikat)ShipmentRoute.Visit.VisitType(wyliczenie)ShipmentTypeIncompatibility(komunikat)ShipmentTypeIncompatibility.IncompatibilityMode(wyliczenie)ShipmentTypeRequirement(komunikat)ShipmentTypeRequirement.RequirementMode(wyliczenie)SkippedShipment(komunikat)SkippedShipment.Reason(komunikat)SkippedShipment.Reason.Code(wyliczenie)TimeWindow(komunikat)TransitionAttributes(komunikat)Uri(komunikat)Vehicle(komunikat)Vehicle.DurationLimit(komunikat)Vehicle.LoadLimit(komunikat)Vehicle.LoadLimit.Interval(komunikat)Vehicle.LoadLimit.LoadCost(komunikat)Vehicle.TravelMode(wyliczenie)Vehicle.UnloadingPolicy(wyliczenie)VehicleFullness(komunikat)Waypoint(komunikat)
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 |
|---|
|
Optymalizuje trasy pojazdów dla co najmniej 1 wiadomości Ta metoda jest długo działającą operacją (LRO). Dane wejściowe do optymalizacji (wiadomości Użytkownik może odpytywać Jeśli pole Jeśli pole
|
| OptimizeTours |
|---|
|
Wysyła Model Celem jest przypisanie
|
| OptimizeToursLongRunning |
|---|
|
Jest to wariant metody Zwrócona operacja
|
| OptimizeToursUri |
|---|
|
Jest to wariant metody Klient określa identyfikator URI obiektu Ta metoda powinna być preferowana w stosunku do metody Zwrócona operacja
|
AggregatedMetrics
Zbiorcze dane dotyczące ShipmentRoute (lub OptimizeToursResponse) dla wszystkich elementów Transition lub Visit (lub wszystkich elementów ShipmentRoute).
| Pola | |
|---|---|
performed_shipment_count |
Liczba zrealizowanych dostaw. Pamiętaj, że para odbioru i dostawy jest liczona tylko raz. |
travel_duration |
Łączny czas podróży na trasie lub w rozwiązaniu. |
wait_duration |
Łączny czas oczekiwania na trasę lub rozwiązanie. |
delay_duration |
Łączny czas opóźnienia na trasie lub w rozwiązaniu. |
break_duration |
Łączny czas trwania przerw na trasie lub w rozwiązaniu. |
visit_duration |
Łączny czas trwania wizyty na trasie lub w rozwiązaniu. |
total_duration |
Łączny czas trwania powinien być równy sumie wszystkich czasów trwania powyżej. W przypadku tras odpowiada on również: |
travel_distance_meters |
Łączna odległość do przebycia na trasie lub w rozwiązaniu. |
max_loads |
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 |
performed_mandatory_shipment_count |
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 |
Suma 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 |
Wymagane. Docelowy projekt i lokalizacja, w których ma zostać wykonane wywołanie. Format:
Regionalne wartości |
model_configs[] |
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 |
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 |
Wymagane. Informacje o modelu wejściowym. |
output_config |
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[] |
Sekwencja przerw. Zobacz wiadomość |
frequency_constraints[] |
Może obowiązywać kilka |
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 |
Wymagane. Dolna granica (włącznie) początku przerwy. |
latest_start_time |
Wymagane. Górna granica (włącznie) początku przerwy. |
min_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 |
Wymagane. Minimalny czas trwania przerwy dla tego ograniczenia. Nieujemna. Zobacz opis: |
max_inter_break_duration |
Wymagane. Maksymalny dozwolony czas trwania dowolnego przedziału czasu na trasie, który nie obejmuje co najmniej częściowo przerwy wynoszącej |
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 |
Ścisłe ograniczenie odległości do maksymalnie max_meters. Limit nie może być liczbą ujemną. |
soft_max_meters |
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 |
Poniesiony koszt za kilometr, który wzrasta do Ten koszt nie jest obsługiwany w: |
cost_per_kilometer_above_soft_max |
Koszt za kilometr naliczany, jeśli odległość przekracza limit Koszt nie może być ujemny. |
GcsDestination
Lokalizacja w Google Cloud Storage, w której zostaną zapisane pliki wyjściowe.
| Pola | |
|---|---|
uri |
Wymagane. Identyfikator URI obiektu w Google Cloud Storage. |
GcsSource
Lokalizacja w Google Cloud Storage, z której zostanie odczytany plik wejściowy.
| Pola | |
|---|---|
uri |
Wymagane. Identyfikator URI obiektu w Google Cloud Storage w formacie |
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[] |
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 |
skipped_shipments[] |
Pominięte przesyłki rozwiązania do wstrzyknięcia. Niektóre z nich mogą zostać pominięte w pierwotnym rozwiązaniu. Zobacz pole |
constraint_relaxations[] |
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[] |
Wszystkie złagodzenia ograniczeń wizyt, które będą miały zastosowanie do wizyt na trasach z pojazdami w |
vehicle_indices[] |
Określa indeksy pojazdów, do których ma zastosowanie ograniczenie wizyty Indeks pojazdu jest mapowany tak samo jak |
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_timeORAZj + 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_timeORAZrelaxations(i).threshold_visit_count == 0, a koniec pojazdu jest rozluźniony dorelaxations(i).level, jeśli spełnia warunek:vehicle_end_time >= relaxations(i).threshold_timeORAZroute.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 |
Poziom złagodzenia ograniczeń, który obowiązuje, gdy spełnione są warunki w dniu |
threshold_time |
Czas, w którym lub po którym można zastosować rozluźnienie |
threshold_visit_count |
Liczba wizyt, po której można zastosować złagodzenie Jeśli jest to |
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 |
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 |
Wymagane. Format danych wejściowych. |
Pole zbiorcze source. Wymagane. source może mieć tylko jedną z tych wartości: |
|
gcs_source |
Lokalizacja w Google Cloud Storage. Musi to być pojedynczy obiekt (plik). |
Lokalizacja
Zawiera lokalizację (punkt geograficzny i opcjonalny nagłówek).
| Pola | |
|---|---|
lat_lng |
Współrzędne geograficzne punktu na trasie. |
heading |
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 |
Wymagane. Docelowy projekt lub lokalizacja, w której ma zostać wykonane wywołanie. Format:
Regionalne wartości |
timeout |
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 |
Model dostawy do rozwiązania. |
solving_mode |
Domyślny tryb rozwiązywania to |
search_mode |
Tryb wyszukiwania użyty do rozwiązania żądania. |
injected_first_solution_routes[] |
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:
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 |
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[] |
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 Pola Tego pola nie można używać razem z polem
|
interpret_injected_solutions_using_labels |
Jeśli ma wartość prawda:
Ta interpretacja dotyczy pól Jeśli ma wartość „true”, etykiety w tych kategoriach mogą pojawiać się w swojej kategorii maksymalnie raz:
Jeśli 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 |
consider_road_traffic |
Uwzględnij szacunkowe natężenie ruchu podczas obliczania pól |
populate_polylines |
Jeśli ma wartość Prawda, linie łamane będą wypełniane w odpowiedziach |
populate_transition_polylines |
Jeśli ma wartość prawda, linie łamane i tokeny tras będą wypełniane w odpowiedzi |
allow_large_deadline_despite_interruption_risk |
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 |
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 |
label |
Etykieta, która może służyć do identyfikacji tego żądania, zgłaszana w |
geodesic_meters_per_second |
Gdy parametr |
max_validation_errors |
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 |
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 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 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[] |
Trasy obliczone dla każdego pojazdu. Trasa i-ta odpowiada i-temu pojazdowi w modelu. |
request_label |
Kopia |
skipped_shipments[] |
Lista wszystkich pominiętych dostaw. |
validation_errors[] |
Lista wszystkich błędów weryfikacji, które udało nam się wykryć niezależnie. Zobacz wyjaśnienie „MULTIPLE ERRORS” dla komunikatu |
processed_request |
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 |
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 |
Są to dane zbiorcze dotyczące tras. Każdy rodzaj danych to suma (lub maksymalna wartość w przypadku obciążeń) wszystkich pól |
skipped_mandatory_shipment_count |
Liczba pominiętych obowiązkowych przesyłek. |
used_vehicle_count |
Liczba użytych pojazdów. Uwaga: jeśli trasa pojazdu jest pusta, a parametr |
earliest_vehicle_start_time |
Najwcześniejszy czas rozpoczęcia dla używanego pojazdu, obliczony jako minimalna wartość dla wszystkich używanych pojazdów: |
latest_vehicle_end_time |
Najpóźniejszy czas zakończenia dla używanego pojazdu, obliczony jako maksymalna wartość dla wszystkich używanych pojazdów: |
costs |
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 |
Łą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 |
Wymagane. Docelowy projekt lub lokalizacja, w której ma zostać wykonane wywołanie. Format:
Regionalne wartości |
input |
Wymagane. Identyfikator URI obiektu Cloud Storage zawierającego |
output |
Wymagane. Identyfikator URI obiektu Cloud Storage, który będzie zawierać |
OptimizeToursUriResponse
Odpowiedź zwracana przez metodę OptimizeToursUri.
| Pola | |
|---|---|
output |
Opcjonalnie: Identyfikator URI obiektu Cloud Storage zawierającego
|
OptimizeToursValidationError
Opisuje błąd lub ostrzeżenie, które wystąpiły podczas sprawdzania poprawności OptimizeToursRequest.
| Pola | |
|---|---|
code |
Błąd weryfikacji jest definiowany przez parę ( 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 STABILNOŚĆ: |
display_name |
Wyświetlana nazwa błędu. |
fields[] |
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: Pamiętaj jednak, że liczebność parametru |
error_message |
Zrozumiały dla człowieka ciąg tekstowy opisujący błąd. Istnieje mapowanie 1:1 między STABILNOŚĆ: niestabilny – komunikat o błędzie powiązany z danym elementem |
offending_values |
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 |
Nazwa pola, np. „vehicles”. |
sub_field |
W razie potrzeby rekurencyjnie zagnieżdżone pole podrzędne. |
Pole zbiorcze Pole |
|
index |
Indeks pola, jeśli jest powtarzane. |
key |
Klucz, jeśli pole jest mapą. |
OutputConfig
Określ miejsce docelowe dla wyników [BatchOptimizeTours][google.maps.routeoptimization.v1.RouteOptimizationService.BatchOptimizeTours].
| Pola | |
|---|---|
data_format |
Wymagane. Format danych wyjściowych. |
Pole zbiorcze destination. Wymagane. destination może mieć tylko jedną z tych wartości: |
|
gcs_destination |
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 |
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 |
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 |
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 |
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 |
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 |
Zdefiniowana przez użytkownika wyświetlana nazwa przesyłki. Może mieć maksymalnie 63 znaki i zawierać znaki UTF-8. |
pickups[] |
Zestaw alternatywnych opcji odbioru powiązanych z przesyłką. Jeśli nie zostanie określona, pojazd musi tylko odwiedzić lokalizację odpowiadającą dostawom. |
deliveries[] |
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 |
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[] |
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 |
costs_per_vehicle[] |
Określa koszt ponoszony, gdy ta przesyłka jest dostarczana przez każdy pojazd. Jeśli jest określony, musi zawierać:
Te koszty muszą być podane w tej samej jednostce co |
costs_per_vehicle_indices[] |
Indeksy pojazdów, których dotyczy |
pickup_to_delivery_absolute_detour_limit |
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 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 |
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 |
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 Różni się od pola |
label |
Określa etykietę tej przesyłki. Ta etykieta jest raportowana w odpowiedzi w polu |
ignore |
Jeśli ma wartość prawda, pomiń tę przesyłkę, ale nie stosuj Zignorowanie dostawy powoduje błąd weryfikacji, gdy w modelu występują elementy typu Ignorowanie dostawy realizowanej w |
penalty_cost |
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 |
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 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 |
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 |
Lokalizacja geograficzna, do której pojazd dociera podczas wykonywania tego zadania ( |
arrival_waypoint |
Punkt pośredni, do którego pojazd dociera podczas wykonywania tego działania ( |
departure_location |
Lokalizacja geograficzna, z której pojazd odjeżdża po zakończeniu tego zadania ( |
departure_waypoint |
Punkt na trasie, z którego pojazd odjeżdża po zakończeniu tego zadania ( |
tags[] |
Określa tagi dołączone do prośby o wizytę. Puste lub zduplikowane ciągi znaków są niedozwolone. |
time_windows[] |
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 Brak pola 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 |
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 |
cost |
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 |
load_demands |
Wczytaj wymagania dotyczące tej prośby o wizytę. To pole jest podobne do pola |
visit_types[] |
Określa typy wizyt. Można go użyć do przydzielenia dodatkowego czasu wymaganego do zakończenia wizyty przez pojazd (patrz Typ może pojawić się tylko raz. |
label |
Określa etykietę dla tego elementu |
avoid_u_turns |
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[] |
Zbiór przesyłek, które muszą zostać zrealizowane w modelu. |
vehicles[] |
Zbiór pojazdów, które mogą być używane do wykonywania wizyt. |
objectives[] |
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 Eksperymentalne: więcej informacji znajdziesz na stronie https://developers.google.com/maps/tt/route-optimization/experimental/objectives/make-request. |
global_start_time |
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. Jeśli używasz pól |
global_end_time |
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 |
„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 |
duration_distance_matrices[] |
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 Przykłady użycia:
|
duration_distance_matrix_src_tags[] |
Tagi definiujące źródła macierzy czasu trwania i macierzy odległości; Tagi odpowiadają |
duration_distance_matrix_dst_tags[] |
Tagi definiujące miejsca docelowe macierzy czasu trwania i macierzy odległości; Tagi odpowiadają |
transition_attributes[] |
Do modelu dodano atrybuty przejścia. |
shipment_type_incompatibilities[] |
Zbiory niezgodnych typów przesyłek (patrz |
shipment_type_requirements[] |
Zestawy wymagań |
precedence_rules[] |
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 |
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[] |
Określa wiersze macierzy czasu trwania i odległości. Musi zawierać tyle samo elementów co |
vehicle_start_tag |
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 Wszystkie macierze muszą mieć różne wartości |
Wiersz
Określa wiersz macierzy czasu trwania i odległości.
| Pola | |
|---|---|
durations[] |
Wartości czasu trwania dla danego wiersza. Musi zawierać tyle samo elementów co |
meters[] |
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 |
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 |
Typ celu. |
weight |
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 |
Wskazuje, czy „pierwsze” zdarzenie to dostawa. |
second_is_delivery |
Wskazuje, czy „drugie” zdarzenie to dostawa. |
offset_duration |
Przesunięcie między „pierwszym” a „drugim” zdarzeniem. Może być ujemna. |
first_index |
Indeks przesyłki „pierwszego” zdarzenia. To pole musi być określone. |
second_index |
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 |
Pojazd realizujący trasę, identyfikowany przez indeks w źródle |
vehicle_label |
Etykieta pojazdu, który obsługuje tę trasę, równa |
vehicle_start_time |
Godzina, o której pojazd rozpoczyna trasę. |
vehicle_end_time |
Godzina, o której pojazd kończy trasę. |
visits[] |
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[] |
Lista uporządkowana przejść dla trasy. |
has_traffic_infeasibilities |
Gdy parametr 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 ( |
route_polyline |
Zakodowana reprezentacja linii łamanej trasy. To pole jest wypełniane tylko wtedy, gdy parametr |
breaks[] |
Przerwy zaplanowane dla pojazdu obsługującego tę trasę. Sekwencja |
metrics |
Czas trwania, odległość i wskaźniki obciążenia dla tej trasy. Pola |
vehicle_fullness |
Pole Eksperymentalne: działanie lub istnienie tego pola może się zmienić w przyszłości. |
route_costs |
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 |
Łączny koszt trasy. Suma wszystkich kosztów na mapie kosztów. |
Przerwa
Dane reprezentujące wykonanie przerwy.
| Pola | |
|---|---|
start_time |
Czas rozpoczęcia przerwy. |
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 |
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 |
Czas podróży podczas tej zmiany. |
travel_distance_meters |
Odległość przebyta podczas przejścia. |
traffic_info_unavailable |
Gdy ruch jest żądany przez |
delay_duration |
Suma czasów opóźnienia zastosowanych do tego przejścia. Jeśli występuje opóźnienie, zaczyna się ono dokładnie |
break_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 |
wait_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 |
Łączny czas trwania przejścia (podany dla wygody). Jest on równy:
|
start_time |
Czas rozpoczęcia tego przejścia. |
route_polyline |
Zakodowana reprezentacja linii łamanej trasy, którą przebyto podczas przejścia. To pole jest wypełniane tylko wtedy, gdy parametr |
route_token |
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 |
vehicle_loads |
Ładunki pojazdu podczas tego przejścia dla każdego typu, który pojawia się w Ładunki podczas pierwszego przejścia to ładunki początkowe trasy pojazdu. Następnie po każdej wizycie |
VehicleLoad
Raportuje rzeczywiste obciążenie pojazdu w danym punkcie trasy dla danego typu (patrz Transition.vehicle_loads).
| Pola | |
|---|---|
amount |
Obciążenie pojazdu danego typu. Jednostka obciążenia jest zwykle wskazywana przez typ. Zobacz |
Odwiedź
Wizyta wykonana podczas trasy. Ta wizyta odpowiada odbiorowi lub dostawie Shipment.
| Pola | |
|---|---|
shipment_index |
Indeks pola |
is_pickup |
Jeśli ma wartość „prawda”, wizyta odpowiada odbiorowi |
visit_request_index |
Indeks |
start_time |
Czas rozpoczęcia wizyty. Pamiętaj, że pojazd może dotrzeć do miejsca wizyty wcześniej. Godziny są zgodne z |
load_demands |
Łączne zapotrzebowanie na obciążenie wizyty jako suma przesyłki i żądania wizyty |
detour |
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: W przeciwnym razie jest obliczana na podstawie pojazdu |
shipment_label |
Kopia odpowiedniego elementu |
visit_label |
Kopia odpowiedniego elementu |
visit_type |
Opcjonalnie: Określa typ wizyty. Zastępuje pole |
injected_solution_location_token |
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ść 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[] |
Lista niezgodnych typów. Dwie przesyłki, które mają różne wartości |
incompatibility_mode |
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:
|
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[] |
Lista alternatywnych typów przesyłek wymaganych przez |
dependent_shipment_types[] |
Wszystkie przesyłki z typem w polu UWAGA: łańcuchy wymagań, w których |
requirement_mode |
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 Dlatego „zależny” odbiór przesyłki musi mieć:
|
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 |
Indeks odpowiada indeksowi przesyłki w źródle |
label |
Kopia odpowiedniego elementu |
reasons[] |
Lista powodów, dla których dostawa została pominięta. Zobacz komentarz powyżej |
penalty_cost |
To jest kopia Eksperymentalne: działanie lub istnienie tego pola może się zmienić w przyszłości. |
estimated_incompatible_vehicle_ratio |
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 |
Zapoznaj się z komentarzami do kodu. |
example_vehicle_indices[] |
Tak samo jak Eksperymentalne: działanie lub istnienie tego pola może się zmienić w przyszłości. |
example_exceeded_capacity_type |
Jeśli kod przyczyny to |
example_vehicle_index |
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 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 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 Eksperymentalne: działanie lub istnienie tego pola może się zmienić w przyszłości. |
SHIPMENT_IGNORED |
Pole 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: 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: 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 |
Czas rozpoczęcia sztywnego przedziału czasu. Jeśli nie zostanie określony, zostanie ustawiony na |
end_time |
Czas zakończenia sztywnego przedziału czasu. Jeśli nie zostanie określony, zostanie ustawiony na |
soft_start_time |
Czas rozpoczęcia „miękkiego” okna czasowego. |
soft_end_time |
Miękki czas zakończenia przedziału czasu. |
cost_per_hour_before_soft_start_time |
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: Ten koszt musi być dodatni, a pole można ustawić tylko wtedy, gdy ustawiono soft_start_time. |
cost_per_hour_after_soft_end_time |
Koszt za godzinę dodawany do innych kosztów w modelu, jeśli zdarzenie występuje po Ten koszt musi być dodatni, a pole można ustawić tylko wtedy, gdy ustawiono |
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 |
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 |
excluded_src_tag |
Zobacz |
dst_tag |
Wizyta w miejscu docelowym lub zakończenie trasy pojazdu pasuje, jeśli |
excluded_dst_tag |
Zobacz |
cost |
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 |
Określa koszt za kilometr stosowany do odległości przebytej podczas wykonywania tego przejścia. Suma jest dodawana do wartości |
distance_limit |
Określa limit odległości przebytej podczas tego przejścia. Od czerwca 2021 r. obsługiwane są tylko limity miękkie. |
delay |
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 |
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 |
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 |
Zdefiniowana przez użytkownika wyświetlana nazwa pojazdu. Może mieć maksymalnie 63 znaki i zawierać znaki UTF-8. |
travel_mode |
Tryb podróży, który wpływa na drogi, po których może poruszać się pojazd, i jego prędkość. Zobacz też |
route_modifiers |
Zbiór warunków, które należy spełnić, wpływających na sposób obliczania tras dla danego pojazdu. |
start_location |
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_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 |
end_location |
Położenie geograficzne, w którym pojazd kończy ostatnią trasę |
end_waypoint |
Punkt pośredni reprezentujący położenie geograficzne, w którym pojazd kończy ostatnie zadanie |
start_tags[] |
Określa tagi dołączone na początku trasy pojazdu. Puste lub zduplikowane ciągi znaków są niedozwolone. |
end_tags[] |
Określa tagi dołączone na końcu trasy pojazdu. Puste lub zduplikowane ciągi znaków są niedozwolone. |
start_time_windows[] |
Okna czasowe, w których pojazd może opuścić lokalizację początkową. Muszą mieścić się w globalnych limitach czasu (patrz pola 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 |
end_time_windows[] |
Przedziały czasu, w których pojazd może dotrzeć do lokalizacji końcowej. Muszą mieścić się w globalnych limitach czasu (patrz pola 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 |
unloading_policy |
Zasada rozładunku obowiązująca w pojeździe. |
load_limits |
pojemność pojazdu (np. waga, objętość, liczba palet); Klucze na mapie to identyfikatory typu obciążenia, zgodne z kluczami pola |
cost_per_hour |
Koszty pojazdu: wszystkie koszty sumują się i muszą być podane w tej samej jednostce co 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_traveled_hour |
Koszt godziny podróży na trasie pojazdu. Ten koszt jest stosowany tylko do czasu podróży na trasie (czyli czasu podanego w polu |
cost_per_kilometer |
Koszt kilometra trasy pojazdu. Ten koszt jest stosowany do odległości podanej w polu |
fixed_cost |
Koszt stały stosowany, jeśli ten pojazd jest używany do obsługi przesyłki. |
used_if_route_is_empty |
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 |
route_duration_limit |
Limit stosowany do łącznego czasu trwania trasy pojazdu. W danym |
travel_duration_limit |
Limit stosowany do czasu podróży na trasie pojazdu. W danym |
route_distance_limit |
Limit stosowany do łącznej odległości trasy pojazdu. W danym |
extra_visit_duration_for_visit_type |
Określa mapę od ciągów znaków visit_types do czasów trwania. Czas trwania to czas dodatkowy do Jeśli prośba o wizytę ma kilka typów, na mapie zostanie dodany czas trwania dla każdego typu. |
break_rule |
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 |
Określa etykietę tego pojazdu. Ta etykieta jest raportowana w odpowiedzi jako |
ignore |
Jeśli ma wartość true, parametr Jeśli przesyłka jest realizowana przez ignorowany pojazd w Jeśli przesyłka jest realizowana przez ignorowany pojazd w |
travel_duration_multiple |
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 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ż |
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 |
Ścisły limit ograniczający czas trwania do maksymalnie wartości max_duration. |
soft_max_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ść |
quadratic_soft_max_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
|
cost_per_hour_after_soft_max |
Koszt za godzinę naliczany w przypadku przekroczenia progu Koszt nie może być ujemny. |
cost_per_square_hour_after_quadratic_soft_max |
Koszt za godzinę kwadratową naliczany w przypadku przekroczenia progu 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: 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 |
Limit obciążenia. Zobacz |
cost_per_unit_above_soft_max |
Jeśli obciążenie na trasie tego pojazdu przekroczy |
start_load_interval |
Dopuszczalny przedział obciążenia pojazdu na początku trasy. |
end_load_interval |
Dopuszczalny przedział obciążenia pojazdu na końcu trasy. |
max_load |
Maksymalna dopuszczalna wielkość obciążenia. |
cost_per_kilometer |
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 |
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 |
Minimalne dopuszczalne obciążenie. Musi być ≥ 0. Jeśli podano obie wartości, |
max |
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, |
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 |
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 |
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 |
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 |
Maksymalna wartość wszystkich pozostałych pól w tej wiadomości. |
distance |
Stosunek między |
travel_duration |
Stosunek [AggregatedMetrics.travel_duration_seconds][] do |
active_duration |
Stosunek [AggregatedMetrics.total_duration_seconds][] do |
max_load |
Maksymalny współczynnik spośród wszystkich typów [AggregatedMetrics.max_load][] i odpowiadających im |
active_span |
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ść ( |
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 |
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 |
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 |
Punkt określony za pomocą współrzędnych geograficznych, w tym opcjonalnego nagłówka. |
place_id |
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. |