- 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 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
Zapis JSON |
---|
{ "shipments": [ { object ( |
Pola | |
---|---|
shipments[] |
Zestaw dostaw, które muszą zostać zrealizowane w ramach modelu. |
vehicles[] |
Zestaw pojazdów, których można używać do odwiedzin. |
globalStartTime |
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 Sygnatura czasowa w RFC3339 UTC „Zulu” z rozdzielczością nanosekundową i maksymalnie 9 cyframi po przecinku. Przykłady: |
globalEndTime |
Jeśli nie jest ustawiona, domyślnie używana jest wartość 00:00:00 UTC, 1 stycznia 1971 r. (tzn. sekund: 31536000, nanos: 0). Sygnatura czasowa w RFC3339 UTC „Zulu” z rozdzielczością nanosekundową i maksymalnie 9 cyframi po przecinku. Przykłady: |
globalDurationCostPerHour |
„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 |
durationDistanceMatrices[] |
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:
|
durationDistanceMatrixSrcTags[] |
tagi definiujące źródła macierzy czasu trwania i odległości; Funkcja Znaczniki odpowiadają wartości |
durationDistanceMatrixDstTags[] |
tagów definiujących docelowe macierze czasu trwania i odległości; Znaczniki odpowiadają wartości |
transitionAttributes[] |
Atrybuty przejścia zostały dodane do modelu. |
shipmentTypeIncompatibilities[] |
Zestawy niezgodnych typów przesyłki (patrz |
shipmentTypeRequirements[] |
Zestawy wymagań |
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 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. |
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ą).
Zapis JSON |
---|
{ "displayName": string, "pickups": [ { object ( |
Pola | |
---|---|
displayName |
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. |
loadDemands |
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. Obiekt zawierający listę par |
allowedVehicleIndices[] |
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 |
costsPerVehicle[] |
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 |
costsPerVehicleIndices[] |
Indeksy pojazdów, których dotyczy |
pickupToDeliveryAbsoluteDetourLimit |
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. Czas trwania w sekundach składający się z maksymalnie 9 cyfr po przecinku, kończący się cyfrą „ |
pickupToDeliveryTimeLimit |
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. Czas trwania w sekundach składający się z maksymalnie 9 cyfr po przecinku, kończący się cyfrą „ |
shipmentType |
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 |
penaltyCost |
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. |
pickupToDeliveryRelativeDetourLimit |
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. |
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).
Zapis JSON |
---|
{ "arrivalLocation": { object ( |
Pola | |
---|---|
arrivalLocation |
Lokalizacja geograficzna, do której przyjeżdża pojazd podczas wykonywania tej czynności ( |
arrivalWaypoint |
Punkt pośredni, do którego przyjeżdża pojazd, wykonując tę czynność |
departureLocation |
Lokalizacja geograficzna, z której pojazd odjeżdża po ukończeniu tego celu: |
departureWaypoint |
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. |
timeWindows[] |
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 Czas trwania w sekundach składający się z maksymalnie 9 cyfr po przecinku, kończący się cyfrą „ |
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 |
loadDemands |
Wczytywanie żądań dotyczących tej wizyty. Działa ono tak samo jak pole Obiekt zawierający listę par |
visitTypes[] |
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 |
LatLng
Obiekt reprezentujący parę szerokości i długości geograficznej. Jest ona wyrażona jako para podwójnej precyzji reprezentująca stopnie szerokości i długości geograficznej. O ile nie wskazano inaczej, ten obiekt musi być zgodny ze standardem WGS84. Wartości muszą mieścić się 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 od -180,0 do +180,0]. |
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.
Zapis JSON |
---|
{ "sideOfRoad": boolean, // Union field |
Pola | |
---|---|
sideOfRoad |
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. |
placeId |
Identyfikator miejsca POI powiązany z punktem pośrednim. |
Lokalizacja
Obejmuje lokalizację (punkt geograficzny i opcjonalny nagłówek).
Zapis JSON |
---|
{
"latLng": {
object ( |
Pola | |
---|---|
latLng |
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. |
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, startTime
i endTime
, egzekwują najwcześniejszy i najnowszy czas zdarzenia, na przykład startTime <= event_time <=
endTime
. Dolna granica łagodnego okresu czasu (softStartTime
) określa preferencję, aby zdarzenie miało miejsce softStartTime
lub później przez naliczanie kosztu proporcjonalnie do czasu, jaki upłynął przed wystąpieniem zdarzenia softStartTime. Górna granica zakresu czasowego (softEndTime
) określa preferencję, aby zdarzenie miało miejsce softEndTime
lub wcześniej, ponieważ powoduje naliczanie kosztów proporcjonalnie do czasu, jaki upłynął od zdarzenia 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 warunki:
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 |
Trudny czas rozpoczęcia okna czasowego. Jeśli nie określono inaczej, wartość zostanie ustawiona na Sygnatura czasowa w RFC3339 UTC „Zulu” z rozdzielczością nanosekundową i maksymalnie 9 cyframi po przecinku. Przykłady: |
endTime |
Trudny czas zakończenia przedziału czasowego. Jeśli nie określono inaczej, wartość zostanie ustawiona na Sygnatura czasowa w RFC3339 UTC „Zulu” z rozdzielczością nanosekundową i maksymalnie 9 cyframi po przecinku. Przykłady: |
softStartTime |
Godzina łagodnego rozpoczęcia przedziału czasu. Sygnatura czasowa w RFC3339 UTC „Zulu” z rozdzielczością nanosekundową i maksymalnie 9 cyframi po przecinku. Przykłady: |
softEndTime |
Godzina zakończenia okresu. Sygnatura czasowa w RFC3339 UTC „Zulu” z rozdzielczością nanosekundową i maksymalnie 9 cyframi po przecinku. Przykłady: |
costPerHourBeforeSoftStartTime |
Koszt za godzinę dodany do innych kosztów w modelu, jeśli zdarzenie nastąpi przed softStartTime. Wartość jest obliczana według wzoru:
Ten koszt musi być dodatni, a pole można ustawić tylko wtedy, gdy skonfigurowano softStartTime. |
costPerHourAfterSoftEndTime |
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ę |
Pojazd
Modelowanie pojazdu w przypadku problemu z dostawą. Rozwiązanie problemu z dostawą spowoduje utworzenie trasy dla tego pojazdu rozpoczynającej się od startLocation
i kończącej na endLocation
. Trasa jest sekwencją wizyt (patrz ShipmentRoute
).
Zapis JSON |
---|
{ "displayName": string, "travelMode": enum ( |
Pola | |
---|---|
displayName |
Zdefiniowana przez użytkownika wyświetlana nazwa pojazdu. Może składać się z maksymalnie 63 znaków i zawierać znaki UTF-8. |
travelMode |
Tryb podróży, który wpływa na drogi, z których może korzystać pojazd, i jego prędkość. Zobacz też |
startLocation |
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ć |
startWaypoint |
Punkt pośredni reprezentujący lokalizację geograficzną, w której pojazd rozpoczyna się przed odebraniem przesyłki. Jeśli nie podasz ani atrybutu |
endLocation |
Lokalizacja geograficzna, w której kończy się pojazd ( |
endWaypoint |
Punkt pośredni reprezentujący lokalizację geograficzną, w której kończy się pojazd po zakończeniu ostatniego |
startTags[] |
Określa tagi dołączone do początku trasy pojazdu. Puste lub zduplikowane ciągi znaków są niedozwolone. |
endTags[] |
Określa tagi dołączone na końcu trasy pojazdu. Puste lub zduplikowane ciągi znaków są niedozwolone. |
startTimeWindows[] |
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 |
endTimeWindows[] |
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 |
unloadingPolicy |
W pojeździe egzekwowane są zasady wyładowywania. |
loadLimits |
Pojemność pojazdu (np. waga, objętość, liczba palet). Klucze na mapie to identyfikatory typu obciążenia, zgodne z kluczami w polu Obiekt zawierający listę par |
costPerHour |
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 |
costPerTraveledHour |
Koszt przebytej godziny trasy pojazdu. Koszt ten jest stosowany tylko do czasu podróży na danej trasie (tj. raportowanego w |
costPerKilometer |
Koszt za kilometr trasy pojazdu. Koszt ten jest stosowany do odległości podawanej w raportach |
fixedCost |
Stały koszt stosowany, jeśli ten pojazd służy do obsługi przesyłki. |
usedIfRouteIsEmpty |
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 |
routeDurationLimit |
Limit został zastosowany do łącznego czasu trwania trasy pojazdu. W danym okresie ( |
travelDurationLimit |
Limit został zastosowany do czasu podróży na trasie pojazdu. W danym okresie ( |
routeDistanceLimit |
Limit został zastosowany do całkowitej odległości na trasie pojazdu. W danym regionie |
extraVisitDurationForVisitType |
Określa mapowanie z ciągów visitTypes 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. Obiekt zawierający listę par |
breakRule |
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 |
travelDurationMultiple |
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ż |
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 unloadingPolicy
.
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 |
LoadLimit
Określa limit obciążenia mający zastosowanie do pojazdu, np. „ta ciężarówka może przewieźć do 3500 kg”. Zobacz loadLimits
.
Zapis JSON |
---|
{ "softMaxLoad": string, "costPerUnitAboveSoftMax": number, "startLoadInterval": { object ( |
Pola | |
---|---|
softMaxLoad |
Ograniczony limit obciążenia. Zobacz |
costPerUnitAboveSoftMax |
Jeśli obciążenie na trasie tego pojazdu kiedykolwiek przekroczy |
startLoadInterval |
Dopuszczalny czas obciążenia pojazdu na początku trasy. |
endLoadInterval |
Dopuszczalny czas obciążenia pojazdu na końcu trasy. |
maxLoad |
Maksymalna akceptowalna ilość obciążenia. |
Interwał
Odstęp między akceptowanymi wielkościami wczytywania.
Zapis JSON |
---|
{ "min": string, "max": string } |
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, |
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.
Zapis JSON |
---|
{ "maxDuration": string, "softMaxDuration": string, "quadraticSoftMaxDuration": string, "costPerHourAfterSoftMax": number, "costPerSquareHourAfterQuadraticSoftMax": number } |
Pola | |
---|---|
maxDuration |
Stały limit ogranicza czas trwania do maksymalnie maxDuration. Czas trwania w sekundach składający się z maksymalnie 9 cyfr po przecinku, kończący się cyfrą „ |
softMaxDuration |
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, Czas trwania w sekundach składający się z maksymalnie 9 cyfr po przecinku, kończący się cyfrą „ |
quadraticSoftMaxDuration |
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,
Czas trwania w sekundach składający się z maksymalnie 9 cyfr po przecinku, kończący się cyfrą „ |
costPerHourAfterSoftMax |
Koszt za godzinę po przekroczeniu progu
Koszt nie może być ujemny. |
costPerSquareHourAfterQuadraticSoftMax |
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. |
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 softMaxMeters
, jak i costPerKilometerAboveSoftMax
, i nie mogą być ujemne.
Zapis JSON |
---|
{ "maxMeters": string, "softMaxMeters": string, "costPerKilometerAboveSoftMax": number } |
Pola | |
---|---|
maxMeters |
Twardy limit ogranicza odległość wynoszącą maksymalnie maxMeters. Limit nie może być ujemny. |
softMaxMeters |
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ą. Zdefiniowana wartość softMaxMeters musi być mniejsza niż maxMeters i nie może być ujemna. |
costPerKilometerAboveSoftMax |
Koszt za kilometr naliczany, jeśli odległość przekracza limit
Koszt nie może być ujemny. |
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).
Zapis JSON |
---|
{ "breakRequests": [ { object ( |
Pola | |
---|---|
breakRequests[] |
Kolejność przerw. Zobacz wiadomość: |
frequencyConstraints[] |
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 (earliestStartTime
/ latestStartTime
) mogą się pokrywać, ale muszą być zgodne z zamówieniem (jest to zaznaczone).
Zapis JSON |
---|
{ "earliestStartTime": string, "latestStartTime": string, "minDuration": string } |
Pola | |
---|---|
earliestStartTime |
Wymagane. Dolna granica (włącznie) na początku przerwy. Sygnatura czasowa w RFC3339 UTC „Zulu” z rozdzielczością nanosekundową i maksymalnie 9 cyframi po przecinku. Przykłady: |
latestStartTime |
Wymagane. Górna granica (włącznie) na początku przerwy. Sygnatura czasowa w RFC3339 UTC „Zulu” z rozdzielczością nanosekundową i maksymalnie 9 cyframi po przecinku. Przykłady: |
minDuration |
Wymagane. Minimalny czas trwania przerwy. Musi być liczbą dodatnią. Czas trwania w sekundach składający się z maksymalnie 9 cyfr po przecinku, kończący się cyfrą „ |
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
:
{
minBreakDuration { seconds: 3600 } # 1 hour.
maxInterBreakDuration { 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
Zapis JSON |
---|
{ "minBreakDuration": string, "maxInterBreakDuration": string } |
Pola | |
---|---|
minBreakDuration |
Wymagane. Minimalny czas trwania przerwy dla tego ograniczenia. Nieujemna. Zobacz opis: Czas trwania w sekundach składający się z maksymalnie 9 cyfr po przecinku, kończący się cyfrą „ |
maxInterBreakDuration |
Wymagane. Maksymalny dozwolony zakres czasu trwania dowolnego przedziału czasu na trasie, który nie zawiera przynajmniej częściowej przerwy wynoszącej Czas trwania w sekundach składający się z maksymalnie 9 cyfr po przecinku, kończący się cyfrą „ |
DurationDistanceMatrix
Określa czas trwania i tablicę odległości od wizyty i miejsca rozpoczęcia podróży pojazdu oraz lokalizacji końcowej pojazdu.
Zapis JSON |
---|
{
"rows": [
{
object ( |
Pola | |
---|---|
rows[] |
Określa wiersze macierzy czasu trwania i odległości. Musi się składać z tylu elementów: |
vehicleStartTag |
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.
Zapis JSON |
---|
{ "durations": [ string ], "meters": [ number ] } |
Pola | |
---|---|
durations[] |
Czas trwania danego wiersza. Musi się składać z tylu elementów: Czas trwania w sekundach składający się z maksymalnie 9 cyfr po przecinku, kończący się cyfrą „ |
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 |
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”).
Zapis JSON |
---|
{
"srcTag": string,
"excludedSrcTag": string,
"dstTag": string,
"excludedDstTag": string,
"cost": number,
"costPerKilometer": number,
"distanceLimit": {
object ( |
Pola | |
---|---|
srcTag |
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 |
excludedSrcTag |
Zobacz |
dstTag |
Wizyty w miejscu docelowym lub data zakończenia pojazdu pasują do tych, które |
excludedDstTag |
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. |
costPerKilometer |
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 |
distanceLimit |
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. Czas trwania w sekundach składający się z maksymalnie 9 cyfr po przecinku, kończący się cyfrą „ |
ShipmentTypeIncompatibility
Określa niezgodności między dostawami w zależności od parametru deliveryType. Wyświetlanie niezgodnych przesyłek na tej samej trasie jest ograniczone ze względu na tryb niezgodności.
Zapis JSON |
---|
{
"types": [
string
],
"incompatibilityMode": enum ( |
Pola | |
---|---|
types[] |
Lista niezgodnych typów. Dwie przesyłki, których |
incompatibilityMode |
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 przesyłek na podstawie ich dostawy. Konkretne wymagania są określane przez tryb wymagań.
Zapis JSON |
---|
{
"requiredShipmentTypeAlternatives": [
string
],
"dependentShipmentTypes": [
string
],
"requirementMode": enum ( |
Pola | |
---|---|
requiredShipmentTypeAlternatives[] |
Lista alternatywnych typów przesyłek wymaganych w dokumencie |
dependentShipmentTypes[] |
Wszystkie przesyłki o typie podanym w polu UWAGA: łańcuchy wymagań, takie jak |
requirementMode |
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. |
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 offsetDuration
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.
Zapis JSON |
---|
{ "firstIsDelivery": boolean, "secondIsDelivery": boolean, "offsetDuration": string, "firstIndex": integer, "secondIndex": integer } |
Pola | |
---|---|
firstIsDelivery |
Wskazuje, czy „pierwszy” zdarzenie to dostawa. |
secondIsDelivery |
Wskazuje, czy parametr „second” zdarzenie to dostawa. |
offsetDuration |
Przesunięcie między pierwszą wartością i „drugi” . Wynik może być ujemny. Czas trwania w sekundach składający się z maksymalnie 9 cyfr po przecinku, kończący się cyfrą „ |
firstIndex |
Indeks dostawy pierwszego produktu . To pole musi być określone. |
secondIndex |
Indeks dostawy „sekundy” . To pole musi być określone. |