- Zapis JSON
- Przesyłka
- VisitRequest
- LatLng
- Waypoint
- Lokalizacja
- TimeWindow
- Pojazd
- TravelMode
- RouteModifiers
- UnloadingPolicy
- LoadLimit
- Interwał
- DurationLimit
- DistanceLimit
- BreakRule
- BreakRequest
- FrequencyConstraint
- DurationDistanceMatrix
- Rząd
- TransitionAttributes
- ShipmentTypeIncompatibility
- IncompatibilityMode
- ShipmentTypeRequirement
- RequirementMode
- PrecedenceRule
Model dostawy zawiera zestaw dostaw, które muszą być realizowane przez zestaw pojazdów, przy jednoczesnym minimalizowaniu łącznego kosztu, który jest sumą:
- kosztu wyznaczania trasy pojazdów (suma kosztu na godzinę, kosztu na czas przejazdu i kosztów stałych wszystkich pojazdów);
- kary za niewywiązanie się z obowiązku dostawy.
- koszt globalnego czasu trwania przesyłek;
Zapis JSON |
---|
{ "shipments": [ { object ( |
Pola | |
---|---|
shipments[] |
Zestaw dostaw, które muszą być wykonane w ramach modelu. |
vehicles[] |
Zestaw pojazdów, których można używać do wykonywania wizyt. |
global |
Globalny czas rozpoczęcia i zakończenia modelu: nie można uznać za prawidłowe żadnego czasu spoza tego zakresu. Zakres czasowy modelu musi być krótszy niż rok, czyli Jeśli używasz pól Używa standardu RFC 3339, w którym wygenerowany wynik jest zawsze znormalizowany według normy Z i zawiera 0, 3, 6 lub 9 cyfr ułamkowych. Akceptowane są też przesunięcia inne niż „Z”. Przykłady: |
global |
Jeśli nie zostanie ustawiona, domyślnie używana jest data 1 stycznia 1971 r., godzina 00:00:00 czasu UTC (czyli 31536000 sekund, 0 nanosekund). Używa standardu RFC 3339, w którym wygenerowany wynik jest zawsze znormalizowany według normy Z i zawiera 0, 3, 6 lub 9 cyfr ułamkowych. Akceptowane są też przesunięcia inne niż „Z”. Przykłady: |
global |
„Całkowity czas trwania” ogólnego planu to różnica między najwcześniejszym skutecznym czasem rozpoczęcia a najpóźniejszym skutecznym czasem zakończenia wszystkich pojazdów. Użytkownicy mogą przypisać do tej ilości koszt za godzinę, aby na przykład zoptymalizować zadanie pod kątem jak najszybszego ukończenia. Te koszty muszą być wyrażone w tych samych jednostkach co |
duration |
Określa macierze czasu trwania i odległości używane w modelu. Jeśli to pole jest puste, zamiast niego używane są odległości na mapach Google lub odległości geodezyjne, w zależności od wartości pola Przykłady użycia:
|
duration |
Tagi określające źródła macierzy czasu trwania i odległości; Tagi odpowiadają wartościom |
duration |
Tagi określające miejsca docelowe macierzy czasu i odległości; Tagi odpowiadają wartościom |
transition |
Dodano atrybuty przejścia do modelu. |
shipment |
Zestawy niezgodnych typów dostawy (patrz: |
shipment |
zestawy wymagań |
precedence |
Zestaw reguł pierwszeństwa, które muszą być egzekwowane w modelu. WAŻNE: stosowanie reguł pierwszeństwa ogranicza rozmiar problemu, który można optymalizować. Żądania korzystające z reguł pierwszeństwa, które obejmują wiele przesyłek, mogą zostać odrzucone. |
max |
Ogranicza maksymalną liczbę aktywnych pojazdów. Pojazd jest aktywny, jeśli jego trasa obejmuje co najmniej jedną dostawę. Można go użyć do ograniczenia liczby tras w przypadku, gdy kierowców jest mniej niż pojazdów, a flota pojazdów jest zróżnicowana. Następnie optymalizacja wybierze najlepszy podzbiór pojazdów do użycia. Musi być dodatni. |
Wysyłka
Przesyłka pojedynczego produktu od momentu jego odebrania do momentu dostarczenia. Aby przesyłka została uznana za zrealizowaną, pojazd musi odwiedzić jedną z lokalizacji odbioru (i odpowiednio zmniejszyć liczbę wolnych miejsc), a następnie odwiedzić jedną z lokalizacji dostawy (i odpowiednio zwiększyć liczbę wolnych miejsc).
Zapis JSON |
---|
{ "displayName": string, "pickups": [ { object ( |
Pola | |
---|---|
display |
Zdefiniowana przez użytkownika nazwa wyświetlana przesyłki. Może on zawierać maksymalnie 63 znaki i można w nim używać znaków UTF-8. |
pickups[] |
Zestaw alternatyw odbioru powiązanych z przesyłką. Jeśli nie określono inaczej, pojazd musi tylko odwiedzić lokalizację odpowiadającą dostawom. |
deliveries[] |
Zestaw alternatyw dostawy powiązanych z przesyłką. Jeśli nie wskażesz lokalizacji, pojazd musi tylko odwiedzić lokalizację odpowiadającą odbiorowi. |
load |
wymagania dotyczące ładunku (np. waga, objętość, liczba palet itp.); Klucze w mapie powinny być identyfikatorami, które opisują typ odpowiadającego im obciążenia, najlepiej z uwzględnieniem jednostek. Na przykład: „weight_kg”, „volume_gallons”, „pallet_count” itp. Jeśli dany klucz nie pojawia się na mapie, odpowiadający mu ładunek jest uważany za pusty. |
allowed |
Zestaw pojazdów, które mogą wykonać tę dostawę. Jeśli pole jest puste, wszystkie pojazdy mogą je wykonać. Pojazdy są identyfikowane przez ich numer na liście |
costs |
Określa koszt poniesiony podczas dostawy przesyłki przez dany pojazd. Jeśli jest podany, musi zawierać 1 z tych elementów:
Te koszty muszą być wyrażone w tych samych jednostkach co |
costs |
Indeksy pojazdów, do których ma zastosowanie |
pickup |
Określa maksymalny bezwzględny czas objazdu w porównaniu z najkrótszą ścieżką od odbioru do dostawy. Jeśli jest podany, nie może być ujemny, a przesyłka musi zawierać co najmniej odbiór i dostawę. Niech na przykład t będzie najkrótszym czasem potrzebnym na przejazd z wybranego miejsca odbioru do wybranego miejsca dostawy. Ustawienie
Jeśli w przypadku jednej przesyłki są określone zarówno względne, jak i bezwzględne limity, w przypadku każdej możliwej pary odbioru/dostawy stosuje się bardziej restrykcyjny limit. Od października 2017 r. objazdy są obsługiwane tylko wtedy, gdy czas podróży nie zależy od pojazdu. Czas w sekundach z maksymalnie 9 miejscami po przecinku, zakończony literą „ |
pickup |
Określa maksymalny czas od rozpoczęcia odbioru do rozpoczęcia dostawy przesyłki. Jeśli jest podany, nie może być ujemny, a przesyłka musi zawierać co najmniej odbiór i dostawę. Nie zależy to od tego, które opcje odbioru i dostawy są wybrane ani od prędkości pojazdu. Można je określić razem z ograniczeniami maksymalnego objazdu: rozwiązanie będzie przestrzegać obu specyfikacji. Czas w sekundach z maksymalnie 9 miejscami po przecinku, zakończony literą „ |
shipment |
Niepusty ciąg znaków określający „typ” przesyłki. Za pomocą tej funkcji można definiować niezgodności lub wymagania dotyczące Różnica w porównaniu z |
label |
Określa etykietę dla tej przesyłki. Ta etykieta jest raportowana w odpowiedzi w |
ignore |
Jeśli wartość to prawda, pomiń tę dostawę, ale nie stosuj Ignorowanie dostawy powoduje błąd weryfikacji, jeśli w modelu występują jakiekolwiek Ignorowanie dostawy realizowanej w ramach |
penalty |
Jeśli przesyłka nie zostanie dostarczona, ta kara zostanie dodana do łącznego kosztu tras. Przesyłka jest uważana za ukończoną, jeśli wybrano jedną z dostępnych opcji odbioru lub dostawy. Koszt może być wyrażony w tych samych jednostkach co wszystkie inne pola związane z kosztami w modelu i musi być dodatni. WAŻNE: jeśli nie określono tej kary, jest ona uważana za nieskończoną, co oznacza, że dostawa musi zostać zrealizowana. |
pickup |
Określa maksymalny czas dojazdu do miejsca docelowego w porównaniu z najkrótszą ścieżką od miejsca odbioru do miejsca docelowego. Jeśli jest podany, nie może być ujemny, a przesyłka musi zawierać co najmniej odbiór i dostawę. Niech na przykład t będzie najkrótszym czasem potrzebnym na przejazd z wybranego miejsca odbioru do wybranego miejsca dostawy. Ustawienie
Jeśli w przypadku jednej przesyłki są określone zarówno względne, jak i bezwzględne limity, w przypadku każdej możliwej pary odbioru/dostawy stosuje się bardziej restrykcyjny limit. Od października 2017 r. objazdy są obsługiwane tylko wtedy, gdy czas podróży nie zależy od pojazdu. |
VisitRequest
Prośba o wizytację, którą można wykonać pojazdem: ma ona geolokalizację (lub 2 lokalizacje, patrz poniżej), godziny otwarcia i zamknięcia reprezentowane przez okna czasowe oraz czas trwania usługi (czas spędzony przez pojazd od momentu przyjazdu do odbioru lub dostarczenia towarów).
Zapis JSON |
---|
{ "arrivalLocation": { object ( |
Pola | |
---|---|
arrival |
Geolokalizacja miejsca, do którego dociera pojazd podczas wykonywania tej |
arrival |
Punkt orientacyjny, w którym pojazd dociera podczas wykonywania tego |
departure |
Miejsce docelowe, w którym pojazd ma się zatrzymać po zakończeniu tego |
departure |
Punkt orientacyjny, w którym pojazd wyrusza po zakończeniu tego |
tags[] |
Określa tagi dołączone do żądania wizyty. Pustych lub powtarzających się ciągów znaków nie można używać. |
time |
Okna czasowe, które ograniczają czas przybycia podczas wizyty. Pamiętaj, że pojazd może wyjechać poza okno czasu przyjazdu, czyli czas przyjazdu + czas trwania nie muszą mieścić się w oknie czasowym. Może to spowodować oczekiwanie, jeśli pojazd dotrze przed Brak Okresy czasu muszą być niepokrywające się, czyli żaden z nich nie może się pokrywać z innym ani być sąsiadować z innym. Muszą być uporządkowane w kolejności rosnącej. Wartości |
duration |
Czas trwania wizyty, czyli czas spędzony przez pojazd między przybyciem a odejściem (dodawany do możliwego czasu oczekiwania; patrz Czas w sekundach z maksymalnie 9 miejscami po przecinku, zakończony literą „ |
cost |
Koszt realizacji tego żądania wizyty na trasie pojazdu. Możesz go użyć, aby zapłacić różne koszty za odbiór lub dostawę przesyłki. Te koszty muszą być wyrażone w tych samych jednostkach co |
load |
Wczytaj wymagania dotyczące tego żądania wizyty. Jest to pole podobne do pola |
visit |
Określa typy wizyt. Może ona służyć do przydzielenia dodatkowego czasu potrzebnego pojazdowi na wykonanie wizyty (patrz Typ może wystąpić tylko raz. |
label |
Określa etykietę dla tego |
LatLng
Obiekt reprezentujący parę szerokości i długości geograficznej. Jest to para liczb podwójnie po przecinku, która reprezentuje stopnie szerokości i długości geograficznej. Jeśli nie określono inaczej, obiekt musi być zgodny ze standardem WGS84. Wartości muszą mieścić się w normalizowanych zakresach.
Zapis JSON |
---|
{ "latitude": number, "longitude": number } |
Pola | |
---|---|
latitude |
Szerokość geograficzna w stopniach. Musi mieścić się w zakresie [-90,0, +90,0]. |
longitude |
Długość geograficzna w stopniach. Musi mieścić się w zakresie [-180,0, +180,0]. |
Punkt pośredni
Zawiera punkt orientacyjny. Punkty kontrolne oznaczają miejsca przyjazdu i odjazdu dotyczące żądań wizyty oraz miejsca początkowe i końcowe dotyczące pojazdów.
Zapis JSON |
---|
{ "sideOfRoad": boolean, // Union field |
Pola | |
---|---|
side |
Opcjonalnie: Wskazuje, że lokalizacja tego punktu drogowego ma być preferowaną lokalizacją dla zatrzymania pojazdu po określonej stronie drogi. Po ustawieniu tej wartości trasa będzie przebiegać przez lokalizację, aby pojazd mógł się zatrzymać po stronie drogi, w której znajduje się lokalizacja, z dala od środka drogi. Ta opcja nie działa w przypadku trybu „Chodzenie”. |
Pole unii location_type . różne sposoby przedstawiania lokalizacji; location_type może być tylko jednym z tych elementów: |
|
location |
Punkt określony za pomocą współrzędnych geograficznych, w tym opcjonalnego nagłówka. |
place |
Identyfikator miejsca docelowego powiązany z punktem drogi. Jeśli używasz identyfikatora miejsca, aby określić miejsce przyjazdu lub wyjazdu w ramach żądania wizyty, użyj identyfikatora miejsca, który jest wystarczająco szczegółowy, aby określić współrzędne LatLng na potrzeby nawigacji do tego miejsca. Na przykład identyfikator miejsca reprezentujący budynek jest odpowiedni, ale identyfikator miejsca reprezentujący drogę nie jest zalecany. |
Lokalizacja
Zawiera lokalizację (punkt geograficzny i opcjonalnie nagłówek).
Zapis JSON |
---|
{
"latLng": {
object ( |
Pola | |
---|---|
lat |
Współrzędne geograficzne punktu drogi. |
heading |
Kierunek kompasu związany z kierunkiem ruchu. Ta wartość służy do określenia strony drogi, z której ma nastąpić odbiór i zwrot. Wartości kierunku mogą się wahać od 0 do 360, gdzie 0 to kierunek na północ, 90 to kierunek na wschód itd. |
TimeWindow
Okna czasowe ograniczają czas trwania zdarzenia, np. czas przybycia w ramach wizyty lub czas rozpoczęcia i zakończenia korzystania z pojazdu.
Sztywne granice przedziału czasowego startTime
i endTime
narzucają najwcześniejszy i najpóźniejszy czas zdarzenia, tak aby startTime <= event_time <=
endTime
. Dolna granica okna czasu softStartTime
wyraża preferencję, aby zdarzenie miało miejsce w czasie lub po czasie softStartTime
, przy czym koszt jest proporcjonalny do czasu, jaki upływa od softStartTime do wystąpienia zdarzenia. Górna granica okna czasowego, softEndTime
, wyraża preferencję, aby zdarzenie miało miejsce w czasie lub przed czasem softEndTime
, przynosząc koszt proporcjonalny do czasu, jaki upłynie od tego momentu.softEndTime
Wartości startTime
, endTime
, softStartTime
i softEndTime
powinny mieścić się w globalnych limitach czasowych (patrz ShipmentModel.global_start_time
i ShipmentModel.global_end_time
) oraz spełniać te wymagania:
0 <= `startTime` <= `endTime` and
0 <= `startTime` <= `softStartTime` and
0 <= `softEndTime` <= `endTime`.
Zapis JSON |
---|
{ "startTime": string, "endTime": string, "softStartTime": string, "softEndTime": string, "costPerHourBeforeSoftStartTime": number, "costPerHourAfterSoftEndTime": number } |
Pola | |
---|---|
start |
Czas rozpoczęcia okna. Jeśli nie podasz żadnej wartości, zostanie użyta wartość Używa standardu RFC 3339, w którym wygenerowany wynik jest zawsze znormalizowany według normy Z i zawiera 0, 3, 6 lub 9 cyfr ułamkowych. Akceptowane są też przesunięcia inne niż „Z”. Przykłady: |
end |
Czas zakończenia sztywnego przedziału czasu. Jeśli nie podasz żadnej wartości, zostanie użyta wartość Używa standardu RFC 3339, w którym wygenerowany wynik jest zawsze znormalizowany według normy Z i zawiera 0, 3, 6 lub 9 cyfr ułamkowych. Akceptowane są też przesunięcia inne niż „Z”. Przykłady: |
soft |
Czas rozpoczęcia przedziału czasu (miękki). Używa standardu RFC 3339, w którym wygenerowany wynik jest zawsze znormalizowany według normy Z i zawiera 0, 3, 6 lub 9 cyfr ułamkowych. Akceptowane są też przesunięcia inne niż „Z”. Przykłady: |
soft |
Czas zakończenia przedziału czasu (miękki). Używa standardu RFC 3339, w którym wygenerowany wynik jest zawsze znormalizowany według normy Z i zawiera 0, 3, 6 lub 9 cyfr ułamkowych. Akceptowane są też przesunięcia inne niż „Z”. Przykłady: |
cost |
Koszt na godzinę dodany do innych kosztów w modelu, jeśli zdarzenie wystąpiło przed softStartTime, obliczany jako:
Ten koszt musi być dodatni, a pole może być ustawione tylko wtedy, gdy ustawiono wartość softStartTime. |
cost |
Koszt na godzinę dodany do innych kosztów w modelu, jeśli zdarzenie wystąpiło po
Koszt musi być dodatni, a pole można ustawić tylko wtedy, gdy ustawiono |
Pojazd
Model pojazdu w problemie z dostawą. Rozwiązanie problemu z dostawą spowoduje utworzenie trasy dla tego pojazdu, która rozpoczyna się w miejscu startLocation
, a kończy w miejscu endLocation
. Trasa to sekwencja wizyt (patrz ShipmentRoute
).
Zapis JSON |
---|
{ "displayName": string, "travelMode": enum ( |
Pola | |
---|---|
display |
Zdefiniowana przez użytkownika nazwa wyświetlana pojazdu. Może on zawierać maksymalnie 63 znaki i można w nim używać znaków UTF-8. |
travel |
Tryb podróży, który wpływa na drogi dostępne dla pojazdu i jego prędkość. Zobacz też |
route |
Zbiór warunków, które należy spełnić, a które wpływają na sposób obliczania tras dla danego pojazdu. |
start |
Geograficzna lokalizacja, w której pojazd rozpoczyna przejazd przed odbiorem przesyłek. Jeśli nie określisz inaczej, pojazd rozpoczyna kurs od pierwszego odbioru. Jeśli model dostawy zawiera macierze czasu i odległości, nie należy podawać parametru |
start |
Punkt kontrolny reprezentujący lokalizację geograficzną, w której pojazd rozpoczyna odbiór przesyłek. Jeśli nie określono ani właściwości |
end |
Miejsce geograficzne, w którym pojazd kończy ostatnią |
end |
Punkt drogi reprezentujący lokalizację geograficzną, w której pojazd kończy ostatnią |
start |
Określa tagi dołączone do początku trasy pojazdu. Pustych lub powtarzających się ciągów znaków nie można używać. |
end |
Określa tagi dołączone na końcu trasy pojazdu. Pustych lub powtarzających się ciągów znaków nie można używać. |
start |
Okna czasowe, w których pojazd może opuścić lokalizację początkową. Muszą mieścić się w globalnych limitach czasowych (patrz pola Przedziały czasu należące do tego samego powtarzającego się pola muszą być rozłączne, czyli żaden z nich nie może się pokrywać z innym ani być sąsiadować z innym. Muszą być uporządkowane chronologicznie. Wartości |
end |
Okna czasowe, 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 powtarzającego się pola muszą być rozłączne, czyli żaden z nich nie może się pokrywać z innym ani być sąsiadować z innym. Muszą być uporządkowane chronologicznie. Wartości |
unloading |
Zasady rozładunku stosowane w pojazdach. |
load |
Pojemność pojazdu (np. waga, objętość, liczba palet). Klucze na mapie to identyfikatory typu wczytania zgodne z kluczami pola |
cost |
Koszty pojazdu: wszystkie koszty są sumowane i muszą być wyrażone w tej samej jednostce co Koszt godziny przejazdu pojazdu. Koszt ten jest naliczany za cały czas trwania trasy, w tym czas podróży, oczekiwania i wizyty. Używanie operatora |
cost |
Koszt godziny przejazdu pojazdu. Ten koszt jest stosowany tylko do czasu przejazdu po trasie (czyli podanego w |
cost |
Koszt przejechania 1 km trasy przez pojazd. Ten koszt jest stosowany do odległości podanej w |
fixed |
Stałe koszty stosowane, jeśli pojazd jest używany do obsługi przesyłki. |
used |
To pole ma zastosowanie tylko do pojazdów, których trasa nie obsługuje żadnych przesyłek. Wskazuje, czy w tym przypadku pojazd powinien być uznany za używany. Jeśli to ustawienie ma wartość true, pojazd jedzie z miejsca początkowego do miejsca docelowego, nawet jeśli nie obsługuje żadnych przesyłek. Uwzględniane są koszty czasu i odległości wynikające z przejazdu z miejsca początkowego do miejsca docelowego. W przeciwnym razie pojazd nie przemieszcza się z punktu początkowego do końcowego i nie ma dla niego zaplanowanego |
route |
Limit zastosowany do łącznego czasu trwania trasy pojazdu. W danym |
travel |
Ograniczenie czasu trwania przejazdu na trasie pojazdu. W danym |
route |
Ograniczenie stosowane do całkowitej odległości przebytej przez pojazd. W danym |
extra |
Określa mapę od ciągów znaków visitTypes do długości trwania. Czas trwania to czas dodatkowy do Jeśli prośba o wizytę ma kilka typów, na mapie zostanie dodany czas trwania dla każdego z nich. |
break |
Opisuje harmonogram przerw, który ma być stosowany w tym pojeździe. Jeśli pole jest puste, dla tego pojazdu nie będą planowane żadne przerwy. |
label |
Określa etykietę tego pojazdu. Ta etykieta jest raportowana w odpowiedzi jako |
ignore |
Jeśli wartość Jeśli przesyłka jest realizowana przez pojazd ignorowany w Jeśli dostawa jest realizowana przez pojazd ignorowany w |
travel |
Określa współczynnik mnożenia, który może być używany do zwiększania lub zmniejszania czasu przejazdu tego pojazdu. Ustawienie tej wartości na 2,0 oznacza, że pojazd jest wolniejszy i czas podróży jest dwukrotnie dłuższy niż w przypadku standardowych pojazdów. Ten współczynnik nie wpływa na długość wizyty. Wpływa na koszt, jeśli określono OSTRZEŻENIE: czasy przelotu zostaną zaokrąglone do najbliższej sekundy po zastosowaniu tego wielokrotnego, ale przed wykonaniem jakichkolwiek operacji numerycznych, dlatego małe wielokrotne może spowodować utratę dokładności. Zobacz też |
TravelMode
Tryby podróży, z których mogą korzystać pojazdy.
Powinny to być podzbiór trybów podróży interfejsu API Route na platformie Google Maps (patrz: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteTravelMode).
Uwaga: WALKING
trasy są w wersji beta i czasami mogą nie uwzględniać chodników czy ścieżek dla pieszych. Musisz wyświetlać to ostrzeżenie użytkownikowi w przypadku wszystkich tras pieszych wyświetlanych w aplikacji.
Wartości w polu enum | |
---|---|
TRAVEL_MODE_UNSPECIFIED |
Nieokreślony środek transportu, czyli DRIVING . |
DRIVING |
Tryb podróży odpowiadający wskazówkom dojazdu (samochód, ...). |
WALKING |
Tryb podróży odpowiadający wskazówkom dojazdu pieszo. |
RouteModifiers
Zawiera zestaw opcjonalnych warunków, które należy spełnić podczas obliczania tras pojazdów. Jest to podobne do RouteModifiers
w interfejsie API Preferowane trasy platformy Mapy Google. Zapoznaj się z tą stroną: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers.
Zapis JSON |
---|
{ "avoidTolls": boolean, "avoidHighways": boolean, "avoidFerries": boolean, "avoidIndoor": boolean } |
Pola | |
---|---|
avoid |
Określa, czy w uzasadnionych przypadkach należy unikać dróg płatnych. Preferowane będą trasy nieobejmujące dróg płatnych. Dotyczy to tylko pojazdów mechanicznych. |
avoid |
Określa, czy w uzasadnionych przypadkach ma być unikana jazda autostradami. Preferowane będą trasy nieobejmujące autostrad. Dotyczy to tylko pojazdów mechanicznych. |
avoid |
Określa, czy w uzasadnionych przypadkach ma być unikana przeprawa promowa. Preferowane będą trasy nieobejmujące przejazdów promem. Dotyczy to tylko pojazdów mechanicznych. |
avoid |
Opcjonalnie: Określa, czy w uzasadnionych przypadkach ma być unikana nawigacja wewnątrz budynków. Preferowane będą trasy nieobejmujące nawigacji w pomieszczeniach. Dotyczy tylko trybu podróży |
UnloadingPolicy
Zasady dotyczące rozładunku pojazdu. Dotyczy tylko przesyłek, które obejmują zarówno odbiór, jak i dostawę.
Inne przesyłki mogą być dostarczane w dowolnym miejscu na trasie niezależnie od unloadingPolicy
.
Wartości w polu enum | |
---|---|
UNLOADING_POLICY_UNSPECIFIED |
Nieokreślona polityka rozładunku; dostawy muszą odbywać się po odpowiednich odbiorach. |
LAST_IN_FIRST_OUT |
Dostawy muszą odbywać się w odwrotnej kolejności odbioru |
FIRST_IN_FIRST_OUT |
Dostawy muszą odbywać się w tej samej kolejności co odbiory |
LoadLimit
Określa limit ładunku dla pojazdu, np. „ten samochód może przewozić maksymalnie 3500 kg”. Zobacz loadLimits
.
Zapis JSON |
---|
{ "softMaxLoad": string, "costPerUnitAboveSoftMax": number, "startLoadInterval": { object ( |
Pola | |
---|---|
soft |
Miękki limit obciążenia. Zobacz |
cost |
Jeśli ładunek przekroczy wartość |
start |
Dopuszczalny przedział ładowania pojazdu na początku trasy. |
end |
Dopuszczalny przedział ładowania pojazdu na końcu trasy. |
max |
Maksymalna dopuszczalna ilość obciążenia. |
Interwał
Przedział dopuszczalnych wartości obciążenia.
Zapis JSON |
---|
{ "min": string, "max": string } |
Pola | |
---|---|
min |
minimalny dopuszczalny ładunek; Wartość musi być większa lub równa 0. Jeśli oba parametry są określone, wartość |
max |
Maksymalne dopuszczalne obciążenie. Wartość musi być większa lub równa 0. Jeśli nie podasz maksymalnego obciążenia, wiadomość nie będzie nakładać żadnych ograniczeń. Jeśli oba parametry są określone, wartość |
DurationLimit
Limit określający maksymalny czas trwania trasy pojazdu. Może być twardy lub miękki.
Gdy zdefiniujesz pole z miękkim limitem, musisz zdefiniować zarówno miękki maksymalny próg, jak i powiązany z nim koszt.
Zapis JSON |
---|
{ "maxDuration": string, "softMaxDuration": string, "quadraticSoftMaxDuration": string, "costPerHourAfterSoftMax": number, "costPerSquareHourAfterQuadraticSoftMax": number } |
Pola | |
---|---|
max |
Stały limit ograniczający czas trwania do maxDuration. Czas w sekundach z maksymalnie 9 miejscami po przecinku, zakończony literą „ |
soft |
miękki limit, który nie narzuca maksymalnego czasu trwania, ale w przypadku jego przekroczenia powoduje powstanie kosztu trasy; Ten koszt jest sumowany z innymi kosztami zdefiniowanymi w modelu, przy użyciu tej samej jednostki. Jeśli jest zdefiniowana, wartość Czas w sekundach z maksymalnie 9 miejscami po przecinku, zakończony literą „ |
quadratic |
Miękki limit, który nie narzuca maksymalnego czasu trwania, ale w przypadku jego naruszenia powoduje, że trasa powoduje koszt proporcjonalny do kwadratu czasu. Ten koszt jest sumowany z innymi kosztami zdefiniowanymi w modelu, przy użyciu tej samej jednostki. Jeśli jest zdefiniowana, wartość
Czas w sekundach z maksymalnie 9 miejscami po przecinku, zakończony literą „ |
cost |
Koszt na godzinę, który jest naliczany, jeśli przekroczysz próg
Koszt musi być nieujemny. |
cost |
Koszt za godzinę kwadratową, który jest naliczany, gdy przekroczony zostanie próg Jeśli czas trwania jest poniżej progu, dodatkowy koszt wynosi 0. W innych przypadkach koszt zależy od czasu trwania w następujący sposób:
Koszt musi być nieujemny. |
DistanceLimit
Limit określający maksymalną odległość, jaką można przebyć. Może być twardy lub miękki.
Jeśli zdefiniowany jest miękki limit, wartości softMaxMeters
i costPerKilometerAboveSoftMax
muszą być zdefiniowane i nieujemne.
Zapis JSON |
---|
{ "maxMeters": string, "softMaxMeters": string, "costPerKilometerBelowSoftMax": number, "costPerKilometerAboveSoftMax": number } |
Pola | |
---|---|
max |
sztywny limit ograniczający odległość do maksymalnej wartości maxMeters. Limit nie może być liczbą ujemną. |
soft |
miękki limit, który nie narzuca maksymalnego limitu odległości, ale w przypadku jego naruszenia powoduje koszt, który sumuje się z innymi kosztami zdefiniowanymi w modelu, z tą samą jednostką. Jeśli jest zdefiniowana, wartość softMaxMeters musi być mniejsza niż maxMeters i nieujemna. |
cost |
Koszty na kilometr, które mogą wzrosnąć do
Ten koszt nie jest obsługiwany w |
cost |
Koszt za kilometr, jeśli odległość przekracza limit
Koszt musi być nieujemny. |
BreakRule
Reguły generowania przerw czasowych dla pojazdu (np. przerwa na lunch). Przerwa to ciągły okres czasu, w którym pojazd pozostaje nieczynny w swojej bieżącej pozycji i nie może wykonywać żadnych wizyt. Przerwa może wystąpić:
- podczas przemieszczania się między 2 wizytami (co obejmuje czas bezpośrednio przed wizytą lub bezpośrednio po niej, ale nie w jej trakcie), w którym przypadku wydłuża się czas przemieszczania się między wizytami,
- lub przed uruchomieniem pojazdu (samochód nie może się uruchomić w trakcie przerwy), w którym to przypadku nie wpływa na czas uruchomienia pojazdu.
- lub po zakończeniu korzystania z pojazdu (w tym przypadku również podaj godzinę zakończenia korzystania z pojazdu).
Zapis JSON |
---|
{ "breakRequests": [ { object ( |
Pola | |
---|---|
break |
Kolejność przerw. Zobacz wiadomość |
frequency |
Mogą obowiązywać różne |
BreakRequest
Sekwencja przerw (czyli ich liczba i kolejność) obowiązująca w przypadku każdego pojazdu musi być znana z wyprzedzeniem. Powtarzające się BreakRequest
definiują tę sekwencję w kolejności, w jakiej muszą wystąpić. Okna czasowe (earliestStartTime
/ latestStartTime
) mogą się na siebie nakładać, ale muszą być zgodne z kolejnością (jest to sprawdzane).
Zapis JSON |
---|
{ "earliestStartTime": string, "latestStartTime": string, "minDuration": string } |
Pola | |
---|---|
earliest |
Wymagany. Dolna granica (włącznie) na początku przerwy. Używa standardu RFC 3339, w którym wygenerowany wynik jest zawsze znormalizowany według normy Z i zawiera 0, 3, 6 lub 9 cyfr ułamkowych. Akceptowane są też przesunięcia inne niż „Z”. Przykłady: |
latest |
Wymagany. Górna granica (włącznie) na początku przerwy. Używa standardu RFC 3339, w którym wygenerowany wynik jest zawsze znormalizowany według normy Z i zawiera 0, 3, 6 lub 9 cyfr ułamkowych. Akceptowane są też przesunięcia inne niż „Z”. Przykłady: |
min |
Wymagany. Minimalny czas trwania przerwy. Musi być dodatni. Czas w sekundach z maksymalnie 9 miejscami po przecinku, zakończony literą „ |
FrequencyConstraint
Można też dodatkowo ograniczyć częstotliwość i czas trwania przerw określonych powyżej, narzucając minimalną częstotliwość przerwy, np. „Co 12 godzin musi być przerwa trwająca co najmniej 1 godzinę”. Zakładając, że można to interpretować jako „W dowolnym przesuwającym się oknie czasowym 12 godzin musi być co najmniej 1 przerwa trwająca co najmniej 1 godzinę”, przykład ten przetłumaczylibyśmy w ten sposób: FrequencyConstraint
:
{
minBreakDuration { seconds: 3600 } # 1 hour.
maxInterBreakDuration { seconds: 39600 } # 11 hours (12 - 1 = 11).
}
Czas i długość przerw w rozwiązaniu będą uwzględniać wszystkie te ograniczenia, a także okna czasowe i minimalne długości przerw określone w BreakRequest
.
FrequencyConstraint
może w praktyce dotyczyć przerw nieciągłych. Na przykład w ramach harmonogramu „1 godzina co 12 godzin”:
04:00 vehicle start
.. performing travel and visits ..
09:00 1 hour break
10:00 end of the break
.. performing travel and visits ..
12:00 20-min lunch break
12:20 end of the break
.. performing travel and visits ..
21:00 1 hour break
22:00 end of the break
.. performing travel and visits ..
23:59 vehicle end
Zapis JSON |
---|
{ "minBreakDuration": string, "maxInterBreakDuration": string } |
Pola | |
---|---|
min |
Wymagany. Minimalny czas trwania przerwy dla tego ograniczenia. Nieujemna. Zobacz opis Czas w sekundach z maksymalnie 9 miejscami po przecinku, zakończony literą „ |
max |
Wymagany. Maksymalny dozwolony przedział czasu na trasie, który nie obejmuje co najmniej częściowej przerwy Czas w sekundach z maksymalnie 9 miejscami po przecinku, zakończony literą „ |
DurationDistanceMatrix
Określa czas trwania i macierz odległości od miejsc początkowych wizyt i pojazdu do miejsc końcowych wizyt i pojazdu.
Zapis JSON |
---|
{
"rows": [
{
object ( |
Pola | |
---|---|
rows[] |
Określa wiersze macierzy czasu trwania i odległości. Musi zawierać taką samą liczbę elementów jak |
vehicle |
Tag określający, do których pojazdów ma zastosowanie ta tablica czasu trwania i odległości. Jeśli jest pusty, ma zastosowanie do wszystkich pojazdów i może być tylko jedna matryca. Każdy początek pojazdu musi odpowiadać dokładnie jednej macierzy, czyli dokładnie jedno z pol Wszystkie macierze muszą mieć inną wartość |
Wiersz
Określa wiersz macierzy czasu trwania i odległości.
Zapis JSON |
---|
{ "durations": [ string ], "meters": [ number ] } |
Pola | |
---|---|
durations[] |
Wartości czasu trwania w danym wierszu. Musi zawierać taką samą liczbę elementów jak Czas w sekundach z maksymalnie 9 miejscami po przecinku, zakończony literą „ |
meters[] |
Wartości odległości w danym wierszu. Jeśli w modelu nie ma żadnych kosztów ani ograniczeń odnoszących się do odległości, można pozostawić to pole puste. W przeciwnym razie musi ono zawierać tyle elementów, co |
TransitionAttributes
Określa atrybuty przejść między 2 kolejnymi wizytami na trasie. Do tego samego przejścia może mieć zastosowanie kilka TransitionAttributes
: w takim przypadku wszystkie dodatkowe koszty są sumowane, a następnie stosowany jest najbardziej restrykcyjny warunek lub limit (zgodnie z naturalną semantyką „AND”).
Zapis JSON |
---|
{
"srcTag": string,
"excludedSrcTag": string,
"dstTag": string,
"excludedDstTag": string,
"cost": number,
"costPerKilometer": number,
"distanceLimit": {
object ( |
Pola | |
---|---|
src |
Tagi definiujące zbiór przejść (src->dst), do których mają zastosowanie te atrybuty. Wizyta w źródle lub uruchomienie pojazdu powoduje dopasowanie, jeśli pole |
excluded |
Zobacz |
dst |
Odpowiednia wizyta w miejscu docelowym lub koniec korzystania z pojazdu jest zgodna, jeśli pole |
excluded |
Zobacz |
cost |
Określa koszt wykonania tego przejścia. Jest on podawany w tych samych jednostkach co wszystkie inne koszty w modelu i nie może być ujemny. Jest ona naliczana dodatkowo do wszystkich innych kosztów. |
cost |
Określa koszt na kilometr zastosowany do przebytej odległości podczas wykonywania tego przejścia. Dodaje się do wszystkich |
distance |
Określa limit pokonywanej odległości podczas wykonywania tego przejścia. Od czerwca 2021 r. obsługiwane są tylko limity miękkie. |
delay |
Określa opóźnienie powstałe podczas wykonywania tego przejścia. To opóźnienie występuje zawsze po zakończeniu wizyty źródłowej i przed rozpoczęciem wizyty docelowej. Czas w sekundach z maksymalnie 9 miejscami po przecinku, zakończony literą „ |
ShipmentTypeIncompatibility
Określa niezgodności między przesyłkami w zależności od ich typu. Występowanie niezgodnych przesyłek na tej samej trasie jest ograniczone na podstawie trybu niezgodności.
Zapis JSON |
---|
{
"types": [
string
],
"incompatibilityMode": enum ( |
Pola | |
---|---|
types[] |
Lista niezgodnych typów. 2 przesyłki z różnymi wartościami |
incompatibility |
Tryb zastosowany do niezgodności. |
IncompatibilityMode
Tryby określające, jak ograniczać pojawianie się niezgodnych przesyłek na tej samej trasie.
Wartości w polu enum | |
---|---|
INCOMPATIBILITY_MODE_UNSPECIFIED |
Nieokreślony tryb niezgodności. Ta wartość nigdy nie powinna być używana. |
NOT_PERFORMED_BY_SAME_VEHICLE |
W tym trybie 2 przesyłki z niekompatybilnymi typami nigdy nie mogą korzystać z tego samego pojazdu. |
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY |
W przypadku dwóch przesyłek z niezgodnymi typami w trybie niezgodności
|
ShipmentTypeRequirement
Określa wymagania dotyczące przesyłek na podstawie ich typu. Szczegóły wymagań są definiowane przez tryb wymagań.
Zapis JSON |
---|
{
"requiredShipmentTypeAlternatives": [
string
],
"dependentShipmentTypes": [
string
],
"requirementMode": enum ( |
Pola | |
---|---|
required |
Lista alternatywnych typów dostawy wymaganych przez |
dependent |
Wszystkie przesyłki z typem w polu UWAGA: łańcuchy wymagań, w których |
requirement |
Tryb zastosowany do wymagań. |
RequirementMode
Tryby definiujące sposób wyświetlania przesyłek zależnych na trasie.
Wartości w polu enum | |
---|---|
REQUIREMENT_MODE_UNSPECIFIED |
Nieokreślony tryb wymagań. Ta wartość nigdy nie powinna być używana. |
PERFORMED_BY_SAME_VEHICLE |
W tym trybie wszystkie przesyłki „zależne” muszą być przewożone tym samym pojazdem co co najmniej jedna przesyłka „wymagana”. |
IN_SAME_VEHICLE_AT_PICKUP_TIME |
W trybie Odbiór „zależnej” przesyłki musi mieć:
|
IN_SAME_VEHICLE_AT_DELIVERY_TIME |
To samo co wcześniej, z tą różnicą, że w momencie dostawy przesyłki „zależne” muszą mieć w pojeździe przesyłkę „wymaganą”. |
PrecedenceRule
Zasada pierwszeństwa między 2 zdarzeniami (każde zdarzenie to odbiór lub dostawa przesyłki): „drugie” zdarzenie musi rozpocząć się co najmniej offsetDuration
s po rozpoczęciu „pierwszego”.
Kilka priorytetów może dotyczyć tych samych (lub powiązanych) zdarzeń, np. „Odbiór B następuje po dostawie A” i „Odbiór C następuje po odbiorze B”.
Ponadto priorytety mają zastosowanie tylko wtedy, gdy obie przesyłki są realizowane, a w przeciwnym razie są ignorowane.
Zapis JSON |
---|
{ "firstIsDelivery": boolean, "secondIsDelivery": boolean, "offsetDuration": string, "firstIndex": integer, "secondIndex": integer } |
Pola | |
---|---|
first |
Wskazuje, czy „pierwsze” zdarzenie to dostawa. |
second |
Wskazuje, czy „drugie” zdarzenie to dostawa. |
offset |
Odstęp między zdarzeniami „first” i „second”. Może być ujemna. Czas w sekundach z maksymalnie 9 miejscami po przecinku, zakończony literą „ |
first |
Indeks dostawy „pierwszego” zdarzenia. To pole musi być określone. |
second |
Indeks dostawy „drugiego” zdarzenia. To pole musi być określone. |