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)OptimizeToursRequest
(komunikat)OptimizeToursRequest.SearchMode
(wyliczenie)OptimizeToursRequest.SolvingMode
(wyliczenie)OptimizeToursResponse
(komunikat)OptimizeToursResponse.Metrics
(komunikat)OptimizeToursValidationError
(komunikat)OptimizeToursValidationError.FieldReference
(komunikat)OutputConfig
(komunikat)Shipment
(komunikat)Shipment.Load
(komunikat)Shipment.VisitRequest
(komunikat)ShipmentModel
(komunikat)ShipmentModel.DurationDistanceMatrix
(komunikat)ShipmentModel.DurationDistanceMatrix.Row
(komunikat)ShipmentModel.PrecedenceRule
(komunikat)ShipmentRoute
(komunikat)ShipmentRoute.Break
(komunikat)ShipmentRoute.EncodedPolyline
(komunikat)ShipmentRoute.Transition
(komunikat)ShipmentRoute.VehicleLoad
(komunikat)ShipmentRoute.Visit
(komunikat)ShipmentTypeIncompatibility
(komunikat)ShipmentTypeIncompatibility.IncompatibilityMode
(wyliczenie)ShipmentTypeRequirement
(komunikat)ShipmentTypeRequirement.RequirementMode
(wyliczenie)SkippedShipment
(komunikat)SkippedShipment.Reason
(komunikat)SkippedShipment.Reason.Code
(wyliczenie)TimeWindow
(komunikat)TransitionAttributes
(komunikat)Vehicle
(komunikat)Vehicle.DurationLimit
(komunikat)Vehicle.LoadLimit
(komunikat)Vehicle.LoadLimit.Interval
(komunikat)Vehicle.TravelMode
(wyliczenie)Vehicle.UnloadingPolicy
(wyliczenie)Waypoint
(komunikat)
RouteOptimization
Usługa optymalizacji wycieczek samochodowych.
Ważność niektórych typów pól:
google.protobuf.Timestamp
- Czasy są podane w czasie uniksowym: sekundy od 1970-01-01T00:00:00+00:00.
- sekundy muszą być wartością [0, 253402300799], czyli w zakresie [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00].
- Wartość nanos musi być nieskonfigurowana lub ustawiona na 0.
google.protobuf.Duration
- sekundy muszą być wartością [0, 253402300799], czyli w zakresie [1970-01-01T00:00:00+00:00, 9999-12-31T23:59:59+00:00].
- Wartość nanos musi być nieskonfigurowana lub ustawiona na 0.
google.type.LatLng
- szerokość geograficzna musi być z zakresu [-90,0, 90,0].
- długość geograficzna musi być z zakresu [-180,0, 180,0].
- wartość szerokości i długości geograficznej musi być różna od zera.
BatchOptimizeTours |
---|
Optymalizuje wycieczki pojazdami dla co najmniej 1 wiadomości Jest to operacja długo trwa (LRO). Dane wejściowe optymalizacji (wiadomości:
|
OptimizeTours |
---|
Wysyła polecenie Model Celem jest przypisanie do tych elementów zamówienia wartości
|
AggregatedMetrics
Zbiorcze dane o wymiarach ShipmentRoute
(odpowiadające wartości OptimizeToursResponse
we wszystkich elementach Transition
lub Visit
(odpowiadanie we wszystkich elementach ShipmentRoute
).
Pola | |
---|---|
performed_shipment_count |
Liczba dostarczonych przesyłek. Pamiętaj, że para „odbiór i dostawa” liczy się tylko raz. |
travel_duration |
Całkowity czas podróży na trasie lub rozwiązaniu. |
wait_duration |
Całkowity czas oczekiwania na trasę lub rozwiązanie. |
delay_duration |
Całkowity czas opóźnienia dla trasy lub rozwiązania. |
break_duration |
Całkowity czas trwania przerwy na trasie lub rozwiązaniu. |
visit_duration |
Łączny czas trwania wizyty na trasie lub rozwiązaniu. |
total_duration |
Łączny czas trwania powinien być równy sumie wszystkich czasów trwania podanych wyżej. W przypadku tras odpowiada również:
|
travel_distance_meters |
Całkowita odległość pokonana przez trasę lub rozwiązanie. |
max_loads |
Maksymalne obciążenie na całej trasie (rozwiązanie odpowiedzi) dla każdej ilości na tej trasie (rozwiązanie odpowiedzi) jest obliczane jako maksymalne we wszystkich |
BatchOptimizeToursMetadata
Ten typ nie ma żadnych pól.
Metadane operacji dla wywołań BatchOptimizeToursRequest
.
BatchOptimizeToursRequest
Poproś o zbiorową optymalizację wycieczek jako operacji asynchronicznej. Każdy plik wejściowy powinien zawierać jeden plik OptimizeToursRequest
, a każdy plik wyjściowy powinien zawierać 1 element OptimizeToursResponse
. Żądanie zawiera informacje potrzebne do odczytu i zapisu oraz przeanalizowania plików. Wszystkie pliki wejściowe i wyjściowe powinny być w tym samym projekcie.
Pola | |
---|---|
parent |
To pole jest wymagane. Aby zadzwonić, ustaw docelowy projekt i lokalizację. Format: * Jeśli nie podasz lokalizacji, region zostanie wybrany automatycznie. |
model_configs[] |
To pole jest wymagane. Informacje wejściowe i wyjściowe w każdym modelu zakupu, takie jak ścieżki do 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, może być używana przez użytkowników jako alias do śledzenia modeli. |
input_config |
To pole jest wymagane. Informacje o modelu wejściowym. |
output_config |
To pole jest wymagane. Wymagane wyjściowe informacje o lokalizacji. |
BatchOptimizeToursResponse
Ten typ nie ma żadnych pól.
Odpowiedź na: BatchOptimizeToursRequest
. Wartość ta jest zwracana w ramach operacji Długo trwającej operacji po jej zakończeniu.
BreakRule
Zasady generowania przerw w ruchu w pojeździe (np. przerwy na lunch). Przerwa to ciągły okres, w którym pojazd pozostaje bezczynny w bieżącym położeniu i nie może dokonywać żadnych wizyt. Przerwa może wystąpić:
- podczas podróży między 2 wizytami (co obejmuje czas tuż przed wizytą lub bezpośrednio po niej, ale nie w trakcie wizyty), – w takim przypadku wydłuża się czas przewozu pomiędzy wizytami;
- lub przed uruchomieniem pojazdu (pojazd może nie uruchomić się w trakcie przerwy), w takim przypadku nie ma wpływu na czas uruchomienia pojazdu.
- lub po zakończeniu pojazdu (ditto, z godziną zakończenia pojazdu).
Pola | |
---|---|
break_requests[] |
Kolejność przerw. Przeczytaj wiadomość |
frequency_constraints[] |
Obowiązują kilka zasad ( |
BreakRequest
Kolejność przerw (tj. ich liczbę i kolejność), która ma zastosowanie do każdego pojazdu, musi być wcześniej znana. Powtarzające się obiekty BreakRequest
określają tę sekwencję w kolejności, w jakiej muszą wystąpić. Przedziały czasu (earliest_start_time
/ latest_start_time
) mogą się pokrywać, ale muszą być zgodne z kolejnością (to jest zaznaczone).
Pola | |
---|---|
earliest_start_time |
To pole jest wymagane. Dolna granica (włącznie) na początku przerwy. |
latest_start_time |
To pole jest wymagane. Górna granica (włącznie) na początku przerwy. |
min_duration |
To pole jest wymagane. Minimalny czas trwania przerwy. Musi być liczbą dodatnią. |
FrequencyConstraint
Można dodatkowo ograniczyć częstotliwość i czas trwania przerw określonych powyżej, narzucając minimalną częstotliwość przerw, np. „Co 12 godzin musi wystąpić przerwa o długości co najmniej 1 godziny”. Zakładając, że można to zinterpretować jako „w każdym 12-godzinnym okresie upływającym musi być co najmniej 1 przerwa trwająca co najmniej godzinę”, przykład ten będzie miałby postać 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 uwzględnia wszystkie te ograniczenia, a także przedziały czasu i minimalne czasy trwania określone w zasadzie BreakRequest
.
W praktyce może obowiązywać zasada FrequencyConstraint
w przypadku przerw, które nie następują po sobie. Na przykład ten harmonogram uwzględnia przykład „1 godz. co 12 godz.”:
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 |
To pole jest wymagane. Minimalny czas trwania przerwy dla tego ograniczenia. Nieujemna. Zobacz opis: |
max_inter_break_duration |
To pole jest wymagane. Maksymalny dozwolony odstęp w dowolnym przedziale czasu na trasie, który nie uwzględnia przynajmniej częściowo przerwy |
DataFormat
Formaty danych w plikach wejściowych i wyjściowych.
Wartości w polu enum | |
---|---|
DATA_FORMAT_UNSPECIFIED |
Nieprawidłowa wartość. Format nie może być UNSPECIFIED. |
JSON |
Plik JavaScript Object Notation. |
PROTO_TEXT |
Format tekstowy buforów protokołu. Więcej informacji znajdziesz na stronie https://protobuf.dev/reference/protobuf/textformat-spec/. |
DistanceLimit
Limit określający maksymalną odległość, jaką można pokonać. Może być twarde lub miękkie.
Jeśli zdefiniowano nieujemny limit, zarówno soft_max_meters
, jak i cost_per_kilometer_above_soft_max
muszą być zdefiniowane i nie mogą być ujemne.
Pola | |
---|---|
max_meters |
Ograniczony limit odległości nieprzekraczający maksymalnej wartości max_m. Limit nie może być ujemny. |
soft_max_meters |
Łagodne ograniczenie nie powoduje egzekwowania limitu maksymalnej odległości, ale jego naruszenie powoduje naliczanie kosztów, które są sumowane na inne koszty zdefiniowane w modelu przy tej samej jednostce. Jeśli wartość parametru soft_max_metrics jest określona, musi być mniejsza niż wartość maksymalna_metra i nie może być ujemna. |
cost_per_kilometer_above_soft_max |
Koszt za kilometr naliczony, gdy odległość przekracza
Koszt nie może być liczbą ujemną. |
GcsDestination
Lokalizacja w Google Cloud Storage, w której będą zapisywane pliki wyjściowe.
Pola | |
---|---|
uri |
To pole jest wymagane. Identyfikator URI obiektu w Google Cloud Storage. |
GcsSource
Lokalizacja w Google Cloud Storage, z której zostanie odczytany plik wejściowy.
Pola | |
---|---|
uri |
To pole jest wymagane. Identyfikator URI obiektu Google Cloud Storage o formacie |
InjectedSolutionConstraint
Rozwiązanie wstawione w żądaniu wraz z informacjami o tym, które wizyty muszą być ograniczane, a także o tym, w jaki sposób.
Pola | |
---|---|
routes[] |
Trasy rozwiązania do wstrzykiwania. 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 kategorii |
skipped_shipments[] |
Pominięto dostawę roztworu do wstrzyknięcia. Niektóre z nich mogą być pomijane w pierwotnym rozwiązaniu. Zobacz pole |
constraint_relaxations[] |
W przypadku 0 lub większej liczby grup pojazdów określa, kiedy i w jakim stopniu chcesz złagodzić ograniczenia. Jeśli to pole jest puste, wszystkie trasy pojazdów, które nie są puste, są w pełni ograniczone. |
ConstraintRelaxation
W przypadku grupy pojazdów określa, na jakim poziomie i na jakim poziomie ograniczenia dotyczące wizyt zostaną złagodzone. Przesyłki wymienione w polu skipped_shipment
można pominąć, tzn. nie można ich zrealizować.
Pola | |
---|---|
relaxations[] |
Wszystkie złagodzenia ograniczeń dotyczących wizyt, które będą stosowane w przypadku wizyt na trasach z pojazdami w: |
vehicle_indices[] |
Określa indeksy pojazdów, do których obowiązuje ograniczenie liczby wizyt Indeks pojazdu jest mapowany tak samo jak |
Relaks
Jeśli pole relaxations
jest puste, czas rozpoczęcia i sekwencja wszystkich wizyt w dniu routes
są w pełni ograniczone i nie można wstawiać ani dodawać nowych wizyt do tych tras. Również godzina rozpoczęcia i zakończenia podróży w: routes
jest w pełni ograniczona, chyba że pojazd jest pusty (tzn. nie odnotowaliśmy wizyt, a parametr used_if_route_is_empty
ma w modelu wartość fałsz).
relaxations(i).level
określa poziom złagodzenia ograniczenia stosowany do wizyty #j, która spełnia:
route.visits(j).start_time >= relaxations(i).threshold_time
ORAZj + 1 >= relaxations(i).threshold_visit_count
Podobnie jest w przypadku uruchomienia pojazdu łagodnego do stanu relaxations(i).level
, jeśli spełnia następujące warunki:
vehicle_start_time >= relaxations(i).threshold_time
ORAZrelaxations(i).threshold_visit_count == 0
i koniec pojazdu ma status „relaxations(i).level
”, jeśli spełnia:vehicle_end_time >= relaxations(i).threshold_time
ORAZroute.visits_size() + 1 >= relaxations(i).threshold_visit_count
Aby zastosować poziom relaksacyjny, jeśli wizyta spełnia threshold_visit_count
LUB threshold_time
, dodaj 2 elementy relaxations
z tym samym ustawieniem level
: jeden ma ustawiony tylko threshold_visit_count
, a drugi tylko threshold_time
. Jeśli wizyta spełnia warunki wielu relaxations
, obowiązuje poziom najbardziej relaksujący. W rezultacie, od początku przejazdu przez wyznaczoną trasę do końca pojazdu, poziom relaksu staje się bardziej rozluźniony: tzn. poziom relaksu nie maleje w miarę pokonywania trasy.
Czas i sekwencja wizyt na trasie, które nie spełniają warunków progowych dowolnego elementu relaxations
, są w pełni ograniczone i nie można ich wstawić do tych sekwencji. Dodatkowo, jeśli początek lub koniec pojazdu nie spełnia warunków jakiegokolwiek relaksu, czas jest ustalany, chyba że pojazd jest pusty.
Pola | |
---|---|
level |
Poziom złagodzenia ograniczenia, który obowiązuje, gdy spełnione są warunki na poziomie |
threshold_time |
Czas, o którym można zastosować złagodzenie |
threshold_visit_count |
Liczba wizyt, po których lub których można zastosować złagodzenie Jeśli jest to |
Poziom
Wyraża różne poziomy złagodzenia ograniczeń, które mają zastosowanie do wizyty i tych, które następują po spełnieniu warunków progowych.
Poniższe wyliczenie jest uporządkowane w kolejności rosnącego relaksu.
Wartości w polu enum | |
---|---|
LEVEL_UNSPECIFIED |
Pośredni domyślny poziom relaksacji: brak ograniczeń, tzn. wszystkie odwiedziny są w pełni ograniczone. Tej wartości nie można używać bezpośrednio w polu |
RELAX_VISIT_TIMES_AFTER_THRESHOLD |
Godziny rozpoczęcia i zakończenia wizyty będą łagodne, ale każda wizyta pozostaje powiązana z tym samym pojazdem i należy przestrzegać sekwencji wizyt – między nimi ani przed nimi nie można wstawić wizyty. |
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD |
Tak samo jak w przypadku witryny RELAX_VISIT_TIMES_AFTER_THRESHOLD , ale sekwencja wizyt jest także spokojna: wizyty są nadal powiązane z pojazdem. |
RELAX_ALL_AFTER_THRESHOLD |
Tak samo jak w przypadku RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD , ale pojazd jest również spokojny: po upływie limitu czasu lub później wizyty są całkowicie bezpłatne i mogą nie zostać zrealizowane. |
InputConfig
Określ dane wejściowe dla [BatchOptimizeTours][google.maps.routeOptimization.v1.RouteOptimizationService.BatchOptimizeTours].
Pola | |
---|---|
data_format |
To pole jest wymagane. Format danych wejściowych. |
Pole sumy source . To pole jest wymagane. source może być tylko jedną z tych wartości: |
|
gcs_source |
Lokalizacja w Google Cloud Storage. Musi to być pojedynczy obiekt (plik). |
Lokalizacja
Obejmuje lokalizację (punkt geograficzny i opcjonalny nagłówek).
Pola | |
---|---|
lat_lng |
Współrzędne geograficzne punktu pośredniego. |
heading |
Kierunek kompasu powiązany z kierunkiem ruchu. Ta wartość służy do określenia strony drogi na potrzeby odbioru i miejsca wysyłki. Wartości nagłówka mogą wynosić od 0 do 360, gdzie 0 określa kierunek z kierunku północnym, 90 określa kierunek z kierunku północnym itd. |
OptimizeToursRequest
Prośba o przesłanie do rozwiązania ułatwiającego optymalizację wycieczki, które definiuje model wysyłki do rozwiązania oraz parametry optymalizacji.
Pola | |
---|---|
parent |
To pole jest wymagane. Aby zadzwonić, wybierz projekt lub lokalizację. Format: * Jeśli nie podasz lokalizacji, region zostanie wybrany automatycznie. |
timeout |
Jeśli ten limit czasu jest ustawiony, serwer zwraca odpowiedź przed upłynięciem tego limitu lub upłynięciem terminu przez serwer w przypadku żądań synchronicznych (w zależności od tego, co nastąpi wcześniej). W przypadku żądań asynchronicznych serwer wygeneruje rozwiązanie (jeśli będzie to możliwe) przed upływem limitu czasu oczekiwania. |
model |
Model dostawy do rozwiązania. |
solving_mode |
Domyślnie tryb rozwiązywania to |
search_mode |
Tryb wyszukiwania użyty do rozwiązania żądania. |
injected_first_solution_routes[] |
Wskaż algorytm optymalizacji, aby znaleźć pierwsze rozwiązanie podobne do poprzedniego. Model jest ograniczony na czas tworzenia pierwszego rozwiązania. Przesyłki, które nie zostały wykonane na danej trasie, są domyślnie pomijane przy pierwszym rozwiązaniu, ale mogą być realizowane w ramach kolejnych rozwiązań. Rozwiązanie musi spełniać pewne podstawowe założenia dotyczące poprawności:
Jeśli wstrzykiwane rozwiązanie nie jest możliwe, nie zawsze jest zwracany błąd walidacji, a zamiast tego może zostać zwrócony błąd wskazujący na niewykonalność. |
injected_solution_constraint |
Ogranicz algorytm optymalizacji, aby znaleźć rozwiązanie podobne do poprzedniego. W ten sposób można na przykład zablokować fragmenty tras, które zostały już zakończone lub które mają zostać ukończone, ale nie mogą być modyfikowane. Jeśli wstrzykiwane rozwiązanie nie jest możliwe, nie zawsze jest zwracany błąd walidacji, a zamiast tego 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 zmiany pierwotnej sekwencji wizyt lub czasu podróży. Zostaną zaktualizowane tylko inne szczegóły. To nie rozwiąże modelu. Od 11 grudnia 2020 roku ta funkcja wypełni tylko linie łamane w przypadku niepustych tras. Wymaga też, aby atrybut Pola Tego pola nie można używać razem z polami
|
interpret_injected_solutions_using_labels |
Jeśli tak:
Ta interpretacja dotyczy pól Jeśli ma wartość true (prawda), etykiety z następujących kategorii mogą pojawić się w danej kategorii co najwyżej raz:
Jeśli parametr Usunięcie wizyt lub całych tras z wstrzykiwanego rozwiązania może mieć wpływ na domniemane ograniczenia, co może prowadzić do zmian w rozwiązaniu, błędów weryfikacji lub niewykonalności. UWAGA: element wywołujący musi upewnić się, że każdy element |
consider_road_traffic |
Uwzględnij szacowany ruch przy obliczaniu pól |
populate_polylines |
Jeśli ma wartość prawda, linie łamane w odpowiedzi |
populate_transition_polylines |
Jeśli ma wartość true, w odpowiedzi |
allow_large_deadline_despite_interruption_risk |
Jeśli tak, termin przesyłania prośby (patrz https://grpc.io/blog/deadlines) może wynosić maksymalnie 60 minut. W przeciwnym razie maksymalny termin to tylko 30 minut. Żądania długotrwałe wiążą się z znacznie większym (ale nadal niewielkim) ryzykiem zakłóceń w działaniu. |
use_geodesic_distances |
Jeśli ma wartość prawda, odległości będą obliczane na podstawie odległości geodezyjnych, a nie Map Google, a czasy podróży będą obliczane na podstawie odległości geodezyjnych z prędkością określoną przez |
label |
Etykieta, która może zostać użyta do zidentyfikowania tego żądania, zgłoszona w |
geodesic_meters_per_second |
Jeśli |
max_validation_errors |
Skraca liczbę zwróconych błędów weryfikacji. Te błędy są zwykle dołączane do ładunku błędu CPD jako szczegółu błędu BadRequest (https://cloud.google.com/apis/design/errors#error_details), chyba że Solution_mode=VALIDATE_ONLY: patrz pole |
SearchMode
Tryb definiujący działanie wyszukiwania z ograniczeniem czasu oczekiwania i jakości rozwiązania. We wszystkich trybach egzekwowany jest globalny termin żądania.
Wartości w polu enum | |
---|---|
SEARCH_MODE_UNSPECIFIED |
Tryb nieokreślonego wyszukiwania – odpowiednik RETURN_FAST . |
RETURN_FAST |
Gdy znajdziesz pierwsze dobre rozwiązanie, przestań je wyszukiwać. |
CONSUME_ALL_AVAILABLE_TIME |
Poświęć cały dostępny czas na szukanie lepszych rozwiązań. |
SolvingMode
Określa sposób obsługi żądania przez funkcję rozwiązania. We wszystkich trybach oprócz VALIDATE_ONLY
, jeśli żądanie jest nieprawidłowe, wystąpi błąd INVALID_REQUEST
. Aby ograniczyć liczbę zwracanych błędów, zapoznaj się z tabelą max_validation_errors
.
Wartości w polu enum | |
---|---|
DEFAULT_SOLVE |
Rozwiąż model. |
VALIDATE_ONLY |
Weryfikuje model tylko bez rozwiązywania go: wypełnia jak najwięcej parametrów OptimizeToursResponse.validation_errors . |
DETECT_SOME_INFEASIBLE_SHIPMENTS |
Podaje tylko wartości WAŻNE: w tym miejscu zwracane są tylko te niemożliwe do zrealizowania, które zostały uznane za niemożliwe do wstępnego przetwarzania. |
OptimizeToursResponse
Odpowiedź po rozwiązaniu problemu z optymalizacją wycieczki, który obejmuje trasy, po których poruszają się poszczególne pojazdy, przesyłki, które zostały pominięte, oraz ogólny koszt rozwiązania.
Pola | |
---|---|
routes[] |
Trasy obliczane dla każdego pojazdu; i-ta trasa odpowiada i-tego pojazdowi w modelu. |
request_label |
Kopia |
skipped_shipments[] |
Lista wszystkich pominiętych przesyłek. |
validation_errors[] |
Lista wszystkich błędów weryfikacji, które udało nam się wykryć niezależnie. Zapoznaj się z wyjaśnieniem „WIELE BŁĘDÓW” dla komunikatu |
metrics |
Dane dotyczące czasu trwania, odległości i wykorzystania dla tego rozwiązania. |
Wskaźniki
Wskaźniki ogólne, zagregowane dla wszystkich tras.
Pola | |
---|---|
aggregated_route_metrics |
Dane zbiorcze po trasach. Poszczególne dane to suma (lub maksymalna w przypadku obciążeń) wszystkich pól |
skipped_mandatory_shipment_count |
Liczba pominiętych obowiązkowych dostaw. |
used_vehicle_count |
Liczba używanych pojazdów. Uwaga: jeśli trasa pojazdu jest pusta, a zasada |
earliest_vehicle_start_time |
Najwcześniejsza godzina rozpoczęcia użytkowania używanego pojazdu, obliczona jako minimalna wartość dla wszystkich używanych pojazdów z |
latest_vehicle_end_time |
Ostatni czas zakończenia użytkowania używanego pojazdu obliczony jako maksymalny czas zakończenia obsługi wszystkich używanych pojazdów w okresie |
costs |
Koszt rozwiązania z podziałem na pola żądań związane z kosztami. Klucze to ścieżki proto powiązane z danymi wejściowymi OptimizeToursRequest, np. „model.shipments.pickups.cost”, a wartościami są łączny koszt wygenerowany przez odpowiednie pole kosztu, zagregowany dla całego rozwiązania. Inaczej mówiąc, koszt["model.shipments.pickups.cost"] to suma wszystkich kosztów odbioru w stosunku do rozwiązania. Wszystkie koszty zdefiniowane w modelu są raportowane tutaj szczegółowo z wyjątkiem kosztów związanych z atrybutami przejścia, które od 2022 r. są raportowane tylko w postaci zbiorczej. |
total_cost |
Całkowity koszt rozwiązania. Suma wszystkich wartości na mapie kosztów. |
OptimizeToursValidationError
Opisuje błąd, który wystąpił podczas weryfikacji elementu OptimizeToursRequest
.
Pola | |
---|---|
code |
Błąd weryfikacji jest definiowany przez parę ( W pozostałych polach (poniżej) znajdziesz więcej informacji o błędzie. WIELE BŁĘDÓW: jeśli błędów jest wiele, proces weryfikacji próbuje wyświetlić kilka z nich. Ten proces nie jest doskonały, podobnie jak kompilator. Niektóre błędy weryfikacji będą „krytyczne”, co oznacza, że zatrzymują cały proces weryfikacji. Dotyczy to między innymi błędów Stabilność: REFERENCE: lista wszystkich par (kodu, nazwy):
|
display_name |
Wyświetlana nazwa błędu. |
fields[] |
Kontekst błędu może mieć wartość 0, 1 (w większości przypadków) lub większą liczbę pól. Na przykład w przypadku pojazdu nr 4 i pierwszego odbioru przesyłki nr 2 można:
Pamiętaj jednak, że moc zbioru |
error_message |
Zrozumiały dla człowieka ciąg tekstowy opisujący błąd. Między stabilność: niestabilny: komunikat o błędzie powiązany z danym elementem |
offending_values |
Może zawierać wartości pól. Ta funkcja nie zawsze jest dostępna. Zdecydowanie nie należy na niej polegać i służy ona wyłącznie do ręcznego debugowania modelu. |
FieldReference
Określa kontekst błędu weryfikacji. Pole FieldReference
zawsze odwołuje się do danego pola w tym pliku i ma taką samą strukturę hierarchiczną. Na przykład możemy określić element nr 2 start_time_windows
pojazdu nr 5 za pomocą:
name: "vehicles" index: 5 sub_field { name: "end_time_windows" index: 2 }
Pomijamy jednak elementy najwyższego poziomu, takie jak OptimizeToursRequest
czy ShipmentModel
, aby uniknąć zatłoczenia wiadomości.
Pola | |
---|---|
name |
Nazwa pola, np. „pojazdy”. |
sub_field |
W razie potrzeby rekurencyjnie zagnieżdżone pole podrzędne. |
Pole sumy
|
|
index |
Indeks pola, jeśli się powtarza. |
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 |
To pole jest wymagane. Format danych wyjściowych. |
Pole sumy destination . To pole jest wymagane. destination może być tylko jedną z tych wartości: |
|
gcs_destination |
Lokalizacja w Google Cloud Storage, w której zostaną zapisane dane wyjściowe. |
Wysyłka
Przesyłka pojedynczego produktu, od jednego z odbiorów do jednej z nich. Aby przesyłka została uznana za zrealizowana, unikalny pojazd musi odwiedzić jedno z jego lokalizacji (i odpowiednio zmniejszyć jego pojemność), a następnie odwiedzić jedno z miejsc dostawy (i w związku z tym ponownie odpowiednio zwiększyć pojemność).
Pola | |
---|---|
display_name |
Zdefiniowana przez użytkownika wyświetlana nazwa przesyłki. Może zawierać do 63 znaków i zawierać znaki UTF-8. |
pickups[] |
Zestaw alternatywnych opcji odbioru powiązanych z dostawą. Jeśli go nie podasz, pojazd musi odwiedzić tylko lokalizację odpowiadającą przesyłki. |
deliveries[] |
Zestaw alternatywnych opcji dostawy powiązanych z dostawą. Jeśli go nie podasz, pojazd będzie musiał przyjść tylko do miejsca odpowiadającego możliwości odbioru. |
load_demands |
Obciążenie przesyłki (np. waga, objętość, liczba palet itp.). Klucze na mapie powinny być identyfikatorami opisującymi typ odpowiedniego obciążenia, najlepiej łącznie z jednostkami. Na przykład: „weight_kg”, „volume_gallons”, „pallet_count” itp. Jeśli danego klucza nie ma na mapie, odpowiednie obciążenie jest uznawane za puste. |
allowed_vehicle_indices[] |
Zestaw pojazdów, które mogą zrealizować tę przesyłkę. Jeśli pole jest puste, wszystkie pojazdy mogą z niego korzystać. Pojazdy są wyświetlane według ich indeksu na liście |
costs_per_vehicle[] |
Określa koszt poniesiony w związku z dostarczeniem przesyłki przez każdy pojazd. Jeśli jest określony, musi zawierać EITHER:
Koszty muszą być podane w tej samej jednostce co wartość |
costs_per_vehicle_indices[] |
Indeksy pojazdów, których dotyczy |
pickup_to_delivery_absolute_detour_limit |
Określa maksymalny bezwzględny czas odjazdu w porównaniu z najkrótszą trasą od punktu odbioru do dostawy. Jeśli określono wartość, nie może ona być ujemna, a przesyłka musi zawierać co najmniej odbiór i dostawę. Niech to na przykład będzie najkrótszy czas potrzebny do uzyskania z wybranej alternatywy odbioru bezpośrednio do wybranej opcji dostawy. Następnie ustawienie
Jeśli dla tej samej dostawy określono zarówno limity względne, jak i bezwzględne, w przypadku każdej możliwej pary odbioru/dostawy zostanie zastosowany bardziej restrykcyjny limit. Od 10 października 2017 r. objazdy są obsługiwane tylko wtedy, gdy czas podróży nie zależy od pojazdu. |
pickup_to_delivery_time_limit |
Określa maksymalny czas od rozpoczęcia odbioru do rozpoczęcia dostawy. Jeśli określono wartość, nie może ona być ujemna, a przesyłka musi zawierać co najmniej odbiór i dostawę. Nie zależy to od możliwości odbioru i dostawy 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 |
Niepusty ciąg znaków określający „typ” tej przesyłki. Ta funkcja może służyć do definiowania niezgodności lub wymagań między Różni się od usługi |
label |
Określa etykietę tej przesyłki. Ta etykieta jest zgłaszana w odpowiedzi w |
ignore |
Jeśli ma wartość prawda, pomiń tę dostawę, ale nie stosuj Zignorowanie dostawy spowoduje błąd weryfikacji, gdy w modelu występują jakiekolwiek Ignorowanie dostawy realizowanej w krajach |
penalty_cost |
Jeśli dostawa nie zostanie ukończona, ta kara zostanie dodana do całkowitego kosztu tras. Przesyłka jest uznawana za zakończoną, jeśli zostanie odwiedzona jedna z dostępnych opcji odbioru i dostawy. Koszt może być wyrażony w tej samej jednostce, która została użyta we wszystkich innych polach dotyczących kosztów w modelu, i musi być dodatnia. WAŻNE: jeśli ta kara nie zostanie określona, zostanie uznana za nieskończoną, tj. dostawa musi zostać zrealizowana. |
pickup_to_delivery_relative_detour_limit |
Określa maksymalny względny czas odjazdu w porównaniu z najkrótszą ścieżką od odbioru do dostawy. Jeśli określono wartość, nie może ona być ujemna, a przesyłka musi zawierać co najmniej odbiór i dostawę. Niech to na przykład będzie najkrótszy czas potrzebny do uzyskania z wybranej alternatywy odbioru bezpośrednio do wybranej opcji dostawy. Następnie ustawienie
Jeśli dla tej samej dostawy określono zarówno limity względne, jak i bezwzględne, w przypadku każdej możliwej pary odbioru/dostawy zostanie zastosowany bardziej restrykcyjny limit. Od 10 października 2017 r. objazdy są obsługiwane tylko wtedy, gdy czas podróży nie zależy od pojazdu. |
Wczytaj
Podczas wizyty wstępnie zdefiniowana kwota może zostać dodana do obciążenia pojazdu, jeśli jest to odbiór, lub odliczona w przypadku dostawy. Tę kwotę określamy w tej wiadomości. Zobacz load_demands
.
Pola | |
---|---|
amount |
Kwota obciążenia pojazdu podczas danej wizyty będzie się zmieniać. Jest to liczba całkowita, dlatego użytkownicy powinni wybrać odpowiednią jednostkę, aby uniknąć utraty dokładności. Musi wynosić ≥ 0. |
VisitRequest
Prośba o wizytę, którą może zrealizować pojazd: określa lokalizację geograficzną (lub dwie, patrz niżej), godziny otwarcia i zamknięcia przedstawione w przedziałach czasowych oraz czas trwania usługi (czas, jaki pojazd zajmuje odbiór lub oddanie towaru).
Pola | |
---|---|
arrival_location |
Lokalizacja geograficzna, do której przyjeżdża pojazd, gdy wykonujesz ten |
arrival_waypoint |
Punkt na trasie, do którego dociera pojazd podczas wykonywania tego parametru ( |
departure_location |
Geolokalizacja, z której pojazd odjeżdża po wykonaniu tej |
departure_waypoint |
Punkt na trasie, z którego pojazd odjeżdża po pokonaniu tego trasy |
tags[] |
Określa tagi dołączone do prośby o wizytę. Puste i zduplikowane ciągi znaków są niedozwolone. |
time_windows[] |
Przedziały czasu, które ograniczają godzinę przyjazdu na wizytę. Pamiętaj, że pojazd może odjechać poza przedziałem czasu przyjazdu, tj. godzina przyjazdu i czas trwania nie muszą znajdować się w przedziale czasowym. Może to spowodować czas oczekiwania, jeśli pojazd przyjedzie przed Brak Przedziały czasu muszą być rozłączone, tj. żadne przedziały czasu nie mogą na siebie nakładać się lub przylegać do siebie i muszą się zmieniać w kolejności rosnącej. Wartości |
duration |
Długość 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żesz użyć tej opcji, aby zapłacić różne koszty za każdy alternatywny odbiór lub dostawę przesyłki. Koszt musi być w tej samej jednostce co |
load_demands |
Obciążenia związane z tą prośbą o wizytę. Działa ono tak samo jak pole |
visit_types[] |
Określa typy wizyt. Pozwala to przydzielić pojazdowi dodatkowy czas na ukończenie tej wizyty (patrz Typ może wystąpić tylko raz. |
label |
Określa etykietę elementu |
ShipmentModel
Model dostawy obejmuje zbiór wysyłek, które muszą zostać wykonane przez zestaw pojazdów przy minimalizowaniu ogólnego kosztu, który jest sumą:
- koszt kierowania pojazdem (suma kosztu łącznego czasu, koszt czasu podróży i stały koszt wszystkich pojazdów);
- niewykonane kary za dostawę.
- koszt dostawy na całym świecie
Pola | |
---|---|
shipments[] |
Zestaw wysyłek, które muszą zostać wykonane w modelu. |
vehicles[] |
Zestaw pojazdów, których można używać do zwiedzania. |
global_start_time |
Globalny czas rozpoczęcia i zakończenia modelu: żadne godziny spoza tego zakresu nie można uznać za prawidłowe. Zakres czasowy modelu musi być krótszy niż rok, np. wartości w polach Podczas korzystania z pól |
global_end_time |
Jeśli zasada nie jest skonfigurowana, jako domyślna używana jest godzina 00:00:00 UTC, 1 stycznia 1971 r. (tzn. sekund: 31536000, nanos: 0). |
global_duration_cost_per_hour |
„Globalny czas trwania” ogólnego planu to różnica między najwcześniejszym efektywnym czasem rozpoczęcia a najnowszym efektywnym czasem zakończenia wszystkich pojazdów. Użytkownicy mogą przypisać do tej ilości koszt godzinowy, aby na przykład podjąć próbę optymalizacji pod kątem jak najwcześniejszego ukończenia zadania. Ten koszt musi być w tej samej jednostce co |
duration_distance_matrices[] |
Określa używane w modelu macierze czasu trwania i odległości. Jeśli to pole jest puste, zostaną użyte dane 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 odległości; Tagi odpowiadają elementom |
duration_distance_matrix_dst_tags[] |
Tagi określające miejsca docelowe dla macierzy czasu trwania i odległości: Tagi odpowiadają elementom |
transition_attributes[] |
Do modelu dodano atrybuty przejścia. |
shipment_type_incompatibilities[] |
Zestawy niezgodnych typów wysyłki (patrz |
shipment_type_requirements[] |
Zestawy wymagań typu |
precedence_rules[] |
Zestaw reguł pierwszeństwa, które muszą być egzekwowane w modelu. |
max_active_vehicles |
Ogranicza maksymalną liczbę aktywnych pojazdów. Pojazd jest aktywny, jeśli na jego trasie zostanie zrealizowana co najmniej jedna przesyłka. Może to służyć do ograniczenia liczby tras, jeśli kierowców jest mniej niż pojazdów, a flota pojazdów jest heterogeniczna. Optymalizacja wybiera najlepszy podzbiór pojazdów do użycia. Musi być wartością dodatnią. |
DurationDistanceMatrix
Określa czas trwania wizyty i matrycę odległości od lokalizacji początkowych pojazdów do odwiedzenia oraz lokalizacji zakończenia pojazdu.
Pola | |
---|---|
rows[] |
Określa wiersze macierzy czasu trwania i odległości. Liczba elementów musi być równa |
vehicle_start_tag |
Tag określający, do których pojazdów ma zastosowanie dany czas trwania i matryca odległości. Jeśli pole jest puste, dotyczy to wszystkich pojazdów i może istnieć tylko jedna matryca. Każdy początek pojazdu musi pasować dokładnie do jednej macierzy, tj. dokładnie jedno z jego pola Wszystkie macierze muszą mieć inny parametr |
Wiersz
Określa wiersz macierzy czasu trwania i odległości.
Pola | |
---|---|
durations[] |
Wartości czasu trwania poszczególnych wierszy. Liczba elementów musi być równa |
meters[] |
Wartości odległości w danym wierszu. Jeśli w modelu nie ma kosztów ani ograniczeń, to pole może pozostać puste. W przeciwnym razie liczba elementów musi być taka sama jak |
PrecedenceRule
Reguła pierwszeństwa między 2 zdarzeniami (każde z nich to odbiór lub dostawa przesyłki): zdarzenie „pierwsze” musi się rozpocząć co najmniej offset_duration
po rozpoczęciu „pierwszego”.
Kilka pierwszeństwa może odnosić się do tych samych (lub powiązanych) zdarzeń, np. „odbiór produktu B następuje po dostawie A” oraz „odbiór produktu C następuje po odbiorze produktu B”.
Co więcej, pierwszeństwo mają zastosowanie tylko wtedy, gdy realizowane są obie dostawy, a w przeciwnym razie są one ignorowane.
Pola | |
---|---|
first_is_delivery |
Wskazuje, czy „pierwsze” zdarzenie jest wyświetleniem. |
second_is_delivery |
Wskazuje, czy zdarzenie „second” jest wyświetleniem. |
offset_duration |
Przesunięcie między pierwszym a drugim zdarzeniem. Ta wartość może być ujemna. |
first_index |
Indeks dostawy dla „pierwszego” zdarzenia. To pole musi być określone. |
second_index |
Indeks dostawy dla drugiego zdarzenia. To pole musi być określone. |
ShipmentRoute
Trasa pojazdu może zostać rozłożona zgodnie z osią czasu w ten sposób (zakładamy, że liczba wizyt wynosi n):
| | | | | 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
Rozróżniamy między tymi elementami:
- „wydarzenia punktowe”, np. początek i koniec każdej wizyty oraz początek i koniec każdej wizyty (tzw. przyjazd i odjazd). Występują w określonej sekundzie.
- „przedziały czasu”, np. same wizyty oraz przejścia między odwiedzinami. Chociaż czas trwania przedziałów czasowych może czasami wynosić zero, tj. zaczyna się i kończy o tej samej sekundzie, często ma dodatnią długość.
Niezmienniki:
- Jeśli liczba wizyt wynosi n, oznacza to n+1 przejść.
- Wizyta zawsze poprzedza przejście (ten sam indeks) i przejście po niej (indeks + 1).
- Po uruchomieniu pojazdu zawsze następuje przejście nr 0.
- Koniec pojazdu jest zawsze poprzedzony przejściem nr n.
Powiększanie. Oto, co się dzieje podczas zdarzeń 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
Oto jak można ustawić PODRÓŻE, NARUSY, OPÓŹNIENIA i OCZEKIWANIE podczas przejścia.
- Nie nakładają się na siebie.
- Opóźnienie jest niepowtarzalne i musi się liczyć w ciągu poprzedzającym kolejną wizytę (lub koniec pojazdu). Aby poznać czas rozpoczęcia i zakończenia, wystarczy znać czas opóźnienia.
- ZMIANY to graniczące ze sobą okresy, które nie nakładają się na siebie. Odpowiedź określa czas rozpoczęcia i czas trwania każdej przerwy.
- Funkcje TRAVEL i WAIT są „możliwość wywłaszczania”: w trakcie tego przejścia można je kilka razy przerwać. Klienci mogą założyć, że podróż odbywa się „jak najszybciej” i że pozostały czas zapełnia się „oczekiwaniem”.
A (złożony) przykład:
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 poruszający się po trasie, określony za pomocą indeksu w źródle |
vehicle_label |
Etykieta pojazdu obsługującego tę trasę, równa |
vehicle_start_time |
Godzina, o której pojazd rozpoczyna trasę. |
vehicle_end_time |
Czas, o którym pojazd kończy trasę. |
visits[] |
Uporządkowana sekwencja wizyt reprezentująca trasę. Odwiedziny[i] to i-te odwiedziny na trasie. Jeśli to pole jest puste, pojazd jest uznawany za nieużywany. |
transitions[] |
Uporządkowana lista przejść na trasie. |
has_traffic_infeasibilities |
Jeśli zasada
Przyjazd na stację next_visit prawdopodobnie odbędzie się później niż bieżące okno ze względu na wydłużony szacowany czas podróży o |
route_polyline |
Zakodowana reprezentacja trasy za pomocą linii łamanej. To pole jest wypełniane tylko wtedy, gdy |
breaks[] |
Zaplanowane przerwy na pojazd poruszający się na tej trasie. Sekwencja |
metrics |
Dane o czasie trwania, odległości i obciążeniu na tej trasie. Pola pola |
route_costs |
Koszt trasy z podziałem na pola żądań związane z kosztami. Klucze to ścieżki proto względem danych wejściowych OptimizeToursRequest, np. „model.shipments.pickups.cost”, a wartościami są łączny koszt wygenerowany przez odpowiednie pole kosztu, zagregowany na całej trasie. Inaczej mówiąc, koszt["model.shipments.pickups.cost"] to suma wszystkich kosztów odbioru na trasie. Wszystkie koszty zdefiniowane w modelu są raportowane tutaj szczegółowo z wyjątkiem kosztów związanych z atrybutami przejścia, które od 2022 r. są raportowane tylko w postaci zbiorczej. |
route_total_cost |
Całkowity koszt trasy. Suma wszystkich kosztów na mapie kosztów. |
Przerwa
Dane reprezentujące wykonanie przerwy.
Pola | |
---|---|
start_time |
Godzina rozpoczęcia przerwy. |
duration |
Czas trwania przerwy. |
EncodedPolyline
Zakodowana reprezentacja linii łamanej. Więcej informacji o kodowaniu w liniach łamanych 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 dwoma zdarzeniami na trasie. Zobacz opis aplikacji 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 tego przejścia. |
travel_distance_meters |
Dystans pokonany podczas przejścia. |
traffic_info_unavailable |
Jeśli żądanie informacji o ruchu jest wysyłane przez interfejs |
delay_duration |
Suma czasów opóźnienia zastosowanych do tego przejścia. W razie potrzeby opóźnienie zaczyna się dokładnie |
break_duration |
Suma czasu trwania przerw występujących podczas tego przejścia (jeśli mają miejsce). Szczegółowe informacje o godzinie i czasie trwania każdej przerwy są przechowywane w usłudze |
wait_duration |
Czas oczekiwania podczas tego przejścia. Czas oczekiwania odpowiada czasowi bezczynności i nie uwzględnia czasu przerwy. Pamiętaj też, że ten czas oczekiwania można podzielić na kilka niesąsiadujących ze sobą przedziałów. |
total_duration |
Całkowity czas trwania przejścia podany dla wygody użytkowników. Jest równa:
|
start_time |
Godzina rozpoczęcia tego przejścia. |
route_polyline |
Zakodowana reprezentacja trasy łamanej, która odbywa się podczas przejścia. To pole jest wypełniane tylko wtedy, gdy |
vehicle_loads |
Liczba ładunków pojazdów podczas tej zmiany w przypadku każdego typu, który pojawia się w dokumencie Obciążenia podczas pierwszego przejścia to początkowe obciążenie na trasie pojazdu. Następnie po każdej wizycie |
VehicleLoad
Raportuje rzeczywiste obciążenie pojazdu w pewnym punkcie trasy dla danego typu (patrz: Transition.vehicle_loads
).
Pola | |
---|---|
amount |
Obciążenie pojazdu określonego typu. Jednostka obciążenia jest zwykle określana przez typ. Zobacz |
Wejdź na
Wizyta wykonana podczas trasy. Ta wizyta odpowiada odbiorze lub dostawie produktu Shipment
.
Pola | |
---|---|
shipment_index |
Indeks pola |
is_pickup |
Jeśli ma wartość prawda, wizyta odpowiada odbiorowi |
visit_request_index |
Indeks |
start_time |
Godzina rozpoczęcia wizyty. Pamiętaj, że pojazd może przyjechać do miejsca wizyty wcześniej. Czas jest zgodny z tym ustawieniem: |
load_demands |
Łączne zapotrzebowanie na wizytę po stronie jako suma przesyłki i żądania wizyty |
detour |
Dodatkowy czas odjazdu ze względu na przesyłki odwiedzone na trasie przed wizytą i potencjalny czas oczekiwania wynikający z przedziałów czasowych. Jeśli wizyta obejmuje dostawę, zmiana trasy jest obliczana na podstawie odpowiedniej wizyty i równa się:
W innych przypadkach jest obliczany na podstawie
|
shipment_label |
Kopia odpowiedniej wartości |
visit_label |
Kopia odpowiedniej wartości |
ShipmentTypeIncompatibility
Określa niezgodności między przesyłkami w zależności od typu dostawy. 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 o różnych wartościach ( |
incompatibility_mode |
Tryb został zastosowany do niezgodności. |
IncompatibilityMode
Środki transportu określające sposób ograniczenia wyglądu niezgodnych przesyłek na tej samej trasie.
Wartości w polu enum | |
---|---|
INCOMPATIBILITY_MODE_UNSPECIFIED |
Nieokreślony tryb niezgodności. Tej wartości nie należy nigdy używać. |
NOT_PERFORMED_BY_SAME_VEHICLE |
W tym trybie 2 przesyłki o niezgodnych typach nie mogą nigdy korzystać z tego samego pojazdu. |
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY |
W przypadku 2 przesyłek z niezgodnymi typami przesyłek w trybie niezgodności
|
ShipmentTypeRequirement
Określa wymagania dotyczące przesyłek na podstawie atrybutu shipping_type [typ dostawy]. Szczegóły wymagania są określane przez tryb wymagań.
Pola | |
---|---|
required_shipment_type_alternatives[] |
Lista alternatywnych typów dostawy, których wymaga |
dependent_shipment_types[] |
Wszystkie przesyłki określonego typu w polu UWAGA: łańcuchy wymagań, takie jak |
requirement_mode |
Tryb został zastosowany do wymagania. |
RequirementMode
Środki transportu definiujące wygląd przesyłek zależnych na trasie.
Wartości w polu enum | |
---|---|
REQUIREMENT_MODE_UNSPECIFIED |
Tryb nieokreślonych wymagań. Tej wartości nie należy nigdy używać. |
PERFORMED_BY_SAME_VEHICLE |
W tym trybie wszystkie przesyłki „zależne” muszą być przesyłki z tym samym pojazdem, co co najmniej jedna z „wymaganych” przesyłek. |
IN_SAME_VEHICLE_AT_PICKUP_TIME |
W trybie „Zależny” odbiór w przypadku przesyłki musi więc mieć:
|
IN_SAME_VEHICLE_AT_DELIVERY_TIME |
Tak jak wcześniej, z tą różnicą, że w przypadku przesyłki „zależnej” pojazd musi mieć „wymagane” dostawę w momencie dostawy. |
SkippedShipment
Określa szczegóły dotyczące niezrealizowanych dostaw w rozwiązaniu. W prostych przypadkach lub jeśli jesteśmy w stanie określić przyczynę pominięcia, podajemy ją tutaj.
Pola | |
---|---|
index |
Indeks odpowiada indeksowi przesyłki w źródle |
label |
Kopia odpowiedniej wartości |
reasons[] |
Lista powodów, dla których przesyłka została pominięta. Zobacz komentarz powyżej |
Przyczyna
Jeśli będziemy mogli wyjaśnić, dlaczego przesyłka została pominięta, podamy jej przyczynę. Jeśli przyczyna nie jest taka sama w przypadku wszystkich pojazdów, reason
będzie mieć więcej niż 1 element. Pominięta przesyłka nie może mieć zduplikowanych przyczyn, tj. wszystkie pola są takie same 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
}
Pominięta przesyłka jest niezgodna ze wszystkimi pojazdami. Przyczyny mogą być różne w przypadku wszystkich pojazdów, ale w przypadku co najmniej jednego pojazdu „jabłko” zostanie przekroczony limit pojemności „jabłków” (łącznie z pojazdem 1), przekroczona zostanie pojemność co najmniej jednego pojazdu „Gruszki” (w tym pojazd 3) i co najmniej jednego z nich (w tym pojazd 1).
Pola | |
---|---|
code |
Zapoznaj się z komentarzami do kodu. |
example_exceeded_capacity_type |
Jeśli kod przyczyny to |
example_vehicle_index |
Jeśli przyczyna jest związana z niezgodnym pojazdem dostawczym, to pole zawiera indeks jednego odpowiedniego pojazdu. |
Kod
Kod określający typ przyczyny. Porządek ten nie ma sensu. W szczególności nie wskazuje, czy dana przyczyna pojawi się przed inną w rozwiązaniach, jeśli obie mają zastosowanie.
Wartości w polu enum | |
---|---|
CODE_UNSPECIFIED |
Nie należy go nigdy używać. Jeśli nie wiemy, dlaczego przesyłka została pominięta, zwracamy po prostu pusty zestaw powodów. |
NO_VEHICLE |
W tym modelu nie ma pojazdu, który uniemożliwia realizację wszystkich dostaw. |
DEMAND_EXCEEDS_VEHICLE_CAPACITY |
Żądanie przesyłki przekracza pojemność pojazdu w przypadku niektórych typów pojemności, z których jeden to example_exceeded_capacity_type . |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT |
Minimalna odległość niezbędna do realizacji tej przesyłki, tj. od Pamiętaj, że do obliczeń używamy odległości geodezyjnych. |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT |
Minimalny czas potrzebny do realizacji tej dostawy, w tym czas podróży, czas oczekiwania i czas obsługi, przekracza Uwaga: czas podróży oblicza się w najlepszym przypadku, czyli jako odległość geodezyjną x 36 m/s (około 130 km/h). |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TRAVEL_DURATION_LIMIT |
Tak samo jak 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 dostawy w najlepszym przypadku (zobacz CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT , aby obliczyć czas, jeśli rozpocznie się o najwcześniejszym czasie rozpoczęcia: całkowity czas spowoduje, że pojazd zakończy się po najpóźniejszej godzinie zakończenia). |
VEHICLE_NOT_ALLOWED |
Pole allowed_vehicle_indices przesyłki nie jest puste i pojazd do niego nie należy. |
TimeWindow
Przedziały czasu ograniczają czas zdarzenia, np. godzinę przyjazdu podczas wizyty lub godzinę rozpoczęcia i zakończenia pojazdu.
Progi bezterminowego przedziału czasu, start_time
i end_time
, wymuszają wymuszanie najwcześniejszej i ostatniej godziny zdarzenia, np. start_time <= event_time <=
end_time
. Dolna granica okresu nieograniczonego czasu (soft_start_time
) określa, czy zdarzenie ma nastąpić o soft_start_time
lub później. Koszt jest naliczany proporcjonalnie do czasu, po którym następuje zdarzenie soft_start_time. Górna granica okna czasowego (soft_end_time
) określa, że zdarzenie ma nastąpić o soft_end_time
lub wcześniej. Jest to koszt proporcjonalnie do czasu wystąpienia soft_end_time
po wystąpieniu zdarzenia. start_time
, end_time
, soft_start_time
i soft_end_time
powinny mieścić się w globalnych limitach czasowych (patrz ShipmentModel.global_start_time
i ShipmentModel.global_end_time
) i respektować:
0 <= `start_time` <= `soft_start_time` <= `end_time` and
0 <= `start_time` <= `soft_end_time` <= `end_time`.
Pola | |
---|---|
start_time |
Godzina rozpoczęcia twardego przedziału czasu. Jeśli nie określono inaczej, zostanie ustawiona wartość |
end_time |
Godzina zakończenia twardego przedziału czasu. Jeśli nie określono inaczej, zostanie ustawiona wartość |
soft_start_time |
Czas uruchomienia łagodnego w przedziale czasu. |
soft_end_time |
Czas łagodnego zakończenia przedziału czasu. |
cost_per_hour_before_soft_start_time |
Koszt na godzinę dodany do innych kosztów w modelu, jeśli zdarzenie wystąpi przed soft_start_time, jest obliczane jako:
Ten koszt musi być dodatni, a to pole można ustawić tylko wtedy, gdy ustawiono soft_start_time. |
cost_per_hour_after_soft_end_time |
Koszt na godzinę dodany do innych kosztów w modelu, jeśli zdarzenie wystąpi po
Ten koszt musi być dodatni, a to pole można skonfigurować tylko wtedy, gdy ustawiono |
TransitionAttributes
Określa atrybuty przejścia między dwoma kolejnymi wizytami na trasie. Do tego samego przejścia może zastosować kilka funkcji TransitionAttributes
. W takim przypadku wszystkie dodatkowe koszty sumują się i ma zastosowanie najbardziej rygorystyczne ograniczenie lub limit (po naturalnej semantyce „ORAZ”).
Pola | |
---|---|
src_tag |
tagów określających zestaw przejść (src->dst), do których mają zastosowanie te atrybuty. Wizyta źródłowa lub początek pojazdu pasuje do wartości |
excluded_src_tag |
Zobacz |
dst_tag |
Docelowa wizyta lub koniec pojazdu pasuje do wartości |
excluded_dst_tag |
Zobacz |
cost |
Określa koszt wykonania tej zmiany. Jest to ta sama jednostka co wszystkie inne koszty w modelu i nie może być ujemna. Jest on stosowany do wszystkich innych kosztów. |
cost_per_kilometer |
Określa koszt kilometra stosowanego do odległości pokonanej podczas wykonywania tej zmiany. Łączna kwota to |
distance_limit |
Określa limit odległości pokonanej podczas wykonywania tego przejścia. Od 2021 roku obsługiwane są tylko miękkie limity. |
delay |
Określa opóźnienie występujące podczas wykonywania tej operacji przenoszenia. Opóźnienie to zawsze występuje po zakończeniu wizyty źródłowej i przed rozpoczęciem wizyty docelowej. |
Pojazd
Modelowanie pojazdu w problemie z wysyłką. Rozwiązanie problemu dotyczącego dostawy spowoduje utworzenie trasy dla tego pojazdu od start_location
do end_location
. Trasa to sekwencja wizyt (patrz ShipmentRoute
).
Pola | |
---|---|
display_name |
Zdefiniowana przez użytkownika wyświetlana nazwa pojazdu. Może zawierać do 63 znaków i zawierać znaki UTF-8. |
travel_mode |
Tryb podróży, który ma wpływ na drogi dostępne dla pojazdu oraz prędkość. Zobacz też |
start_location |
Lokalizacja geograficzna, w której pojazd rozpoczyna się przed odebraniem przesyłek. Jeśli nie podasz żadnej wartości, pojazd rozpocznie się przy pierwszym odbiorze. Jeśli model dostawy ma czas trwania i macierze odległości, nie należy określać atrybutu |
start_waypoint |
Punkt pośredni reprezentujący lokalizację geograficzną, w której pojazd rozpoczyna się przed odebraniem przesyłek. Jeśli nie podasz wartości |
end_location |
Lokalizacja geograficzna, do której pojazd kończy się po zakończeniu ostatniego |
end_waypoint |
Punkt pośredni reprezentujący lokalizację geograficzną, w której pojazd kończy się po zakończeniu ostatniego |
start_tags[] |
Określa tagi dołączone do początku trasy pojazdu. Puste i zduplikowane ciągi znaków są niedozwolone. |
end_tags[] |
Określa tagi dołączone na końcu trasy pojazdu. Puste i zduplikowane ciągi znaków są niedozwolone. |
start_time_windows[] |
Przedziały czasu, w których pojazd może odjeżdżać z lokalizacji początkowej. Muszą one mieścić się w globalnych limitach czasu (patrz pola Przedziały czasu należące do tego samego pola powtarzanego muszą być rozłączone, tj. żadne przedziały czasu nie mogą się pokrywać z innym lub przylegać do niego i muszą być ułożone chronologicznie. Wartości |
end_time_windows[] |
Przedziały czasu, w których pojazd może dotrzeć do miejsca docelowego. Muszą one mieścić się w globalnych limitach czasu (patrz pola Przedziały czasu należące do tego samego pola powtarzanego muszą być rozłączone, tj. żadne przedziały czasu nie mogą się pokrywać z innym lub przylegać do niego i muszą być ułożone chronologicznie. Wartości |
unloading_policy |
Egzekwowana na pojeździe zasada wyładowywania z pamięci. |
load_limits |
Pojemność pojazdu (np. waga, objętość, liczba palet). Klucze na mapie to identyfikatory typu obciążenia zgodnie z kluczami w polu |
cost_per_hour |
Koszty pojazdu: wszystkie koszty sumują się i muszą mieć taką samą jednostkę jak Koszt za godzinę trasy pojazdu. Ten koszt jest stosowany do łącznego czasu podróży i obejmuje czas podróży, czas oczekiwania i czas wizyty. Użycie dodatku |
cost_per_traveled_hour |
Koszt za godzinę przejazdu na trasie pojazdu. Ten koszt jest stosowany tylko do czasu podróży daną trasą (tj. zarejestrowany w: |
cost_per_kilometer |
Koszt za kilometr na trasie pojazdu. Ten koszt jest stosowany do odległości podawanej w |
fixed_cost |
Jeśli ten pojazd jest używany do obsługi przesyłki, zostanie zastosowany stały koszt. |
used_if_route_is_empty |
To pole dotyczy pojazdów tylko wtedy, gdy na trasie nie jest możliwa obsługa przesyłek. Wskazuje, czy w tym przypadku pojazd należy uznać za używany. Jeśli ma wartość true (prawda), pojazd podróżuje z początku do miejsca docelowego nawet wtedy, gdy nie przyjmuje przesyłek. Pod uwagę brane są też koszty czasu i dystansu wynikające z rozpoczęcia przejazdu –> końcowa podróż. W przeciwnym razie pojazd nie podróżuje od początku do lokalizacji końcowej, a dla tego pojazdu nie ma zaplanowanego |
route_duration_limit |
Limit stosowany do łącznego czasu trwania trasy pojazdu. W przypadku elementu |
travel_duration_limit |
Limit stosowany do czasu podróży na trasie pojazdu. Czas podróży na trasie dla danego elementu |
route_distance_limit |
Limit dotyczący całkowitej odległości na trasie pojazdu. Odległość trasy dla danego elementu |
extra_visit_duration_for_visit_type |
Określa mapę z ciągów znaków visit_types po czasy trwania. Czas trwania jest uzupełniony o czas Jeśli prośba o wizytę ma kilka typów, do każdego z nich na mapie zostanie dodany czas trwania. |
break_rule |
Opisuje harmonogram przerw, który ma być egzekwowany w tym pojeździe. Jeśli pole jest puste, w tym pojeździe nie zostaną zaplanowane żadne przerwy. |
label |
Określa etykietę tego pojazdu. Ta etykieta jest zgłaszana w odpowiedzi jako |
ignore |
Jeśli ma wartość Prawda, Jeśli przesyłka jest wykonywana przez zignorowany pojazd w Jeśli przesyłka jest wykonywana przez zignorowany pojazd w |
travel_duration_multiple |
Określa mnożnik, który można wykorzystać, aby wydłużyć lub skrócić czas podróży tego pojazdu. Na przykład ustawienie wartości 2,0 oznacza, że pojazd jest wolniejszy i ma czas podróży dwukrotnie dłuższy niż w przypadku standardowych pojazdów. Ta liczba nie ma wpływu na długość wizyty. Ma to wpływ na koszty, jeśli określono OSTRZEŻENIE: po zastosowaniu tej wielokrotności czasu podróży czas podróży zostanie zaokrąglony do najbliższej sekundy, ale przed wykonaniem jakichkolwiek operacji liczbowych, dlatego małe wielokrotność może spowodować utratę dokładności. Zobacz też |
DurationLimit
Limit określający maksymalny czas trwania trasy pojazdu. Może być twarde lub miękkie.
Gdy zdefiniowano pole łagodnego limitu, należy zdefiniować razem zarówno próg pozornego limitu, jak i powiązany z nim koszt.
Pola | |
---|---|
max_duration |
Sztywny limit ograniczający czas trwania do maksymalnego parametru max_duration. |
soft_max_duration |
Poboczny limit nie powoduje egzekwowania maksymalnego czasu trwania, ale w przypadku naruszenia powoduje naliczanie opłat. Ten koszt jest sumowany na inne koszty zdefiniowane w modelu z tą samą jednostką. Jeśli zostanie zdefiniowana, |
quadratic_soft_max_duration |
Poboczny limit nie wymusza maksymalnego czasu trwania, ale w przypadku naruszenia powoduje naliczenie kosztów, których długość jest równa kwadratowemu czasowi. Ten koszt jest sumowany na inne koszty zdefiniowane w modelu z tą samą jednostką. Jeśli zostanie zdefiniowana,
|
cost_per_hour_after_soft_max |
Koszt za godzinę wynikający z naruszenia progu
Koszt nie może być liczbą ujemną. |
cost_per_square_hour_after_quadratic_soft_max |
Koszt za godzinę kwadratową w przypadku naruszenia progu Jeśli czas trwania nie przekracza progu, dodatkowy koszt wynosi 0. W przeciwnym razie koszt zależy od czasu trwania w następujący sposób:
Koszt nie może być liczbą ujemną. |
LoadLimit
Określa limit ładunku obowiązujący w przypadku pojazdu, np. „Ta ciężarówka może być maks. 3500 kg”. Zobacz load_limits
.
Pola | |
---|---|
soft_max_load |
Niewielka granica obciążenia. Zobacz |
cost_per_unit_above_soft_max |
Jeśli obciążenie przekroczy |
start_load_interval |
Dopuszczalny odstęp czasu ładowania pojazdu na początku trasy. |
end_load_interval |
Dopuszczalny odstęp czasu ładowania pojazdu na końcu trasy. |
max_load |
Maksymalna akceptowalna ilość obciążenia. |
Odstęp
Przedział czasu obciążenia akceptowalnego obciążenia.
Pola | |
---|---|
min |
Minimalne akceptowalne obciążenie. Musi wynosić ≥ 0. Jeśli podasz oba, |
max |
Maksymalne akceptowane obciążenie. Musi wynosić ≥ 0. Jeśli nie określono inaczej, maksymalne obciążenie nie jest ograniczone przez ten komunikat. Jeśli podasz oba, |
TravelMode
Środki transportu dostępne dla pojazdów.
Powinien to być podzbiór trybów podróży preferowanego interfejsu API Google Maps Platform Routes. Więcej informacji znajdziesz na stronie 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, odpowiednik DRIVING . |
DRIVING |
Tryb podróży odpowiadający wskazówkom dojazdu (samochód, ...). |
WALKING |
Tryb podróży odpowiadający trasom pieszym. |
UnloadingPolicy
Zasady dotyczące sposobu wyładowywania pojazdu. Dotyczy to tylko przesyłek obejmujących zarówno odbiór, jak i dostawę.
Inne dostawy są bezpłatne w dowolnym miejscu na trasie, niezależnie od: unloading_policy
.
Wartości w polu enum | |
---|---|
UNLOADING_POLICY_UNSPECIFIED |
Nieokreślone zasady wyładowywania – dostawy muszą następować zaraz po ich odbiorze. |
LAST_IN_FIRST_OUT |
Dostawy muszą mieć odwrotną kolejność |
FIRST_IN_FIRST_OUT |
Dostawy muszą mieć miejsce w tym samym zamówieniu co odbiór |
Punkt pośredni
Obejmuje punkt pośredni. Punkty pośrednie oznaczają lokalizacje przyjazdu i odjazdu oraz lokalizację początkową i końcową pojazdów.
Pola | |
---|---|
side_of_road |
Opcjonalnie. Wskazuje, że lokalizacja tego punktu pośredniego ma umożliwiać zatrzymywanie pojazdu po określonej stronie drogi. Po ustawieniu tej wartości trasa przechodzi przez daną lokalizację, dzięki czemu pojazd może się zatrzymać na boku drogi, na którą kierowana jest ta lokalizacja, od środka drogi. Ta opcja nie działa w trybie podróży „PIESZ”. |
Pole sumy location_type . Różne sposoby przedstawiania lokalizacji. location_type może być tylko jedną z tych wartości: |
|
location |
Punkt określony za pomocą współrzędnych geograficznych, wraz z opcjonalnym nagłówkiem. |
place_id |
Identyfikator miejsca POI powiązany z punktem na trasie. |