- Zapis JSON
- Wysyłka
- VisitRequest
- LatLng
- Punkt pośredni
- Lokalizacja
- TimeWindow
- Pojazd
- TravelMode
- UnloadingPolicy
- LoadLimit
- Odstęp czasu
- DurationLimit:
- DistanceLimit
- BreakRule
- BreakRequest
- FrequencyConstraint
- DurationDistanceMatrix
- Wiersz
- TransitionAttributes
- ShipmentTypeIncompatibility
- IncompatibilityMode
- ShipmentTypeRequirement
- RequirementMode
- PrecedenceRule
Model dostawy obejmuje zbiór wysyłek, które muszą zostać wykonane przez zestaw pojazdów przy minimalizowaniu ogólnego kosztu, który jest sumą:
- koszt kierowania pojazdem (suma kosztu łącznego czasu, koszt czasu podróży i stały koszt wszystkich pojazdów);
- niewykonane kary za dostawę.
- koszt dostawy na całym świecie
Zapis JSON |
---|
{ "shipments": [ { object ( |
Pola | |
---|---|
shipments[] |
Zestaw wysyłek, które muszą zostać wykonane w modelu. |
vehicles[] |
Zestaw pojazdów, których można używać do zwiedzania. |
globalStartTime |
Globalny czas rozpoczęcia i zakończenia modelu: żadne godziny spoza tego zakresu nie można uznać za prawidłowe. Zakres czasowy modelu musi być krótszy niż rok, np. wartości w polach Podczas korzystania z pól Sygnatura czasowa w formacie „Zulu” RFC3339 UTC z rozdzielczością nanosekundową i maksymalnie 9 cyframi po przecinku. Przykłady: |
globalEndTime |
Jeśli zasada nie jest skonfigurowana, jako domyślna używana jest godzina 00:00:00 UTC, 1 stycznia 1971 r. (tzn. sekund: 31536000, nanos: 0). Sygnatura czasowa w formacie „Zulu” RFC3339 UTC z rozdzielczością nanosekundową i maksymalnie 9 cyframi po przecinku. Przykłady: |
globalDurationCostPerHour |
„Globalny czas trwania” ogólnego planu to różnica między najwcześniejszym efektywnym czasem rozpoczęcia a najnowszym efektywnym czasem zakończenia wszystkich pojazdów. Użytkownicy mogą przypisać do tej ilości koszt godzinowy, aby na przykład podjąć próbę optymalizacji pod kątem jak najwcześniejszego ukończenia zadania. Ten koszt musi być w tej samej jednostce co |
durationDistanceMatrices[] |
Określa używane w modelu macierze czasu trwania i odległości. Jeśli to pole jest puste, zostaną użyte dane z Map Google lub odległości geodezyjne w zależności od wartości pola Przykłady użycia:
|
durationDistanceMatrixSrcTags[] |
Tagi definiujące źródła macierzy czasu trwania i odległości; Tagi odpowiadają elementom |
durationDistanceMatrixDstTags[] |
Tagi określające miejsca docelowe dla macierzy czasu trwania i odległości: Tagi odpowiadają elementom |
transitionAttributes[] |
Do modelu dodano atrybuty przejścia. |
shipmentTypeIncompatibilities[] |
Zestawy niezgodnych typów wysyłki (patrz |
shipmentTypeRequirements[] |
Zestawy wymagań typu |
precedenceRules[] |
Zestaw reguł pierwszeństwa, które muszą być egzekwowane w modelu. |
maxActiveVehicles |
Ogranicza maksymalną liczbę aktywnych pojazdów. Pojazd jest aktywny, jeśli na jego trasie zostanie zrealizowana co najmniej jedna przesyłka. Może to służyć do ograniczenia liczby tras, jeśli kierowców jest mniej niż pojazdów, a flota pojazdów jest heterogeniczna. Optymalizacja wybiera najlepszy podzbiór pojazdów do użycia. Musi być wartością dodatnią. |
Wysyłka
Przesyłka pojedynczego produktu, od jednego z odbiorów do jednej z nich. Aby przesyłka została uznana za zrealizowana, unikalny pojazd musi odwiedzić jedno z jego lokalizacji (i odpowiednio zmniejszyć jego pojemność), a następnie odwiedzić jedno z miejsc dostawy (i w związku z tym ponownie odpowiednio zwiększyć pojemność).
Zapis JSON |
---|
{ "displayName": string, "pickups": [ { object ( |
Pola | |
---|---|
displayName |
Zdefiniowana przez użytkownika wyświetlana nazwa przesyłki. Może zawierać do 63 znaków i zawierać znaki UTF-8. |
pickups[] |
Zestaw alternatywnych opcji odbioru powiązanych z dostawą. Jeśli go nie podasz, pojazd musi odwiedzić tylko lokalizację odpowiadającą przesyłki. |
deliveries[] |
Zestaw alternatywnych opcji dostawy powiązanych z dostawą. Jeśli go nie podasz, pojazd będzie musiał przyjść tylko do miejsca odpowiadającego możliwości odbioru. |
loadDemands |
Obciążenie przesyłki (np. waga, objętość, liczba palet itp.). Klucze na mapie powinny być identyfikatorami opisującymi typ odpowiedniego obciążenia, najlepiej łącznie z jednostkami. Na przykład: „weight_kg”, „volume_gallons”, „pallet_count” itp. Jeśli danego klucza nie ma na mapie, odpowiednie obciążenie jest uznawane za puste. Obiekt zawierający listę par |
allowedVehicleIndices[] |
Zestaw pojazdów, które mogą zrealizować tę przesyłkę. Jeśli pole jest puste, wszystkie pojazdy mogą z niego korzystać. Pojazdy są wyświetlane według ich indeksu na liście |
costsPerVehicle[] |
Określa koszt poniesiony w związku z dostarczeniem przesyłki przez każdy pojazd. Jeśli jest określony, musi zawierać EITHER:
Koszty muszą być podane w tej samej jednostce co wartość |
costsPerVehicleIndices[] |
Indeksy pojazdów, których dotyczy |
pickupToDeliveryAbsoluteDetourLimit |
Określa maksymalny bezwzględny czas odjazdu w porównaniu z najkrótszą trasą od punktu odbioru do dostawy. Jeśli określono wartość, nie może ona być ujemna, a przesyłka musi zawierać co najmniej odbiór i dostawę. Niech to na przykład będzie najkrótszy czas potrzebny do uzyskania z wybranej alternatywy odbioru bezpośrednio do wybranej opcji dostawy. Następnie ustawienie
Jeśli dla tej samej dostawy określono zarówno limity względne, jak i bezwzględne, w przypadku każdej możliwej pary odbioru/dostawy zostanie zastosowany bardziej restrykcyjny limit. Od 10 października 2017 r. objazdy są obsługiwane tylko wtedy, gdy czas podróży nie zależy od pojazdu. Czas trwania w sekundach z maksymalnie 9 cyframi po przecinku, kończącym się cyframi „ |
pickupToDeliveryTimeLimit |
Określa maksymalny czas od rozpoczęcia odbioru do rozpoczęcia dostawy. Jeśli określono wartość, nie może ona być ujemna, a przesyłka musi zawierać co najmniej odbiór i dostawę. Nie zależy to od możliwości odbioru i dostawy ani od prędkości pojazdu. Można je określić razem z ograniczeniami maksymalnego objazdu: rozwiązanie będzie uwzględniać obie specyfikacje. Czas trwania w sekundach z maksymalnie 9 cyframi po przecinku, kończącym się cyframi „ |
shipmentType |
Niepusty ciąg znaków określający „typ” tej przesyłki. Ta funkcja może służyć do definiowania niezgodności lub wymagań między Różni się od usługi |
label |
Określa etykietę tej przesyłki. Ta etykieta jest zgłaszana w odpowiedzi w |
ignore |
Jeśli ma wartość prawda, pomiń tę dostawę, ale nie stosuj Zignorowanie dostawy spowoduje błąd weryfikacji, gdy w modelu występują jakiekolwiek Ignorowanie dostawy realizowanej w krajach |
penaltyCost |
Jeśli dostawa nie zostanie ukończona, ta kara zostanie dodana do całkowitego kosztu tras. Przesyłka jest uznawana za zakończoną, jeśli zostanie odwiedzona jedna z dostępnych opcji odbioru i dostawy. Koszt może być wyrażony w tej samej jednostce, która została użyta we wszystkich innych polach dotyczących kosztów w modelu, i musi być dodatnia. WAŻNE: jeśli ta kara nie zostanie określona, zostanie uznana za nieskończoną, tj. dostawa musi zostać zrealizowana. |
pickupToDeliveryRelativeDetourLimit |
Określa maksymalny względny czas odjazdu w porównaniu z najkrótszą ścieżką od odbioru do dostawy. Jeśli określono wartość, nie może ona być ujemna, a przesyłka musi zawierać co najmniej odbiór i dostawę. Niech to na przykład będzie najkrótszy czas potrzebny do uzyskania z wybranej alternatywy odbioru bezpośrednio do wybranej opcji dostawy. Następnie ustawienie
Jeśli dla tej samej dostawy określono zarówno limity względne, jak i bezwzględne, w przypadku każdej możliwej pary odbioru/dostawy zostanie zastosowany bardziej restrykcyjny limit. Od 10 października 2017 r. objazdy są obsługiwane tylko wtedy, gdy czas podróży nie zależy od pojazdu. |
VisitRequest
Prośba o wizytę, którą może zrealizować pojazd: określa lokalizację geograficzną (lub dwie, patrz niżej), godziny otwarcia i zamknięcia przedstawione w przedziałach czasowych oraz czas trwania usługi (czas, jaki pojazd zajmuje odbiór lub oddanie towaru).
Zapis JSON |
---|
{ "arrivalLocation": { object ( |
Pola | |
---|---|
arrivalLocation |
Lokalizacja geograficzna, do której przyjeżdża pojazd, gdy wykonujesz ten |
arrivalWaypoint |
Punkt na trasie, do którego dociera pojazd podczas wykonywania tego parametru ( |
departureLocation |
Geolokalizacja, z której pojazd odjeżdża po wykonaniu tej |
departureWaypoint |
Punkt na trasie, z którego pojazd odjeżdża po pokonaniu tego trasy |
tags[] |
Określa tagi dołączone do prośby o wizytę. Puste i zduplikowane ciągi znaków są niedozwolone. |
timeWindows[] |
Przedziały czasu, które ograniczają godzinę przyjazdu na wizytę. Pamiętaj, że pojazd może odjechać poza przedziałem czasu przyjazdu, tj. godzina przyjazdu i czas trwania nie muszą znajdować się w przedziale czasowym. Może to spowodować czas oczekiwania, jeśli pojazd przyjedzie przed Brak Przedziały czasu muszą być rozłączone, tj. żadne przedziały czasu nie mogą na siebie nakładać się lub przylegać do siebie i muszą się zmieniać w kolejności rosnącej. Wartości |
duration |
Długość wizyty, czyli czas spędzony przez pojazd między przyjazdem a odjazdem (należy go dodać do możliwego czasu oczekiwania; patrz: Czas trwania w sekundach z maksymalnie 9 cyframi po przecinku, kończącym się cyframi „ |
cost |
Koszt obsługi tej prośby o wizytę na trasie pojazdu. Możesz użyć tej opcji, aby zapłacić różne koszty za każdy alternatywny odbiór lub dostawę przesyłki. Koszt musi być w tej samej jednostce co |
loadDemands |
Obciążenia związane z tą prośbą o wizytę. Działa ono tak samo jak pole Obiekt zawierający listę par |
visitTypes[] |
Określa typy wizyt. Pozwala to przydzielić pojazdowi dodatkowy czas na ukończenie tej wizyty (patrz Typ może wystąpić tylko raz. |
label |
Określa etykietę elementu |
LatLng
Obiekt reprezentujący parę szerokości/długości geograficznej. Wartość ta jest wyrażona jako para podwójnej wartości oznaczająca stopnie szerokości i długości geograficznej w stopniach. O ile nie wskazano inaczej, ten obiekt musi być zgodny ze standardem WGS84. Wartości muszą się mieścić w znormalizowanych 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
Obejmuje punkt pośredni. Punkty pośrednie oznaczają lokalizacje przyjazdu i odjazdu oraz lokalizację początkową i końcową pojazdów.
Zapis JSON |
---|
{ "sideOfRoad": boolean, // Union field |
Pola | |
---|---|
sideOfRoad |
Opcjonalnie. Wskazuje, że lokalizacja tego punktu pośredniego ma umożliwiać zatrzymywanie pojazdu po określonej stronie drogi. Po ustawieniu tej wartości trasa przechodzi przez daną lokalizację, dzięki czemu pojazd może się zatrzymać na boku drogi, na którą kierowana jest ta lokalizacja, od środka drogi. Ta opcja nie działa w trybie podróży „PIESZ”. |
Pole sumy location_type . Różne sposoby przedstawiania lokalizacji. location_type może być tylko jedną z tych wartości: |
|
location |
Punkt określony za pomocą współrzędnych geograficznych, wraz z opcjonalnym nagłówkiem. |
placeId |
Identyfikator miejsca POI powiązany z punktem na trasie. |
Lokalizacja
Obejmuje lokalizację (punkt geograficzny i opcjonalny nagłówek).
Zapis JSON |
---|
{
"latLng": {
object ( |
Pola | |
---|---|
latLng |
Współrzędne geograficzne punktu pośredniego. |
heading |
Kierunek kompasu powiązany z kierunkiem ruchu. Ta wartość służy do określenia strony drogi na potrzeby odbioru i miejsca wysyłki. Wartości nagłówka mogą wynosić od 0 do 360, gdzie 0 określa kierunek z kierunku północnym, 90 określa kierunek z kierunku północnym itd. |
TimeWindow
Przedziały czasu ograniczają czas zdarzenia, np. godzinę przyjazdu podczas wizyty lub godzinę rozpoczęcia i zakończenia pojazdu.
Progi bezterminowego przedziału czasu, startTime
i endTime
, wymuszają wymuszanie najwcześniejszej i ostatniej godziny zdarzenia, np. startTime <= event_time <=
endTime
. Dolna granica okna czasowego (softStartTime
) określa, czy zdarzenie ma nastąpić o softStartTime
lub po nim. Naliczane koszty będą proporcjonalne do tego, jak długo przed wystąpieniem zdarzenia softStartTime wystąpi zdarzenie. Górna granica okna czasowego (softEndTime
) określa, że zdarzenie ma nastąpić o softEndTime
lub wcześniej. Jest to koszt proporcjonalnie do czasu wystąpienia softEndTime
po wystąpieniu zdarzenia. startTime
, endTime
, softStartTime
i softEndTime
powinny mieścić się w globalnych limitach czasowych (patrz ShipmentModel.global_start_time
i ShipmentModel.global_end_time
) i respektować:
0 <= `startTime` <= `softStartTime` <= `endTime` and
0 <= `startTime` <= `softEndTime` <= `endTime`.
Zapis JSON |
---|
{ "startTime": string, "endTime": string, "softStartTime": string, "softEndTime": string, "costPerHourBeforeSoftStartTime": number, "costPerHourAfterSoftEndTime": number } |
Pola | |
---|---|
startTime |
Godzina rozpoczęcia twardego przedziału czasu. Jeśli nie określono inaczej, zostanie ustawiona wartość Sygnatura czasowa w formacie „Zulu” RFC3339 UTC z rozdzielczością nanosekundową i maksymalnie 9 cyframi po przecinku. Przykłady: |
endTime |
Godzina zakończenia twardego przedziału czasu. Jeśli nie określono inaczej, zostanie ustawiona wartość Sygnatura czasowa w formacie „Zulu” RFC3339 UTC z rozdzielczością nanosekundową i maksymalnie 9 cyframi po przecinku. Przykłady: |
softStartTime |
Czas uruchomienia łagodnego w przedziale czasu. Sygnatura czasowa w formacie „Zulu” RFC3339 UTC z rozdzielczością nanosekundową i maksymalnie 9 cyframi po przecinku. Przykłady: |
softEndTime |
Czas łagodnego zakończenia przedziału czasu. Sygnatura czasowa w formacie „Zulu” RFC3339 UTC z rozdzielczością nanosekundową i maksymalnie 9 cyframi po przecinku. Przykłady: |
costPerHourBeforeSoftStartTime |
Koszt na godzinę dodany do innych kosztów w modelu, jeśli zdarzenie wystąpiło przed softStartTime, jest obliczane jako:
Ten koszt musi być dodatni, a to pole można ustawić tylko wtedy, gdy ustawiono softStartTime. |
costPerHourAfterSoftEndTime |
Koszt na godzinę dodany do innych kosztów w modelu, jeśli zdarzenie wystąpi po
Ten koszt musi być dodatni, a to pole można skonfigurować tylko wtedy, gdy ustawiono |
Pojazd
Modelowanie pojazdu w problemie z wysyłką. Rozwiązanie problemu dotyczącego dostawy spowoduje utworzenie trasy dla tego pojazdu od startLocation
do endLocation
. Trasa to sekwencja wizyt (patrz ShipmentRoute
).
Zapis JSON |
---|
{ "displayName": string, "travelMode": enum ( |
Pola | |
---|---|
displayName |
Zdefiniowana przez użytkownika wyświetlana nazwa pojazdu. Może zawierać do 63 znaków i zawierać znaki UTF-8. |
travelMode |
Tryb podróży, który ma wpływ na drogi dostępne dla pojazdu oraz prędkość. Zobacz też |
startLocation |
Lokalizacja geograficzna, w której pojazd rozpoczyna się przed odebraniem przesyłek. Jeśli nie podasz żadnej wartości, pojazd rozpocznie się przy pierwszym odbiorze. Jeśli model dostawy ma czas trwania i macierze odległości, nie należy określać atrybutu |
startWaypoint |
Punkt pośredni reprezentujący lokalizację geograficzną, w której pojazd rozpoczyna się przed odebraniem przesyłek. Jeśli nie podasz wartości |
endLocation |
Lokalizacja geograficzna, do której pojazd kończy się po zakończeniu ostatniego |
endWaypoint |
Punkt pośredni reprezentujący lokalizację geograficzną, w której pojazd kończy się po zakończeniu ostatniego |
startTags[] |
Określa tagi dołączone do początku trasy pojazdu. Puste i zduplikowane ciągi znaków są niedozwolone. |
endTags[] |
Określa tagi dołączone na końcu trasy pojazdu. Puste i zduplikowane ciągi znaków są niedozwolone. |
startTimeWindows[] |
Przedziały czasu, w których pojazd może odjeżdżać z lokalizacji początkowej. Muszą one mieścić się w globalnych limitach czasu (patrz pola Przedziały czasu należące do tego samego pola powtarzanego muszą być rozłączone, tj. żadne przedziały czasu nie mogą się pokrywać z innym lub przylegać do niego i muszą być ułożone chronologicznie. Wartości |
endTimeWindows[] |
Przedziały czasu, w których pojazd może dotrzeć do miejsca docelowego. Muszą one mieścić się w globalnych limitach czasu (patrz pola Przedziały czasu należące do tego samego pola powtarzanego muszą być rozłączone, tj. żadne przedziały czasu nie mogą się pokrywać z innym lub przylegać do niego i muszą być ułożone chronologicznie. Wartości |
unloadingPolicy |
Egzekwowana na pojeździe zasada wyładowywania z pamięci. |
loadLimits |
Pojemność pojazdu (np. waga, objętość, liczba palet). Klucze na mapie to identyfikatory typu obciążenia zgodnie z kluczami w polu Obiekt zawierający listę par |
costPerHour |
Koszty pojazdu: wszystkie koszty sumują się i muszą mieć taką samą jednostkę jak Koszt za godzinę trasy pojazdu. Ten koszt jest stosowany do łącznego czasu podróży i obejmuje czas podróży, czas oczekiwania i czas wizyty. Użycie dodatku |
costPerTraveledHour |
Koszt za godzinę przejazdu na trasie pojazdu. Ten koszt jest stosowany tylko do czasu podróży daną trasą (tj. zarejestrowany w: |
costPerKilometer |
Koszt za kilometr na trasie pojazdu. Ten koszt jest stosowany do odległości podawanej w |
fixedCost |
Jeśli ten pojazd jest używany do obsługi przesyłki, zostanie zastosowany stały koszt. |
usedIfRouteIsEmpty |
To pole dotyczy pojazdów tylko wtedy, gdy na trasie nie jest możliwa obsługa przesyłek. Wskazuje, czy w tym przypadku pojazd należy uznać za używany. Jeśli ma wartość true (prawda), pojazd podróżuje z początku do miejsca docelowego nawet wtedy, gdy nie przyjmuje przesyłek. Pod uwagę brane są też koszty czasu i dystansu wynikające z rozpoczęcia przejazdu –> końcowa podróż. W przeciwnym razie pojazd nie podróżuje od początku do lokalizacji końcowej, a dla tego pojazdu nie ma zaplanowanego |
routeDurationLimit |
Limit stosowany do łącznego czasu trwania trasy pojazdu. W przypadku elementu |
travelDurationLimit |
Limit stosowany do czasu podróży na trasie pojazdu. Czas podróży na trasie dla danego elementu |
routeDistanceLimit |
Limit dotyczący całkowitej odległości na trasie pojazdu. Odległość trasy dla danego elementu |
extraVisitDurationForVisitType |
Określa mapę z ciągów visitTypes po czasy trwania. Czas trwania jest uzupełniony o czas Jeśli prośba o wizytę ma kilka typów, do każdego z nich na mapie zostanie dodany czas trwania. Obiekt zawierający listę par |
breakRule |
Opisuje harmonogram przerw, który ma być egzekwowany w tym pojeździe. Jeśli pole jest puste, w tym pojeździe nie zostaną zaplanowane żadne przerwy. |
label |
Określa etykietę tego pojazdu. Ta etykieta jest zgłaszana w odpowiedzi jako |
ignore |
Jeśli ma wartość Prawda, Jeśli przesyłka jest wykonywana przez zignorowany pojazd w Jeśli przesyłka jest wykonywana przez zignorowany pojazd w |
travelDurationMultiple |
Określa mnożnik, który można wykorzystać, aby wydłużyć lub skrócić czas podróży tego pojazdu. Na przykład ustawienie wartości 2,0 oznacza, że pojazd jest wolniejszy i ma czas podróży dwukrotnie dłuższy niż w przypadku standardowych pojazdów. Ta liczba nie ma wpływu na długość wizyty. Ma to wpływ na koszty, jeśli określono OSTRZEŻENIE: po zastosowaniu tej wielokrotności czasu podróży czas podróży zostanie zaokrąglony do najbliższej sekundy, ale przed wykonaniem jakichkolwiek operacji liczbowych, dlatego małe wielokrotność może spowodować utratę dokładności. Zobacz też |
TravelMode
Środki transportu dostępne dla pojazdów.
Powinien to być podzbiór trybów podróży preferowanego interfejsu API Google Maps Platform Routes. Więcej informacji znajdziesz na stronie https://developers.google.com/maps/documentation/routes_preferred/reference/rest/Shared.Types/RouteTravelMode.
Wartości w polu enum | |
---|---|
TRAVEL_MODE_UNSPECIFIED |
Nieokreślony środek transportu, odpowiednik DRIVING . |
DRIVING |
Tryb podróży odpowiadający wskazówkom dojazdu (samochód, ...). |
WALKING |
Tryb podróży odpowiadający trasom pieszym. |
UnloadingPolicy
Zasady dotyczące sposobu wyładowywania pojazdu. Dotyczy to tylko przesyłek obejmujących zarówno odbiór, jak i dostawę.
Inne dostawy są bezpłatne w dowolnym miejscu na trasie, niezależnie od: unloadingPolicy
.
Wartości w polu enum | |
---|---|
UNLOADING_POLICY_UNSPECIFIED |
Nieokreślone zasady wyładowywania – dostawy muszą następować zaraz po ich odbiorze. |
LAST_IN_FIRST_OUT |
Dostawy muszą mieć odwrotną kolejność |
FIRST_IN_FIRST_OUT |
Dostawy muszą mieć miejsce w tym samym zamówieniu co odbiór |
LoadLimit
Określa limit ładunku obowiązujący w przypadku pojazdu, np. „Ta ciężarówka może być maks. 3500 kg”. Zobacz loadLimits
.
Zapis JSON |
---|
{ "softMaxLoad": string, "costPerUnitAboveSoftMax": number, "startLoadInterval": { object ( |
Pola | |
---|---|
softMaxLoad |
Niewielka granica obciążenia. Zobacz |
costPerUnitAboveSoftMax |
Jeśli obciążenie przekroczy |
startLoadInterval |
Dopuszczalny odstęp czasu ładowania pojazdu na początku trasy. |
endLoadInterval |
Dopuszczalny odstęp czasu ładowania pojazdu na końcu trasy. |
maxLoad |
Maksymalna akceptowalna ilość obciążenia. |
Odstęp
Przedział czasu obciążenia akceptowalnego obciążenia.
Zapis JSON |
---|
{ "min": string, "max": string } |
Pola | |
---|---|
min |
Minimalne akceptowalne obciążenie. Musi wynosić ≥ 0. Jeśli podasz oba, |
max |
Maksymalne akceptowane obciążenie. Musi wynosić ≥ 0. Jeśli nie określono inaczej, maksymalne obciążenie nie jest ograniczone przez ten komunikat. Jeśli podasz oba, |
DurationLimit
Limit określający maksymalny czas trwania trasy pojazdu. Może być twarde lub miękkie.
Gdy zdefiniowano pole łagodnego limitu, należy zdefiniować razem zarówno próg pozornego limitu, jak i powiązany z nim koszt.
Zapis JSON |
---|
{ "maxDuration": string, "softMaxDuration": string, "quadraticSoftMaxDuration": string, "costPerHourAfterSoftMax": number, "costPerSquareHourAfterQuadraticSoftMax": number } |
Pola | |
---|---|
maxDuration |
Sztywny limit czasu trwania na maksymalną wartość maxDuration. Czas trwania w sekundach z maksymalnie 9 cyframi po przecinku, kończącym się cyframi „ |
softMaxDuration |
Poboczny limit nie powoduje egzekwowania maksymalnego czasu trwania, ale w przypadku naruszenia powoduje naliczanie opłat. Ten koszt jest sumowany na inne koszty zdefiniowane w modelu z tą samą jednostką. Jeśli zostanie zdefiniowana, Czas trwania w sekundach z maksymalnie 9 cyframi po przecinku, kończącym się cyframi „ |
quadraticSoftMaxDuration |
Poboczny limit nie wymusza maksymalnego czasu trwania, ale w przypadku naruszenia powoduje naliczenie kosztów, których długość jest równa kwadratowemu czasowi. Ten koszt jest sumowany na inne koszty zdefiniowane w modelu z tą samą jednostką. Jeśli zostanie zdefiniowana,
Czas trwania w sekundach z maksymalnie 9 cyframi po przecinku, kończącym się cyframi „ |
costPerHourAfterSoftMax |
Koszt za godzinę wynikający z naruszenia progu
Koszt nie może być liczbą ujemną. |
costPerSquareHourAfterQuadraticSoftMax |
Koszt za godzinę kwadratową w przypadku naruszenia progu Jeśli czas trwania nie przekracza progu, dodatkowy koszt wynosi 0. W przeciwnym razie koszt zależy od czasu trwania w następujący sposób:
Koszt nie może być liczbą ujemną. |
DistanceLimit
Limit określający maksymalną odległość, jaką można pokonać. Może być twarde lub miękkie.
Jeśli zdefiniowano nieujemny limit, zarówno softMaxMeters
, jak i costPerKilometerAboveSoftMax
muszą być zdefiniowane i nie mogą być ujemne.
Zapis JSON |
---|
{ "maxMeters": string, "softMaxMeters": string, "costPerKilometerAboveSoftMax": number } |
Pola | |
---|---|
maxMeters |
Sztywne ograniczenie dystansu do maksymalnej wartości maxMeter. Limit nie może być ujemny. |
softMaxMeters |
Łagodne ograniczenie nie powoduje egzekwowania limitu maksymalnej odległości, ale jego naruszenie powoduje naliczanie kosztów, które są sumowane na inne koszty zdefiniowane w modelu przy tej samej jednostce. Jeśli została określona, wartość parametru softMaxMeters musi być mniejsza niż wartość maxMeters i nie może być ujemna. |
costPerKilometerAboveSoftMax |
Koszt za kilometr naliczony, gdy odległość przekracza
Koszt nie może być liczbą ujemną. |
BreakRule
Zasady generowania przerw w ruchu w pojeździe (np. przerwy na lunch). Przerwa to ciągły okres, w którym pojazd pozostaje bezczynny w bieżącym położeniu i nie może dokonywać żadnych wizyt. Przerwa może wystąpić:
- podczas podróży między 2 wizytami (co obejmuje czas tuż przed wizytą lub bezpośrednio po niej, ale nie w trakcie wizyty), – w takim przypadku wydłuża się czas przewozu pomiędzy wizytami;
- lub przed uruchomieniem pojazdu (pojazd może nie uruchomić się w trakcie przerwy), w takim przypadku nie ma wpływu na czas uruchomienia pojazdu.
- lub po zakończeniu pojazdu (ditto, z godziną zakończenia pojazdu).
Zapis JSON |
---|
{ "breakRequests": [ { object ( |
Pola | |
---|---|
breakRequests[] |
Kolejność przerw. Przeczytaj wiadomość |
frequencyConstraints[] |
Obowiązują kilka zasad ( |
BreakRequest
Kolejność przerw (tj. ich liczbę i kolejność), która ma zastosowanie do każdego pojazdu, musi być wcześniej znana. Powtarzające się obiekty BreakRequest
określają tę sekwencję w kolejności, w jakiej muszą wystąpić. Przedziały czasu (earliestStartTime
/ latestStartTime
) mogą się pokrywać, ale muszą być zgodne z kolejnością (to jest zaznaczone).
Zapis JSON |
---|
{ "earliestStartTime": string, "latestStartTime": string, "minDuration": string } |
Pola | |
---|---|
earliestStartTime |
To pole jest wymagane. Dolna granica (włącznie) na początku przerwy. Sygnatura czasowa w formacie „Zulu” RFC3339 UTC z rozdzielczością nanosekundową i maksymalnie 9 cyframi po przecinku. Przykłady: |
latestStartTime |
To pole jest wymagane. Górna granica (włącznie) na początku przerwy. Sygnatura czasowa w formacie „Zulu” RFC3339 UTC z rozdzielczością nanosekundową i maksymalnie 9 cyframi po przecinku. Przykłady: |
minDuration |
To pole jest wymagane. Minimalny czas trwania przerwy. Musi być liczbą dodatnią. Czas trwania w sekundach z maksymalnie 9 cyframi po przecinku, kończącym się cyframi „ |
FrequencyConstraint
Można dodatkowo ograniczyć częstotliwość i czas trwania przerw określonych powyżej, narzucając minimalną częstotliwość przerw, np. „Co 12 godzin musi wystąpić przerwa o długości co najmniej 1 godziny”. Zakładając, że można to zinterpretować jako „w każdym 12-godzinnym okresie upływającym musi być co najmniej 1 przerwa trwająca co najmniej godzinę”, przykład ten będzie miałby postać FrequencyConstraint
:
{
minBreakDuration { seconds: 3600 } # 1 hour.
maxInterBreakDuration { seconds: 39600 } # 11 hours (12 - 1 = 11).
}
Czas i czas trwania przerw w rozwiązaniu uwzględnia wszystkie te ograniczenia, a także przedziały czasu i minimalne czasy trwania określone w zasadzie BreakRequest
.
W praktyce może obowiązywać zasada FrequencyConstraint
w przypadku przerw, które nie następują po sobie. Na przykład ten harmonogram uwzględnia przykład „1 godz. co 12 godz.”:
04:00 vehicle start
.. performing travel and visits ..
09:00 1 hour break
10:00 end of the break
.. performing travel and visits ..
12:00 20-min lunch break
12:20 end of the break
.. performing travel and visits ..
21:00 1 hour break
22:00 end of the break
.. performing travel and visits ..
23:59 vehicle end
Zapis JSON |
---|
{ "minBreakDuration": string, "maxInterBreakDuration": string } |
Pola | |
---|---|
minBreakDuration |
To pole jest wymagane. Minimalny czas trwania przerwy dla tego ograniczenia. Nieujemna. Zobacz opis: Czas trwania w sekundach z maksymalnie 9 cyframi po przecinku, kończącym się cyframi „ |
maxInterBreakDuration |
To pole jest wymagane. Maksymalny dozwolony odstęp w dowolnym przedziale czasu na trasie, który nie uwzględnia przynajmniej częściowo przerwy Czas trwania w sekundach z maksymalnie 9 cyframi po przecinku, kończącym się cyframi „ |
DurationDistanceMatrix
Określa czas trwania wizyty i matrycę odległości od lokalizacji początkowych pojazdów do odwiedzenia oraz lokalizacji zakończenia pojazdu.
Zapis JSON |
---|
{
"rows": [
{
object ( |
Pola | |
---|---|
rows[] |
Określa wiersze macierzy czasu trwania i odległości. Liczba elementów musi być równa |
vehicleStartTag |
Tag określający, do których pojazdów ma zastosowanie dany czas trwania i matryca odległości. Jeśli pole jest puste, dotyczy to wszystkich pojazdów i może istnieć tylko jedna matryca. Każdy początek pojazdu musi pasować dokładnie do jednej macierzy, tj. dokładnie jedno z jego pola Wszystkie macierze muszą mieć inny parametr |
Wiersz
Określa wiersz macierzy czasu trwania i odległości.
Zapis JSON |
---|
{ "durations": [ string ], "meters": [ number ] } |
Pola | |
---|---|
durations[] |
Wartości czasu trwania poszczególnych wierszy. Liczba elementów musi być równa Czas trwania w sekundach z maksymalnie 9 cyframi po przecinku, kończącym się cyframi „ |
meters[] |
Wartości odległości w danym wierszu. Jeśli w modelu nie ma kosztów ani ograniczeń, to pole może pozostać puste. W przeciwnym razie liczba elementów musi być taka sama jak |
TransitionAttributes
Określa atrybuty przejścia między dwoma kolejnymi wizytami na trasie. Do tego samego przejścia może zastosować kilka funkcji TransitionAttributes
. W takim przypadku wszystkie dodatkowe koszty sumują się i ma zastosowanie najbardziej rygorystyczne ograniczenie lub limit (po naturalnej semantyce „ORAZ”).
Zapis JSON |
---|
{
"srcTag": string,
"excludedSrcTag": string,
"dstTag": string,
"excludedDstTag": string,
"cost": number,
"costPerKilometer": number,
"distanceLimit": {
object ( |
Pola | |
---|---|
srcTag |
tagów określających zestaw przejść (src->dst), do których mają zastosowanie te atrybuty. Wizyta źródłowa lub początek pojazdu pasuje do wartości |
excludedSrcTag |
Zobacz |
dstTag |
Docelowa wizyta lub koniec pojazdu pasuje do wartości |
excludedDstTag |
Zobacz |
cost |
Określa koszt wykonania tej zmiany. Jest to ta sama jednostka co wszystkie inne koszty w modelu i nie może być ujemna. Jest on stosowany do wszystkich innych kosztów. |
costPerKilometer |
Określa koszt kilometra stosowanego do odległości pokonanej podczas wykonywania tej zmiany. Łączna kwota to |
distanceLimit |
Określa limit odległości pokonanej podczas wykonywania tego przejścia. Od 2021 roku obsługiwane są tylko miękkie limity. |
delay |
Określa opóźnienie występujące podczas wykonywania tej operacji przenoszenia. Opóźnienie to zawsze występuje po zakończeniu wizyty źródłowej i przed rozpoczęciem wizyty docelowej. Czas trwania w sekundach z maksymalnie 9 cyframi po przecinku, kończącym się cyframi „ |
ShipmentTypeIncompatibility
Określa niezgodności między przesyłkami w zależności od typu dostawy. Wyświetlanie niezgodnych przesyłek na tej samej trasie jest ograniczone na podstawie trybu niezgodności.
Zapis JSON |
---|
{
"types": [
string
],
"incompatibilityMode": enum ( |
Pola | |
---|---|
types[] |
Lista niezgodnych typów. Dwie przesyłki o różnych wartościach ( |
incompatibilityMode |
Tryb został zastosowany do niezgodności. |
IncompatibilityMode
Środki transportu określające sposób ograniczenia wyglądu niezgodnych przesyłek na tej samej trasie.
Wartości w polu enum | |
---|---|
INCOMPATIBILITY_MODE_UNSPECIFIED |
Nieokreślony tryb niezgodności. Tej wartości nie należy nigdy używać. |
NOT_PERFORMED_BY_SAME_VEHICLE |
W tym trybie 2 przesyłki o niezgodnych typach nie mogą nigdy korzystać z tego samego pojazdu. |
NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY |
W przypadku 2 przesyłek z niezgodnymi typami przesyłek w trybie niezgodności
|
ShipmentTypeRequirement
Określa wymagania dotyczące przesyłek na podstawie ich typu dostawy. Szczegóły wymagania są określane przez tryb wymagań.
Zapis JSON |
---|
{
"requiredShipmentTypeAlternatives": [
string
],
"dependentShipmentTypes": [
string
],
"requirementMode": enum ( |
Pola | |
---|---|
requiredShipmentTypeAlternatives[] |
Lista alternatywnych typów dostawy, których wymaga |
dependentShipmentTypes[] |
Wszystkie przesyłki określonego typu w polu UWAGA: łańcuchy wymagań, takie jak |
requirementMode |
Tryb został zastosowany do wymagania. |
RequirementMode
Środki transportu definiujące wygląd przesyłek zależnych na trasie.
Wartości w polu enum | |
---|---|
REQUIREMENT_MODE_UNSPECIFIED |
Tryb nieokreślonych wymagań. Tej wartości nie należy nigdy używać. |
PERFORMED_BY_SAME_VEHICLE |
W tym trybie wszystkie przesyłki „zależne” muszą być przesyłki z tym samym pojazdem, co co najmniej jedna z „wymaganych” przesyłek. |
IN_SAME_VEHICLE_AT_PICKUP_TIME |
W trybie „Zależny” odbiór w przypadku przesyłki musi więc mieć:
|
IN_SAME_VEHICLE_AT_DELIVERY_TIME |
Tak jak wcześniej, z tą różnicą, że w przypadku przesyłki „zależnej” pojazd musi mieć „wymagane” dostawę w momencie dostawy. |
PrecedenceRule
Reguła pierwszeństwa między 2 zdarzeniami (każde z nich to odbiór lub dostawa przesyłki): zdarzenie „pierwsze” musi się rozpocząć co najmniej offsetDuration
po rozpoczęciu „pierwszego”.
Kilka pierwszeństwa może odnosić się do tych samych (lub powiązanych) zdarzeń, np. „odbiór produktu B następuje po dostawie A” oraz „odbiór produktu C następuje po odbiorze produktu B”.
Co więcej, pierwszeństwo mają zastosowanie tylko wtedy, gdy realizowane są obie dostawy, a w przeciwnym razie są one ignorowane.
Zapis JSON |
---|
{ "firstIsDelivery": boolean, "secondIsDelivery": boolean, "offsetDuration": string, "firstIndex": integer, "secondIndex": integer } |
Pola | |
---|---|
firstIsDelivery |
Wskazuje, czy „pierwsze” zdarzenie jest wyświetleniem. |
secondIsDelivery |
Wskazuje, czy zdarzenie „second” jest wyświetleniem. |
offsetDuration |
Przesunięcie między pierwszym a drugim zdarzeniem. Ta wartość może być ujemna. Czas trwania w sekundach z maksymalnie 9 cyframi po przecinku, kończącym się cyframi „ |
firstIndex |
Indeks dostawy dla „pierwszego” zdarzenia. To pole musi być określone. |
secondIndex |
Indeks dostawy dla drugiego zdarzenia. To pole musi być określone. |