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
- Czas jest podawany w czasie uniksowym: sekundy od 1970-01-01T00:00:00+00:00.
- sekundy muszą mieć format [0, 253402300799], np. [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ą mieć format [0, 253402300799], np. [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 się mieścić w zakresie [-90,0, 90,0].
- długość geograficzna musi się mieścić w zakresie [-180,0, 180,0].
- co najmniej jedna z długości i szerokości geograficznej musi być różna od zera.
BatchOptimizeTours |
---|
Optymalizuje wycieczki samochodowe dla co najmniej 1 wiadomości w Jest to długo trwająca operacja (LRO). Dane wejściowe do optymalizacji (wiadomości:
|
OptimizeTours |
---|
Wysyła Model Celem jest przydzielenie zasobów typu
|
AggregatedMetrics
Zbiorcze dane dotyczące wskaźnika ShipmentRoute
(odpowiada dla OptimizeToursResponse
dla wszystkich elementów Transition
lub Visit
(odp. dla wszystkich elementów ShipmentRoute
).
Pola | |
---|---|
performed_shipment_count |
Liczba zrealizowanych przesyłek. Pamiętaj, że para odbioru i dostawy liczy się tylko raz. |
travel_duration |
Całkowity czas podróży dla danej trasy lub rozwiązania. |
wait_duration |
Całkowity czas oczekiwania dla trasy lub rozwiązania. |
delay_duration |
Całkowity czas opóźnienia dla trasy lub rozwiązania. |
break_duration |
Łączny czas trwania przerwy dla trasy lub rozwiązania. |
visit_duration |
Łączny czas trwania wizyty dla trasy lub rozwiązania. |
total_duration |
Łączny czas trwania powinien być równy sumie wszystkich okresów powyżej. W przypadku tras odpowiada też:
|
travel_distance_meters |
Całkowita odległość pokonywana w przypadku danej trasy lub rozwiązania. |
max_loads |
Maksymalne obciążenie osiągnięte na całej trasie (rozwiązanie odpowiedzi) dla każdej wielkości na tej trasie (rozwiązanie odpowiedzi), obliczone jako maksymalna wartość na całej trasie |
BatchOptimizeToursMetadata
Ten typ nie zawiera pól.
Metadane operacji dotyczące BatchOptimizeToursRequest
wywołań.
BatchOptimizeToursRequest
Żądanie zbiorczej optymalizacji wycieczek jako operacji asynchronicznej. Każdy plik wejściowy powinien zawierać 1 element OptimizeToursRequest
, a każdy plik wyjściowy – 1 element OptimizeToursResponse
. Żądanie zawiera informacje potrzebne do odczytu i zapisu oraz analizy plików. Wszystkie pliki wejściowe i wyjściowe powinny należeć do tego samego projektu.
Pola | |
---|---|
parent |
Wymagane. Wybierz docelowy projekt i lokalizację, aby zadzwonić. Format: * Jeśli nie podasz lokalizacji, region zostanie wybrany automatycznie. |
model_configs[] |
Wymagane. Informacje wejściowe/wyjściowe dla każdego modelu zakupu, np. ścieżki plików i formaty danych. |
AsyncModelConfig
Informacje dotyczące asynchronicznego rozwiązania jednego modelu optymalizacji.
Pola | |
---|---|
display_name |
Opcjonalnie: Zdefiniowana przez użytkownika nazwa modelu, która może być używana przez użytkowników jako alias do śledzenia modeli. |
input_config |
Wymagane. Informacje o modelu wejściowym. |
output_config |
Wymagane. Wymagane informacje o lokalizacji wyjściowej. |
BatchOptimizeToursResponse
Ten typ nie zawiera pól.
Odpowiedź na: BatchOptimizeToursRequest
. Jest on zwracany w ramach długo trwającej operacji po jej zakończeniu.
BreakRule
Reguły generowania przerw na przejazd pojazdem (np. przerwy na lunch). Przerwa to ciągły okres, w którym pojazd pozostaje nieaktywny w swojej aktualnej pozycji i nie może wykonać żadnej wizyty. Przerwa może wystąpić:
- w trakcie podróży między dwiema wizytami (obejmuje to czas bezpośrednio przed wizytą lub tuż po niej, ale nie w jej trakcie). W takim przypadku wydłuża on odpowiedni czas przewozu między kolejnymi wizytami.
- lub przed uruchomieniem pojazdu (pojazd może nie uruchomić się w trakcie przerwy) – w takim przypadku nie ma to wpływu na czas uruchomienia pojazdu.
- lub po zakończeniu pojazdu (edytuj, z godziną zakończenia pojazdu).
Pola | |
---|---|
break_requests[] |
Kolejność przerw. Zobacz wiadomość: |
frequency_constraints[] |
Może obowiązywać kilka zasad ( |
BreakRequest
Sekwencja przerw (tj. ich liczba i kolejność) musi być wcześniej znana. Powtarzające się elementy BreakRequest
definiują 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 zamówieniem (jest to zaznaczone).
Pola | |
---|---|
earliest_start_time |
Wymagane. Dolna granica (włącznie) na początku przerwy. |
latest_start_time |
Wymagane. Górna granica (włącznie) na początku przerwy. |
min_duration |
Wymagane. Minimalny czas trwania przerwy. Musi być liczbą dodatnią. |
FrequencyConstraint
Można jeszcze bardziej ograniczyć częstotliwość i czas trwania przerw określonych powyżej przez wymuszenie minimalnej częstotliwości, na przykład „Co 12 godzin musi być przerwa co najmniej 1 godzinę”. Zakładając, że można to zinterpretować w ten sposób: „W każdym przesuwającym się przedziale czasu wynoszącym 12 godzin musi istnieć co najmniej jedna przerwa o długości co najmniej 1 godziny”, przykłada prezentuje się tak: 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ązaniach uwzględniają wszystkie takie ograniczenia, a także przedziały czasowe i minimalne czasy trwania określone w zasadzie BreakRequest
.
FrequencyConstraint
może w praktyce mieć zastosowanie do przerw, które nie następują po sobie. Na przykład ten harmonogram uwzględnia zasadę „1 godz. co 12 godz.” przykład:
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 zakres czasu trwania dowolnego przedziału czasu na trasie, który nie zawiera przynajmniej częściowej 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ć UNSPECIFIED. |
JSON |
w formacie JavaScript Object Notation. |
PROTO_TEXT |
Format tekstowy buforów protokołu. Więcej informacji: https://protobuf.dev/reference/protobuf/textformat-spec/ |
DistanceLimit
Ograniczenie określające maksymalną odległość, jaką można przebyć. Może być twarda lub miękka.
Jeśli zdefiniowany jest limit tymczasowy, muszą być zdefiniowane zarówno soft_max_meters
, jak i cost_per_kilometer_above_soft_max
, i nie mogą być ujemne.
Pola | |
---|---|
max_meters |
Stały limit ogranicza odległość do maksymalnej wartości max_meters. Limit nie może być ujemny. |
soft_max_meters |
Limit częściowy nie egzekwuje maksymalnego limitu odległości, ale jego naruszenie powoduje naliczenie kosztów, które wliczają się do innych kosztów określonych w modelu z tą samą jednostką. Jeśli zdefiniowana wartość parametru soft_max_meters jest mniejsza niż wartość max_meters, musi być ona nieujemna. |
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 będą zapisywane 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 Google Cloud Storage w formacie |
InjectedSolutionConstraint
Rozwiązanie podane w żądaniu, w tym informacje o tym, które wizyty należy ograniczyć i jak należy to robić.
Pola | |
---|---|
routes[] |
Trasy roztworu 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 dla: |
skipped_shipments[] |
Pominięto dostawy roztworu do wstrzykiwania. Niektóre z nich mogą zostać pominięte w pierwotnym rozwiązaniu. Zobacz pole |
constraint_relaxations[] |
W przypadku zerowej lub większej liczby grup pojazdów określa, kiedy i jak bardzo złagodzą 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 progi i poziomy ograniczeń dotyczących wizyt. Przesyłki wymienione w polu skipped_shipment
nie można pominąć. tzn. nie można ich wykonać.
Pola | |
---|---|
relaxations[] |
Wszystkie złagodzenia ograniczeń dotyczących 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, godzina rozpoczęcia i sekwencja wszystkich wizyt w dniu routes
są w pełni ograniczone i nie można dodawać do tych tras nowych wizyt ani dodawać do nich nowych wizyt. Poza tym godzina rozpoczęcia i zakończenia pojazdu w regionie routes
jest całkowicie ograniczona, chyba że pojazd jest pusty (np. nie ma wizyt, a wartość used_if_route_is_empty
w modelu ma wartość Fałsz).
relaxations(i).level
określa poziom złagodzenia ograniczeń stosowany do wizyty #j, która jest spełniona:
route.visits(j).start_time >= relaxations(i).threshold_time
ORAZj + 1 >= relaxations(i).threshold_visit_count
I analogicznie, uruchomienie pojazdu jest ustawione na relaxations(i).level
, jeśli spełnione są następujące warunki:
vehicle_start_time >= relaxations(i).threshold_time
ORAZrelaxations(i).threshold_visit_count == 0
, a koniec pojazdu jest ustawiony narelaxations(i).level
, jeśli są spełnione:vehicle_end_time >= relaxations(i).threshold_time
ORAZroute.visits_size() + 1 >= relaxations(i).threshold_visit_count
Aby zastosować poziom relaksacji, jeśli wizyta spełnia threshold_visit_count
LUB threshold_time
, dodaj 2 obiekty relaxations
z tymi samymi wartościami level
: jeden z ustawionym tylko parametrem threshold_visit_count
, a drugi z tylko threshold_time
. Jeśli wizyta spełnia warunki wielu relaxations
, stosowany jest poziom najbardziej zrelaksowany. W efekcie, gdy pojazd zaczyna się od zwiedzania trasy, aż do jego końca, poziom relaksacji staje się bardziej relaksujący: tj. poziom relaksacji nie maleje w miarę postępów trasy.
Czas i sekwencja wizyt na trasie, które nie spełniają warunków progu żadnego z relaxations
, są w pełni ograniczone i nie można do nich dodawać żadnych wizyt. Ponadto, jeśli początek lub koniec pojazdu nie spełnia warunków relaksacji, czas jest ustalony, chyba że pojazd jest pusty.
Pola | |
---|---|
level |
Poziom złagodzenia ograniczeń stosowany, gdy spełnione są warunki na poziomie |
threshold_time |
Czas, po którym lub po upływie tego czasu może zostać zastosowane złagodzenie |
threshold_visit_count |
Liczba wizyt, podczas których lub po upływie których może zostać zastosowane złagodzenie Jeśli ma wartość |
Poziom
Wyraża różne poziomy złagodzeń ograniczeń, które są stosowane do wizyty i te, które nastąpią po spełnieniu warunków progowych.
Poniższe wyliczenie ułożone jest w kolejności rosnącej złagodzenia.
Wartości w polu enum | |
---|---|
LEVEL_UNSPECIFIED |
Domyślny poziom relaksacji: żadne ograniczenia nie są łagodzone, tj. wszystkie wizyty są w pełni ograniczone. Ta wartość nie może być bezpośrednio używana w elemencie |
RELAX_VISIT_TIMES_AFTER_THRESHOLD |
Godziny rozpoczęcia i zakończenia wizyt w pojeździe zostaną skrócone, ale każda wizyta będzie powiązana z tym samym pojazdem i należy przestrzegać jej sekwencji: nie można wstawiać pomiędzy nimi ani przed nimi. |
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD |
Tak samo jak w przypadku witryny RELAX_VISIT_TIMES_AFTER_THRESHOLD , ale sekwencja wizyt jest też spokojna: wizyty są powiązane z pojazdem użytkownika. |
RELAX_ALL_AFTER_THRESHOLD |
Tak samo jak w przypadku usługi RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD , ale pojazd jest też w prostym stylu: wizyty są całkowicie bezpłatne po osiągnięciu progu lub później i mogą stać się nieskuteczne. |
InputConfig
Podaj dane wejściowe dla [BatchOptimizeTours][google.maps.routeOptimization.v1.RouteOptimizationService.BatchOptimizeTours].
Pola | |
---|---|
data_format |
Wymagane. Format danych wejściowych. |
Pole sumy 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
Obejmuje lokalizację (punkt geograficzny i opcjonalny nagłówek).
Pola | |
---|---|
lat_lng |
Współrzędne geograficzne punktu pośredniego. |
heading |
Nagłówek kompasu powiązany z kierunkiem ruchu. Ta wartość służy do określania strony drogi na potrzeby odbioru i dostawy. Wartości nagłówka mogą należeć do zakresu od 0 do 360, gdzie 0 oznacza kierunek północny, 90 oznacza kierunek kierunku północnego itd. |
OptimizeToursRequest
Prośba o przekazanie do rozwiązania optymalizacyjnego wycieczki, które określa model dostawy do rozwiązania oraz parametry optymalizacji.
Pola | |
---|---|
parent |
Wymagane. Wybierz docelowy projekt lub lokalizację, aby zadzwonić. Format: * Jeśli nie podasz lokalizacji, region zostanie wybrany automatycznie. |
timeout |
Jeśli ten czas oczekiwania jest ustawiony, serwer zwraca odpowiedź przed upłynięciem limitu czasu lub upłynięciem terminu dla żądań synchronicznych (w zależności od tego, co nastąpi wcześniej). W przypadku żądań asynchronicznych serwer wygeneruje rozwiązanie (jeśli będzie to możliwe) przed upływem czasu oczekiwania. |
model |
Model dostawy do rozwiązania. |
solving_mode |
Domyślnie ustawiony jest tryb zadań |
search_mode |
Tryb wyszukiwania użyty do rozwiązania żądania. |
injected_first_solution_routes[] |
Pomaganie algorytmowi optymalizacji w znalezieniu pierwszego rozwiązania podobnego do poprzedniego. Podczas tworzenia pierwszego rozwiązania model jest ograniczony. Przesyłki, które nie zostały wykonane na danej trasie, są domyślnie pominięte w pierwszym rozwiązaniu, ale można je realizować w kolejnych rozwiązaniach. Rozwiązanie musi spełniać pewne podstawowe założenia dotyczące poprawności:
Jeśli wstrzyknięte rozwiązanie nie jest możliwe, błąd weryfikacji nie musi być zwracany i zamiast niego może pojawić się błąd wskazujący na niewykonalność. |
injected_solution_constraint |
Ogranicz algorytm optymalizacji, aby znaleźć ostateczne rozwiązanie podobne do poprzedniego. Na przykład tej opcji można użyć do zablokowania części tras, które zostały już zakończone lub są jeszcze zakończone, ale nie można ich modyfikować. Jeśli wstrzyknięte rozwiązanie nie jest możliwe, błąd weryfikacji nie musi być zwracany i zamiast niego może pojawić się błąd wskazujący na niewykonalność. |
refresh_details_routes[] |
Jeśli pole nie jest puste, podane trasy zostaną odświeżone bez zmiany bazowej sekwencji wizyt czy czasów podróży. Zostaną zaktualizowane tylko inne szczegóły. Nie rozwiązuje to problemów z modelem. Od 2020 roku wypełnia tylko linie łamane niepustych tras i wymaga, aby atrybut Pola Tego pola nie można używać razem z polami
|
interpret_injected_solutions_using_labels |
Jeśli ma wartość prawda:
Ta interpretacja ma zastosowanie do pól Jeśli wartość to prawda, etykiety z tych kategorii mogą pojawić się w danej kategorii co najwyżej raz:
Jeśli wartość Usunięcie wizyt na trasie lub całych tras z wstrzykiwanego rozwiązania może mieć wpływ na domniemane ograniczenia, co może prowadzić do zmiany rozwiązania, błędów weryfikacji lub niewykonalności. UWAGA: rozmówca musi upewnić się, że każde |
consider_road_traffic |
Przy obliczaniu obliczania pól |
populate_polylines |
Jeśli ma wartość prawda, linie łamane będą wypełniane w odpowiedzi |
populate_transition_polylines |
Jeśli ma wartość prawda, linie łamane zostaną wypełnione w odpowiedzi |
allow_large_deadline_despite_interruption_risk |
Jeśli ta opcja jest ustawiona, termin żądania (patrz https://grpc.io/blog/deadlines) może wynosić maksymalnie 60 minut. W przeciwnym razie maksymalny termin to tylko 30 minut. Pamiętaj, że żądania długotrwałe wiążą się ze znacznie większym (ale i mniejszym) ryzykiem przerw w działaniu. |
use_geodesic_distances |
Jeśli wartość to prawda, odległości będą obliczane na podstawie odległości geodezyjnych zamiast z Map Google, a czasy podróży będą obliczane na podstawie odległości geodezyjnych z prędkością określoną przez |
label |
Etykieta, która pozwala zidentyfikować to żądanie. Zostanie ona zgłoszona w |
geodesic_meters_per_second |
Jeśli |
max_validation_errors |
Skraca liczbę zwróconych błędów weryfikacji. Błędy te są zwykle dołączone do ładunku błędu Błędn_AR jako szczegółowe informacje o błędzie BadRequest (https://cloud.google.com/apis/design/errors#error_details), chyba że troubleshooting_mode=VALIDATE_ONLY: zobacz pole |
SearchMode
Tryb określający działanie wyszukiwania, kompensujący czas oczekiwania z jakością rozwiązania. We wszystkich trybach egzekwowany jest globalny termin żądań.
Wartości w polu enum | |
---|---|
SEARCH_MODE_UNSPECIFIED |
Nieokreślony tryb wyszukiwania, odpowiednik funkcji RETURN_FAST . |
RETURN_FAST |
Zatrzymaj wyszukiwanie po znalezieniu pierwszego dobrego rozwiązania. |
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 rozwiązanie. Jeśli żądanie będzie nieprawidłowe, we wszystkich trybach oprócz VALIDATE_ONLY
, wystąpi błąd INVALID_REQUEST
. Informacje o ograniczaniu liczby zwracanych błędów znajdziesz w sekcji max_validation_errors
.
Wartości w polu enum | |
---|---|
DEFAULT_SOLVE |
Rozwiąż model. |
VALIDATE_ONLY |
Sprawdza tylko model bez rozwiązania problemu: wypełnia jak najwięcej parametrów OptimizeToursResponse.validation_errors . |
DETECT_SOME_INFEASIBLE_SHIPMENTS |
Wypełnia tylko WAŻNE: w tym miejscu zwracane są nie wszystkie niemożliwe do zrealizowania przesyłki, a jedynie te, które podczas wstępnego przetwarzania zostały uznane za niemożliwe. |
OptimizeToursResponse
Odpowiedź po rozwiązaniu problemu optymalizacji wycieczki obejmującego trasy, które należy pokonywać w przypadku każdego pojazdu, pominięte przesyłki i całkowity koszt rozwiązania.
Pola | |
---|---|
routes[] |
trasy wyznaczone dla każdego pojazdu; i-ta trasa odpowiada i-temu 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. Zobacz „WIELE BŁĘDÓW” wyjaśnienie dotyczące komunikatu |
metrics |
Czas trwania, odległość i wskaźniki wykorzystania w tym rozwiązaniu. |
Dane
Zbiorcze wskaźniki, zagregowane dla wszystkich tras.
Pola | |
---|---|
aggregated_route_metrics |
Dane zagregowane na trasach. Poszczególne dane to suma (lub maksimum, w przypadku obciążeń) we wszystkich polach |
skipped_mandatory_shipment_count |
Liczba pominiętych przesyłek obowiązkowych. |
used_vehicle_count |
Liczba wykorzystywanych pojazdów. Uwaga: jeśli trasa pojazdu jest pusta, a |
earliest_vehicle_start_time |
Najwcześniejszy czas uruchomienia używanego pojazdu, obliczany jako minimum dla wszystkich używanych pojazdów w okresie |
latest_vehicle_end_time |
Najnowsza godzina zakończenia działania używanego pojazdu, obliczana jako maksymalna liczba wszystkich używanych pojazdów w okresie |
costs |
Koszt rozwiązania z podziałem na pola żądania związane z kosztami. Klucze to ścieżki proto, względem danych wejściowych OptimizeToursRequest, np. „model.shipments.pickups.cost”, a wartości to łą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 ramach danego rozwiązania. Wszystkie koszty zdefiniowane w modelu są uwzględnione w szczegółowym raporcie z wyjątkiem kosztów związanych z atrybutami przejścia, które od 2022 roku 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 weryfikowania elementu OptimizeToursRequest
.
Pola | |
---|---|
code |
Błąd weryfikacji jest definiowany przez parę ( Inne pola (poniżej) zawierają więcej informacji o błędzie. WIELU BŁĘDÓW: jeśli wystąpiło wiele błędów, proces weryfikacji próbuje zwrócić kilka z nich. Ten proces, podobnie jak w przypadku kompilatora, nie jest idealny. Niektóre błędy weryfikacji są „krytyczne”, co oznacza, że zatrzymują cały proces weryfikacji. Dotyczy to między innymi Stabilność: rozwiązania REFERENCYJNE: lista wszystkich par (kod, nazwa):
|
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. W przypadku np. w przypadku pojazdu nr 4 i pierwszej dostawy nr 2 można wykonać te czynności:
Pamiętaj jednak, że moc zbioru funkcji |
error_message |
Zrozumiały dla człowieka ciąg tekstowy opisujący błąd. Między Stabilność: niestabilna: komunikat o błędzie powiązany z danym parametrem |
offending_values |
Może zawierać wartości pól. Nie zawsze jest to możliwe. Nie należy polegać wyłącznie na tym narzędziu i używać go wyłącznie do ręcznego debugowania modelu. |
FieldReference
Określa kontekst błędu weryfikacji. FieldReference
zawsze odnosi się do danego pola w tym pliku i ma taką samą strukturę hierarchiczną. Możemy na przykład określić element nr 2 w atrybucie 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 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 |
Wymagane. Format danych wyjściowych. |
Pole sumy destination . Wymagane. destination może mieć tylko jedną z tych wartości: |
|
gcs_destination |
Lokalizacja w Google Cloud Storage, w której będą zapisywane dane wyjściowe. |
Wysyłka
Dostawa pojedynczego produktu, od odbioru do jednej dostawy. Aby przesyłka została uznana za wykonaną, unikalny pojazd musi odwiedzić jedno z miejsc odbioru (i odpowiednio zmniejszyć ilość zapasowego), a następnie odwiedzić jedno z miejsc dostawy (i w związku z tym odpowiednio zwiększyć pojemność zapasową).
Pola | |
---|---|
display_name |
Zdefiniowana przez użytkownika wyświetlana nazwa przesyłki. Może składać się z maksymalnie 63 znaków i zawierać znaki UTF-8. |
pickups[] |
Zestaw alternatywnych opcji odbioru powiązanych z dostawą. Jeśli go nie podasz, pojazd musi udać się tylko do lokalizacji odpowiadającej dostawcom. |
deliveries[] |
Zestaw alternatywnych opcji dostawy powiązanych z dostawą. Jeśli go nie podasz, pojazd musi udać się tylko do lokalizacji odpowiadającej punktom odbioru. |
load_demands |
Obciążenie przesyłki (np. waga, objętość, liczba palet itd.). Klucze na mapie powinny być identyfikatorami opisującymi rodzaj danego obciążenia, najlepiej uwzględniając też jednostki. Na przykład: „weight_kg”, „volume_gallons”, „pallet_count” itp. Jeśli dany klucz nie pojawi się na mapie, odpowiadające mu obciążenie zostanie uznane za puste. |
allowed_vehicle_indices[] |
Zestaw pojazdów, które mogą zrealizować tę przesyłkę. Jeśli pole jest puste, mogą go wykonywać wszystkie pojazdy. Pojazdy są podawane według indeksu na liście |
costs_per_vehicle[] |
Określa koszt, jaki jest naliczany w momencie dostarczenia tej przesyłki przez każdy pojazd. Jeśli pole jest określone, musi zawierać KAŻDY:
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ą ścieżką od odbioru do dostawy. Jeśli jest określona, nie może być ujemna, a przesyłka musi zawierać co najmniej informacje o odbiorze i dostawie. Na przykład nie może to być najkrótszy czas, jaki zajmie Ci przejście z wybranej opcji odbioru bezpośrednio do wybranej opcji dostawy. Następnie ustawienie zasady
Jeśli w przypadku tej samej przesyłki określono zarówno limity względne, jak i bezwzględne, dla każdej możliwej pary odbioru/dostawy stosowany jest bardziej restrykcyjny limit. Od 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 trwania od rozpoczęcia odbioru do rozpoczęcia dostawy. Jeśli jest określona, nie może być ujemna, a przesyłka musi zawierać co najmniej informacje o odbiorze i dostawie. Nie zależy to od tego, które alternatywne rozwiązania zostaną wybrane do odbioru i dostawy, ani od szybkości pojazdu. Można to określić razem z maksymalnymi ograniczeniami objazdu, ponieważ rozwiązanie będzie przestrzegać obu specyfikacji. |
shipment_type |
Niepusty ciąg znaków określający „typ” za tę przesyłkę. Ta funkcja może służyć do definiowania niezgodności lub wymagań między Różni się od |
label |
Określa etykietę wysyłki. Ta etykieta jest podawana w odpowiedzi w |
ignore |
Jeśli tak, pomiń tę przesyłkę, ale nie stosuj Zignorowanie dostawy powoduje błąd weryfikacji, gdy w modelu występują Dopuszczalne jest ignorowanie wysyłki w |
penalty_cost |
Jeśli dostawa nie zostanie ukończona, kara zostanie dodana do całkowitego kosztu tras. Wysyłka jest uznawana za zrealizowaną, jeśli dostępna jest jedna z alternatywnych opcji odbioru lub dostawy. Koszt może być wyrażony w tej samej jednostce, która jest używana we wszystkich innych polach związanych z kosztem w modelu, i musi być dodatni. WAŻNE: jeśli ta kara nie zostanie określona, uznamy ją za nieskończoną, co oznacza, że dostawa musi zostać zrealizowana. |
pickup_to_delivery_relative_detour_limit |
Określa maksymalny względny czas objazdu w porównaniu z najkrótszą ścieżką od odbioru do dostawy. Jeśli jest określona, nie może być ujemna, a przesyłka musi zawierać co najmniej informacje o odbiorze i dostawie. Na przykład nie może to być najkrótszy czas, jaki zajmie Ci przejście z wybranej opcji odbioru bezpośrednio do wybranej opcji dostawy. Następnie ustawienie zasady
Jeśli w przypadku tej samej przesyłki określono zarówno limity względne, jak i bezwzględne, dla każdej możliwej pary odbioru/dostawy stosowany jest bardziej restrykcyjny limit. Od 2017 r. objazdy są obsługiwane tylko wtedy, gdy czas podróży nie zależy od pojazdów. |
Wczytaj
Podczas wizyty może zostać dodana do ładunku pojazdu wstępnie określona kwota (jeśli jest to odbiór) lub odejmowana w przypadku dostawy. Tę kwotę definiuje ten komunikat. Zobacz load_demands
.
Pola | |
---|---|
amount |
Obciążenie pojazdu wykonującego daną wizytę, o ile będzie się ono zmieniać. Jest to liczba całkowita, dlatego zaleca się wybranie odpowiedniej jednostki, aby uniknąć utraty dokładności. Wartość musi być ≥ 0. |
VisitRequest
Prośba o zwiedzanie, którą może zrealizować pojazd: określona lokalizacja geograficzna (lub dwie, patrz poniżej), godziny otwarcia i zamknięcia wyrażone w przedziałach czasowych oraz czas trwania obsługi (czas spędzony przez pojazd po dotarciu do miejsca odbioru lub odesłaniu towarów).
Pola | |
---|---|
arrival_location |
Lokalizacja geograficzna, do której przyjeżdża pojazd podczas wykonywania tej czynności ( |
arrival_waypoint |
Punkt pośredni, do którego przyjeżdża pojazd, wykonując tę czynność |
departure_location |
Lokalizacja geograficzna, z której pojazd odjeżdża po ukończeniu tego celu: |
departure_waypoint |
Punkt pośredni, do którego odjeżdża pojazd po ukończeniu tego celu: |
tags[] |
Określa tagi dołączone do żądania wizyty. Puste lub zduplikowane ciągi znaków są niedozwolone. |
time_windows[] |
Przedziały czasu, które ograniczają godzinę przybycia podczas wizyty. Pamiętaj, że pojazd może odjechać poza przedział czasu przyjazdu, tj. godzina przyjazdu + czas przyjazdu nie muszą znajdować się w określonym przedziale czasu. Może to spowodować wydłużenie czasu oczekiwania, jeśli pojazd dotrze do Brak wartości Przedziały czasu muszą być rozłączne, tzn. żadne przedziały czasu nie mogą na siebie nachodzić ani przylegać do siebie, a także muszą rosnąć. Wartości |
duration |
Długość wizyty, tj. czas spędzony w samochodzie między przyjazdem a odjazdem (należy dodać do możliwego czasu oczekiwania; patrz |
cost |
Koszt obsługi tej prośby o wizytę w przypadku trasy pojazdu. Umożliwia ona pokrycie różnych kosztów każdego alternatywnego odbioru lub dostawy przesyłki. Koszt musi być w tej samej jednostce co |
load_demands |
Wczytywanie żądań dotyczących tej wizyty. Działa ono tak samo jak pole |
visit_types[] |
Określa typy wizyty. Możesz go wykorzystać, aby zarezerwować dodatkowy czas wymagany na dokonanie tej wizyty (patrz Typ może się pojawić tylko raz. |
label |
Określa etykietę elementu |
ShipmentModel
Model dostawy obejmuje zestaw dostaw, który musi być realizowany przez zestaw pojazdów przy minimalizacji całkowitego kosztu, który jest sumą:
- koszt kierowania pojazdami (suma kosztu łącznego czasu, koszt podróży i stały koszt dla wszystkich pojazdów).
- kary za niewykonaną dostawę.
- globalny koszt dostaw
Pola | |
---|---|
shipments[] |
Zestaw dostaw, które muszą zostać zrealizowane w ramach modelu. |
vehicles[] |
Zestaw pojazdów, których można używać do odwiedzin. |
global_start_time |
Globalny czas rozpoczęcia i zakończenia modelu: żadne okresy spoza tego zakresu nie mogą zostać uznane za prawidłowe. Przedział czasu modelu musi być krótszy niż rok, tzn. czas Gdy używasz pól |
global_end_time |
Jeśli nie jest ustawiona, domyślnie używana jest wartość 00:00:00 UTC, 1 stycznia 1971 r. (tzn. sekund: 31536000, nanos: 0). |
global_duration_cost_per_hour |
„Globalny czas trwania” całego planu to różnica między najwcześniejszym rzeczywistym godzinem rozpoczęcia a najpóźniejszą obowiązującą godziną zakończenia wszystkich pojazdów. Użytkownicy mogą przypisać kosztowi godzinowemu temu rodzajowi konwersji, aby np. zoptymalizować kampanię pod kątem najwcześniejszego realizacji zadania. Ten koszt musi być 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 będzie puste, zamiast niego będą używane Mapy Google lub odległości geodezyjne w zależności od wartości w polu Przykłady użycia:
|
duration_distance_matrix_src_tags[] |
tagi definiujące źródła macierzy czasu trwania i odległości; Funkcja Znaczniki odpowiadają wartości |
duration_distance_matrix_dst_tags[] |
tagów definiujących docelowe macierze czasu trwania i odległości; Znaczniki odpowiadają wartości |
transition_attributes[] |
Atrybuty przejścia zostały dodane do modelu. |
shipment_type_incompatibilities[] |
Zestawy niezgodnych typów przesyłki (patrz |
shipment_type_requirements[] |
Zestawy wymagań |
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 trasie jest realizowana co najmniej 1 dostawa. Pozwala to ograniczyć liczbę tras w sytuacjach, gdy kierowców jest mniej niż pojazdów, a flota jest heterogeniczna. Optymalizacja wybierze najlepszy podzbiór pojazdów do użycia. Musi być wyłącznie dodatnia. |
DurationDistanceMatrix
Określa czas trwania i tablicę odległości od wizyty i miejsca rozpoczęcia podróży pojazdu oraz lokalizacji końcowej pojazdu.
Pola | |
---|---|
rows[] |
Określa wiersze macierzy czasu trwania i odległości. Musi się składać z tylu elementów: |
vehicle_start_tag |
Tag definiujący, do których pojazdów ma zastosowanie dany czas trwania i tablica odległości. Jeśli pole jest puste, dotyczy to wszystkich pojazdów i może zawierać tylko jedną macierz. Każdy początek pojazdu musi pasować do jednej macierzy, tzn. dokładnie jedno z jego pola Wszystkie macierze muszą mieć inny element |
Wiersz
Określa wiersz macierzy czasu trwania i odległości.
Pola | |
---|---|
durations[] |
Czas trwania danego wiersza. Musi się składać z tylu elementów: |
meters[] |
Wartości odległości w danym wierszu. Jeśli brak kosztów lub ograniczeń odnosi się do odległości w modelu, to pole może pozostać puste; w przeciwnym razie musi mieć tyle elementów, co |
PrecedenceRule
reguła pierwszeństwa między 2 zdarzeniami (każde z nich to odbiór lub dostawa przesyłki): „drugie” zdarzenie musi rozpoczynać się co najmniej offset_duration
po czasie „pierwsze” rozpoczęto.
Kilka pierwszeństwa może odnosić się do tych samych (lub powiązanych) wydarzeń, np. „Odbiór towaru B odbywa się po dostarczeniu produktu A” a „odbiór produktu C odbywa się po odbiorze produktu B”.
Dodatkowo pierwszeństwo ma tylko wtedy, gdy obie przesyłki są realizowane, w przeciwnym razie są ignorowane.
Pola | |
---|---|
first_is_delivery |
Wskazuje, czy „pierwszy” zdarzenie to dostawa. |
second_is_delivery |
Wskazuje, czy parametr „second” zdarzenie to dostawa. |
offset_duration |
Przesunięcie między pierwszą wartością i „drugi” . Wynik może być ujemny. |
first_index |
Indeks dostawy pierwszego produktu . To pole musi być określone. |
second_index |
Indeks dostawy „sekundy” . To pole musi być określone. |
ShipmentRoute
Trasa pojazdu można podzielić na osi czasu w następujący 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
Trzeba pamiętać, że:
- „zdarzenia punktowe”, takie jak początek i koniec podróży pojazdu, a także początek i koniec każdej wizyty (tj. przyjazd i odjazd). Mają miejsce w określonej sekundzie.
- „przedziały czasu”, takie jak same odwiedziny i przejście między nimi. Chociaż przedziały czasowe mogą czasami mieć zerowy czas trwania, czyli np. początek i koniec w tej samej sekundzie, często mają dodatni czas trwania.
Niezmienniki:
- Jeśli jest n wizyt, występują przejścia n+1.
- Odwiedziny są zawsze otoczone przejściem przed nią (ten sam indeks) i przejściem po niej (indeks + 1).
- Po uruchomieniu pojazdu zawsze następuje przejście nr 0.
- Koniec pojazdu jest zawsze poprzedzony przejściem nr n.
Gdy powiększasz widok, pokazujemy, co się dzieje podczas wyświetlania elementów 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 zobacz, jak można zorganizować TRAVEL, PRZERW, OPÓŹNIENIA i OCZEKIWANIE w trakcie przejścia.
- Nie nakładają się.
- OPÓŹNIENIE jest niepowtarzalne i musi przypadać w ciągłym okresie tuż przed kolejną wizytą (lub wyłączeniem pojazdu). Dzięki temu wystarczy znać czas trwania opóźnienia, aby poznać godzinę rozpoczęcia i zakończenia.
- BREAKS są ze sobą przylegające, niepokrywające się okresy. Odpowiedź określa czas rozpoczęcia i czas trwania każdej przerwy.
- TRAVEL (TRAVEL) i WAIT (opóźnienia) są „wywłaszczeniowe” – mogą zostać kilka razy przerwane w trakcie tego przejścia. Klienci mogą zakładać, że podróże odbywają się „jak najszybciej” i „poczekaj”. wypełni pozostały czas.
Przykład A (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 pokonujący trasę, określony za pomocą indeksu w źródle |
vehicle_label |
Etykieta pojazdu poruszającego się po tej trasie, równa |
vehicle_start_time |
Godzina, o której pojazd rozpoczyna trasę. |
vehicle_end_time |
Czas zakończenia trasy przez pojazd. |
visits[] |
Uporządkowana sekwencja wizyt reprezentująca trasę. wizyta[i] to i-ta wizyta na trasie. Jeśli to pole jest puste, pojazd jest uważany za nieużywany. |
transitions[] |
Uporządkowana lista przejść na trasie. |
has_traffic_infeasibilities |
Jeśli zasada
Przyjazd na stronie next_visit prawdopodobnie nastąpi później niż w bieżącym oknie czasowym ze względu na zwiększony szacowany czas podróży ( |
route_polyline |
Zakodowana reprezentacja trasy w postaci linii łamanej. To pole jest wypełniane tylko wtedy, gdy |
breaks[] |
Przerwy zaplanowane dla pojazdu na tej trasie. Sekwencja |
metrics |
Dane o czasie trwania, dystansie i obciążeniu tej trasy. Pola |
route_costs |
Koszt trasy z podziałem na pola żądania związane z kosztami. Klucze to ścieżki proto, względem danych wejściowych OptimizeToursRequest, np. „model.shipments.pickups.cost”, a ich wartości to łączny koszt wygenerowany przez odpowiednie pole kosztu, zagregowany dla całej trasy. Inaczej mówiąc, koszt["model.shipments.pickups.cost"] to suma wszystkich kosztów odbioru na trasie. Wszystkie koszty zdefiniowane w modelu są uwzględnione w szczegółowym raporcie z wyjątkiem kosztów związanych z atrybutami przejścia, które od 2022 roku są raportowane tylko w postaci zbiorczej. |
route_total_cost |
Całkowity koszt danej 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 ł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 2 zdarzeniami na trasie. Zobacz opis: ShipmentRoute
.
Jeśli pojazd nie ma start_location
lub end_location
, odpowiadające mu dane dotyczące podróży mają wartość 0.
Pola | |
---|---|
travel_duration |
Czas podróży w trakcie tej zmiany. |
travel_distance_meters |
Dystans pokonany podczas przejścia. |
traffic_info_unavailable |
Jeśli żądanie ruchu pochodzi z |
delay_duration |
Suma czasów opóźnienia zastosowanych do tego przejścia. Jeśli tak, opóźnienie zaczyna się dokładnie |
break_duration |
Suma czasu trwania przerw w trakcie tego przejścia (jeśli występują). Szczegółowe informacje o czasie rozpoczęcia i czasie trwania każdej przerwy są przechowywane w |
wait_duration |
Czas oczekiwania podczas tej zmiany. Czas oczekiwania odpowiada czasowi bezczynności i nie uwzględnia przerwy. Pamiętaj też, że czas oczekiwania może zostać podzielony na kilka nieciągłych przedziałów czasu. |
total_duration |
Całkowity czas trwania zmiany podany dla wygody użytkowników. Jest ona równa:
|
start_time |
Godzina rozpoczęcia tego przejścia. |
route_polyline |
Zakodowana reprezentacja linii łamanej trasy, która była następnie używana podczas przejścia. To pole jest wypełniane tylko wtedy, gdy |
vehicle_loads |
Ładunki pojazdów w trakcie tej zmiany dotyczące każdego typu pojazdu, który pojawia się w klastrze Ładunki występujące podczas pierwszego przejścia to początkowe wczytywanie trasy pojazdu. Następnie, po każdej wizycie, |
VehicleLoad
Raportuje rzeczywiste obciążenie pojazdu w danym punkcie trasy w przypadku konkretnego typu (patrz Transition.vehicle_loads
).
Pola | |
---|---|
amount |
Obciążenie pojazdu dla danego typu. Jednostka obciążenia jest zwykle wskazywana przez typ. Zobacz |
Odwiedź
Wizyta przeprowadzona na trasie. Ta wizyta odpowiada odbiórowi lub dostawie: Shipment
.
Pola | |
---|---|
shipment_index |
Indeks pola |
is_pickup |
Jeśli ma wartość prawda, wizyta odpowiada odbiorze produktu |
visit_request_index |
Indeks |
start_time |
Godzina rozpoczęcia wizyty. Pamiętaj, że pojazd może pojawić się na miejscu wcześniej. Godziny są zgodne z |
load_demands |
Łączne obciążenie związane z wizytami jako suma dostawy i żądania wizyty |
detour |
Dodatkowy czas objazdu ze względu na przesyłki odwiedzone na trasie przed wizytą oraz potencjalny czas oczekiwania związany z przedziałami czasowymi. Jeśli wizyta dotyczy dostawy, zmiana trasy jest obliczana na podstawie odpowiedniej wizyty z odbiorem i ma wartość:
W przeciwnym razie jest obliczany na podstawie pojazdu
|
shipment_label |
Kopia odpowiedniego pola |
visit_label |
Kopia odpowiedniego pola |
ShipmentTypeIncompatibility
Określa niezgodności między dostawami w zależności od ich rodzaju przesyłki. Wyświetlanie niezgodnych przesyłek na tej samej trasie jest ograniczone ze względu na tryb niezgodności.
Pola | |
---|---|
types[] |
Lista niezgodnych typów. Dwie przesyłki, których |
incompatibility_mode |
Tryb został zastosowany do niezgodności. |
IncompatibilityMode
Środki określające, jak ograniczone jest wyświetlanie 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 używać. |
NOT_PERFORMED_BY_SAME_VEHICLE |
W tym trybie 2 przesyłki o niewłaściwych typach nie mogą być współdzielone z tym samym pojazdem. |
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY |
W przypadku 2 przesyłek o niezgodnych typach z trybem zgodności
|
ShipmentTypeRequirement
Określa wymagania dotyczące poszczególnych dostaw na podstawie ich rodzaju przesyłki. Konkretne wymagania są określane przez tryb wymagań.
Pola | |
---|---|
required_shipment_type_alternatives[] |
Lista alternatywnych typów przesyłek wymaganych w dokumencie |
dependent_shipment_types[] |
Wszystkie przesyłki o typie podanym w polu UWAGA: łańcuchy wymagań, takie jak |
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 |
Tryb nieokreślonych wymagań. Tej wartości nie należy używać. |
PERFORMED_BY_SAME_VEHICLE |
W tym trybie wszystkie „zależne” przesyłki muszą być z tym samym pojazdem co co najmniej jeden z „wymaganych” przesyłek. |
IN_SAME_VEHICLE_AT_PICKUP_TIME |
W trybie „zależny”; opcja odbioru przesyłki musi więc spełniać jeden z tych warunków:
|
IN_SAME_VEHICLE_AT_DELIVERY_TIME |
Tak samo jak poprzednio, z wyjątkiem pola „zależnego” przesyłki muszą mieć atrybut „wymagany”, przesyłki na swój pojazd w momencie dostawy. |
SkippedShipment
Określa szczegóły niezrealizowanych dostaw w rozwiązaniu. W najprostszych przypadkach lub jeśli jesteśmy w stanie zidentyfikować przyczynę pominięcia, podajemy tutaj jej przyczynę.
Pola | |
---|---|
index |
Indeks odpowiada indeksowi przesyłki w źródle |
label |
Kopia odpowiedniego pola |
reasons[] |
Lista powodów, dla których dostawa została pominięta. Zobacz komentarz powyżej |
Przyczyna
Jeśli będziemy mogli wyjaśnić, dlaczego przesyłka została pominięta, tutaj znajdziesz jej powody. Jeśli powód nie jest taki sam dla wszystkich pojazdów, reason
będzie mieć więcej niż 1 element. Pominięta przesyłka nie może mieć zduplikowanych powodów, tj. gdy wszystkie pola są takie same oprócz 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 co najmniej jednym z nich przekroczyłaby pojemność (w tym pojazd nr 1), co najmniej 1 pojazd „Gruszki” przekroczyłaby pojemność (w tym pojazd nr 3) i przekroczyła limit odległości w przypadku co najmniej 1 pojazdu (w tym pojazdu 1).
Pola | |
---|---|
code |
Więcej informacji znajdziesz w komentarzach do kodu. |
example_exceeded_capacity_type |
Jeśli kod przyczyny to |
example_vehicle_index |
Jeśli przyczyna jest niezgodność między pojazdem dostawczym, a pojazdem wysyłkowym, w tym polu znajdziesz indeks jednego odpowiedniego pojazdu. |
Kod
Kod identyfikujący typ przyczyny. Ta kolejność jest bez znaczenia. W szczególności nie wskazuje, czy dana przyczyna pojawi się wcześniej w rozwiązaniach, jeśli oba te warunki będą spełnione.
Wartości w polu enum | |
---|---|
CODE_UNSPECIFIED |
Nie należy jej nigdy używać. Jeśli nie będziemy mogli zrozumieć, dlaczego przesyłka została pominięta, zwracamy po prostu pusty zestaw powodów. |
NO_VEHICLE |
W modelu nie ma żadnego pojazdu, co uniemożliwiałoby realizację wszystkich dostaw. |
DEMAND_EXCEEDS_VEHICLE_CAPACITY |
Zapotrzebowanie na dostawę przekracza pojemność pojazdu w przypadku niektórych typów pojemności, z których jeden wynosi example_exceeded_capacity_type . |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DISTANCE_LIMIT |
Minimalna odległość wymagana do wykonania tej przesyłki, tj. od Pamiętaj, że w tych obliczeniach używamy odległości geodezyjnych. |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT |
Minimalny czas niezbędny do wykonania tej przesyłki, w tym czas podróży, czas oczekiwania i obsługa, przekracza Uwaga: czas podróży oblicza się według najlepszego przypadku, czyli odległości geodezyjnej x 36 m/s (około 130 km/h). |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TRAVEL_DURATION_LIMIT |
Tak jak powyżej, ale porównujemy tylko minimalny czas podróży z travel_duration_limit pojazdu. |
CANNOT_BE_PERFORMED_WITHIN_VEHICLE_TIME_WINDOWS |
Pojazd nie może zrealizować tej wysyłki w najlepszym przypadku (wyliczenie czasu znajdziesz na stronie CANNOT_BE_PERFORMED_WITHIN_VEHICLE_DURATION_LIMIT ), jeśli rozpoczyna się najwcześniej w momencie rozpoczęcia. W przypadku całkowitego czasu zamknięcie pojazdu spowoduje jego zakończenie po najpóźniejszej godzinie zakończenia. |
VEHICLE_NOT_ALLOWED |
Pole allowed_vehicle_indices przesyłki nie jest puste, a 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.
Wartości graniczne sztywnych przedziałów czasowych, start_time
i end_time
, egzekwują najwcześniejszy i najnowszy czas zdarzenia, na przykład start_time <= event_time <=
end_time
. Dolna granica okresowego okresu (soft_start_time
) określa preferencję, aby zdarzenie miało miejsce soft_start_time
lub później przez naliczanie kosztów proporcjonalnie do tego, jak długo przed zdarzeniem soft_start_time wystąpiło. Górna granica zakresu czasowego (soft_end_time
) określa preferencję, aby zdarzenie miało miejsce soft_end_time
lub wcześniej, ponieważ powoduje naliczanie kosztów proporcjonalnie do czasu, jaki upłynął od zdarzenia soft_end_time
. Wartości 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
) oraz spełniać te warunki:
0 <= `start_time` <= `soft_start_time` <= `end_time` and
0 <= `start_time` <= `soft_end_time` <= `end_time`.
Pola | |
---|---|
start_time |
Trudny czas rozpoczęcia okna czasowego. Jeśli nie określono inaczej, wartość zostanie ustawiona na |
end_time |
Trudny czas zakończenia przedziału czasowego. Jeśli nie określono inaczej, wartość zostanie ustawiona na |
soft_start_time |
Godzina łagodnego rozpoczęcia przedziału czasu. |
soft_end_time |
Godzina zakończenia okresu. |
cost_per_hour_before_soft_start_time |
Koszt za godzinę dodany do innych kosztów w modelu, jeśli zdarzenie wystąpi przed soft_start_time. Wartość jest obliczana według wzoru:
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ę dodany do innych kosztów w modelu, jeśli zdarzenie wystąpi po
Ten koszt musi być dodatni, a pole można ustawić tylko wtedy, gdy skonfigurowano opcję |
TransitionAttributes
Określa atrybuty przejścia między 2 kolejnymi wizytami na trasie. Do tego samego przejścia może być stosowanych kilka elementów TransitionAttributes
: w takim przypadku wszystkie dodatkowe koszty sumują się i zastosowane jest najbardziej rygorystyczne ograniczenie lub limit (zgodnie z naturalną semantyką „ORAZ”).
Pola | |
---|---|
src_tag |
Tagi definiujące zestaw przejść (src->dst), do których mają zastosowanie te atrybuty. Wizyty w źródle lub rozpoczęcie pojazdu pasują do tych, które |
excluded_src_tag |
Zobacz |
dst_tag |
Wizyty w miejscu docelowym lub data zakończenia pojazdu pasują do tych, które |
excluded_dst_tag |
Zobacz |
cost |
Określa koszt przeprowadzenia tej zmiany. Ta jednostka jest taka sama jak wszystkie inne koszty w modelu i nie może być ujemna. Jest doliczana do wszystkich innych istniejących kosztów. |
cost_per_kilometer |
Określa koszt kilometra stosowany do odległości pokonanej podczas wykonywania tej zmiany. Suma wartości tych atrybutów jest równa wartości |
distance_limit |
Określa limit odległości pokonanej podczas wykonywania tej zmiany. Od 6 czerwca 2021 r. obsługiwane są tylko limity wstępne. |
delay |
Określa opóźnienie związane z przeprowadzeniem tej zmiany. Opóźnienie to zawsze następuje po zakończeniu wizyty źródłowej i przed jej rozpoczęciem. |
Pojazd
Modelowanie pojazdu w przypadku problemu z dostawą. Rozwiązanie problemu z dostawą spowoduje utworzenie trasy dla tego pojazdu rozpoczynającej się od start_location
i kończącej na end_location
. Trasa jest sekwencją wizyt (patrz ShipmentRoute
).
Pola | |
---|---|
display_name |
Zdefiniowana przez użytkownika wyświetlana nazwa pojazdu. Może składać się z maksymalnie 63 znaków i zawierać znaki UTF-8. |
travel_mode |
Tryb podróży, który wpływa na drogi, z których może korzystać pojazd, i jego prędkość. Zobacz też |
start_location |
Lokalizacja geograficzna, w której pojazd rozpoczyna się przed odebraniem przesyłki. Jeśli nie podasz żadnej wartości, pojazd rozpocznie się przy pierwszym odbiorze. Jeśli model dostawy zawiera macierze czasu trwania i odległości, nie można określić |
start_waypoint |
Punkt pośredni reprezentujący lokalizację geograficzną, w której pojazd rozpoczyna się przed odebraniem przesyłki. Jeśli nie podasz ani atrybutu |
end_location |
Lokalizacja geograficzna, w której kończy się pojazd ( |
end_waypoint |
Punkt pośredni reprezentujący lokalizację geograficzną, w której kończy się pojazd po zakończeniu ostatniego |
start_tags[] |
Określa tagi dołączone do 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[] |
Przedziały czasu, w których pojazd może odjechać ze swojej lokalizacji początkowej. Muszą mieścić się w globalnych limitach czasowych (patrz pola Przedziały czasu należące do tego samego pola powtarzanego muszą być rozłączne, tj. żadne przedziały czasu nie mogą na siebie nachodzić ani przylegać do siebie i muszą być ułożone w kolejności chronologicznej. Wartości |
end_time_windows[] |
Przedziały czasu, w których pojazd może dotrzeć do miejsca docelowego. Muszą mieścić się w globalnych limitach czasowych (patrz pola Przedziały czasu należące do tego samego pola powtarzanego muszą być rozłączne, tj. żadne przedziały czasu nie mogą na siebie nachodzić ani przylegać do siebie i muszą być ułożone w kolejności chronologicznej. Wartości |
unloading_policy |
W pojeździe egzekwowane są zasady wyładowywania. |
load_limits |
Pojemność pojazdu (np. waga, objętość, liczba palet). Klucze na mapie to identyfikatory typu obciążenia, zgodne z kluczami w polu |
cost_per_hour |
Koszty pojazdu: wszystkie koszty są sumowane i muszą być podane w tej samej jednostce co Koszt za godzinę trasy pojazdu. Koszt ten jest stosowany do łącznego czasu podróży pokonanego na trasie i obejmuje czas podróży, czas oczekiwania i czas wizyty. Użycie usługi |
cost_per_traveled_hour |
Koszt przebytej godziny trasy pojazdu. Koszt ten jest stosowany tylko do czasu podróży na danej trasie (tj. raportowanego w |
cost_per_kilometer |
Koszt za kilometr trasy pojazdu. Koszt ten jest stosowany do odległości podawanej w raportach |
fixed_cost |
Stały koszt stosowany, jeśli ten pojazd służy do obsługi przesyłki. |
used_if_route_is_empty |
To pole dotyczy tylko pojazdów, których trasa nie obsługuje żadnych przesyłek. Informuje, czy w tym przypadku pojazd należy uznać za używany. Jeśli wybrano opcję prawda, pojazd porusza się od początku do końca, nawet jeśli nie obsługuje żadnych przesyłek, oraz koszty czasu i odległości związane z rozpoczęciem pracy --> bierzemy pod uwagę podróż końcową. W przeciwnym razie nie będzie podróżować z początku do miejsca docelowego, a dla tego pojazdu nie zaplanowano żadnych |
route_duration_limit |
Limit został zastosowany do łącznego czasu trwania trasy pojazdu. W danym okresie ( |
travel_duration_limit |
Limit został zastosowany do czasu podróży na trasie pojazdu. W danym okresie ( |
route_distance_limit |
Limit został zastosowany do całkowitej odległości na trasie pojazdu. W danym regionie |
extra_visit_duration_for_visit_type |
Określa mapowanie z ciągów visit_types na czasy trwania. Czas trwania jest uzupełnieniem Jeśli prośba o wizytę ma kilka typów, czas trwania zostanie dodany do każdego z nich na mapie. |
break_rule |
Opisuje harmonogram przerw, który ma być egzekwowany w tym pojeździe. Jeśli pole będzie puste, w przypadku tego pojazdu nie zostaną zaplanowane żadne przerwy. |
label |
Określa etykietę tego pojazdu. Ta etykieta jest zgłaszana w odpowiedzi jako |
ignore |
Jeśli ma wartość true (prawda), Jeśli dostawa jest realizowana przez zignorowany pojazd w Jeśli przesyłka jest realizowana przez zignorowany pojazd w |
travel_duration_multiple |
Określa mnożnik, którego można użyć do zwiększenia lub skrócenia czasu podróży tego pojazdu. Na przykład ustawienie wartości 2,0 oznacza, że ten pojazd jest wolniejszy i czas podróży jest 2 razy dłuższy niż w przypadku standardowych pojazdów. Ta wielokrotność nie ma wpływu na czas trwania wizyty. Wpływa na koszty, jeśli określono OSTRZEŻENIE: czas podróży zostanie zaokrąglony do najbliższej sekundy po zastosowaniu wielokrotności, ale przed wykonaniem jakichkolwiek operacji liczbowych, dlatego mała wielokrotność może spowodować utratę dokładności. Zobacz też |
DurationLimit
Limit określający maksymalny czas trwania trasy pojazdu. Może być twarda lub miękka.
Gdy zdefiniowano pole opcjonalnego limitu, muszą być one określone razem.
Pola | |
---|---|
max_duration |
Twardy limit ogranicza czas trwania do maksymalnie max_duration. |
soft_max_duration |
Ograniczony limit nie egzekwuje maksymalnego czasu trwania, ale jego naruszenie powoduje naliczanie opłat za trasę. Ten koszt jest częścią innych kosztów określonych w modelu, które obejmują tę samą jednostkę. Jeśli została określona, |
quadratic_soft_max_duration |
Ograniczony limit nie egzekwuje maksymalnego czasu trwania, ale w przypadku naruszenia powoduje naliczanie kosztu w postaci kwadratowej. Ten koszt jest częścią innych kosztów określonych w modelu, które obejmują tę samą jednostkę. Jeśli została określona,
|
cost_per_hour_after_soft_max |
Koszt za godzinę po przekroczeniu progu
Koszt nie może być ujemny. |
cost_per_square_hour_after_quadratic_soft_max |
Koszt godziny kwadratowej poniesiony w przypadku naruszenia progu Koszt dodatkowy wynosi 0, jeśli czas trwania jest poniżej progu. W przeciwnym razie koszt zależy od czasu trwania:
Koszt nie może być ujemny. |
LoadLimit
Określa limit obciążenia mający zastosowanie do pojazdu, np. „ta ciężarówka może przewieźć do 3500 kg”. Zobacz load_limits
.
Pola | |
---|---|
soft_max_load |
Ograniczony limit obciążenia. Zobacz |
cost_per_unit_above_soft_max |
Jeśli obciążenie na trasie tego pojazdu kiedykolwiek przekroczy |
start_load_interval |
Dopuszczalny czas obciążenia pojazdu na początku trasy. |
end_load_interval |
Dopuszczalny czas obciążenia pojazdu na końcu trasy. |
max_load |
Maksymalna akceptowalna ilość obciążenia. |
Interwał
Odstęp między akceptowanymi wielkościami wczytywania.
Pola | |
---|---|
min |
Minimalne dopuszczalne obciążenie. Wartość musi być ≥ 0. Jeśli obie są określone, |
max |
Maksymalne dopuszczalne obciążenie. Wartość musi być ≥ 0. Jeśli nie określono inaczej, ten komunikat nie będzie ograniczać maksymalnego obciążenia. Jeśli obie są określone, |
TravelMode
Środki transportu, z których mogą korzystać pojazdy.
Powinny one być podzbiorem preferowanych trybów podróży w interfejsie API tras Google Maps Platform. Zobacz: 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 kierunkom jazdy (samochód, ...). |
WALKING |
Tryb podróży odpowiadający trasom pieszym. |
UnloadingPolicy
Zasady dotyczące wyładowywania pojazdu. Dotyczy tylko przesyłek z odbiorem i dostawą.
W przypadku innych przesyłek mogą one zostać dostarczone w dowolnym miejscu na trasie niezależnie od firmy unloading_policy
.
Wartości w polu enum | |
---|---|
UNLOADING_POLICY_UNSPECIFIED |
Nieokreślona zasada wyładowywania; dostawy muszą następować dopiero po odpowiednim odbiorze. |
LAST_IN_FIRST_OUT |
Dostawy muszą być w odwrotnej kolejności do odbioru |
FIRST_IN_FIRST_OUT |
Dostawy muszą być w tym samym zamówieniu co odbiór |
Punkt pośredni
Obejmuje punkt pośredni. Punkty Waypoints oznaczają miejsca przyjazdu i wyjazdu w żądaniach VisitRequests oraz lokalizację początkową i końcową Pojazdów.
Pola | |
---|---|
side_of_road |
Opcjonalnie: Wskazuje, że umiejscowienie tego punktu pośredniego powinno umożliwiać zatrzymanie pojazdu po określonej stronie drogi. Po ustawieniu tej wartości trasa będzie przechodzić przez lokalizację, tak aby pojazd mógł się zatrzymać na poboczu drogi, w kierunku której lokalizacja jest przekierowana od środka drogi. Ta opcja nie działa w przypadku opcji „SPACER” środkami transportu. |
Pole sumy 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 opcjonalny nagłówek. |
place_id |
Identyfikator miejsca POI powiązany z punktem pośrednim. |