- Zapis JSON
- Wysyłka
- VisitRequest
- LatLng
- Waypoint
- Lokalizacja
- TimeWindow
- Pojazd
- TravelMode
- RouteModifiers
- UnloadingPolicy
- LoadLimit
- Odstęp czasu
- LoadCost
- 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ą:
- kosztu wyznaczania trasy dla pojazdów (suma kosztu na godzinę, kosztu na czas przejazdu i kosztów stałych na wszystkie pojazdy);
- kary za niewywiązanie się z obowiązku dostawy.
- globalny koszt dostaw
| Zapis JSON |
|---|
{ "shipments": [ { object ( |
| Pola | |
|---|---|
shipments[] |
Zestaw dostaw, które muszą zostać wykonane w modelu. |
vehicles[] |
Zestaw pojazdów, których można używać do odwiedzin. |
globalStartTime |
Globalny czas rozpoczęcia i zakończenia modelu: nie można uznać za prawidłowego żadnego czasu spoza tego zakresu. Zakres czasowy modelu musi być krótszy niż rok, czyli Gdy używasz pól Sygnatura czasowa w formacie UTC „Zulu” zdefiniowanym w dokumencie RFC 3339, z dokładnością do nanosekund i maksymalnie 9 miejsc 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 formacie UTC „Zulu” zdefiniowanym w dokumencie RFC 3339, z dokładnością do nanosekund i maksymalnie 9 miejsc po przecinku. Przykłady: |
globalDurationCostPerHour |
„Globalny czas trwania” całego planu to różnica między najwcześniejszym obowiązującym czasem rozpoczęcia a najnowszym obowiązującym czasem zakończenia wszystkich pojazdów. Użytkownicy mogą przypisać koszt za godzinę do danej ilości, 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 jest puste, zamiast niego używane są odległości na mapach Google lub geodezyjne, w zależności od wartości pola Przykłady użycia:
|
durationDistanceMatrixSrcTags[] |
Tagi definiujące źródła czasu trwania oraz macierzy odległości; Znaczniki odpowiadają wartości |
durationDistanceMatrixDstTags[] |
Tagi określające miejsca docelowe macierzy 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 jego trasa obejmuje co najmniej jedną dostawę. 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ć dodatni. |
Wysyłka
Dostawa pojedynczego produktu, od odbioru do jednej dostawy. Aby przesyłka została uznana za zrealizowaną, pojazd musi odwiedzić jedną z lokalizacji odbioru (i odpowiednio zmniejszyć ilość wolnych miejsc), a następnie odwiedzić jedną z lokalizacji dostawy (i odpowiednio zwiększyć ilość wolnych miejsc).
| Zapis JSON |
|---|
{ "displayName": string, "pickups": [ { object ( |
| Pola | |
|---|---|
displayName |
Zdefiniowana przez użytkownika nazwa wyświetlana przesyłki. Może on zawierać maksymalnie 63 znaki i 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 sposobów 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. |
allowedVehicleIndices[] |
Zestaw pojazdów, które mogą zrealizować tę przesyłkę. Jeśli pole jest puste, wszystkie pojazdy mogą je wykonać. 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, do których ma zastosowanie |
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. Niech na przykład t będzie najkrótszym czasem potrzebnym na dotarcie z wybranego miejsca odbioru bezpośrednio 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 pojazdów. Czas trwania w sekundach składający się z maksymalnie dziewięciu cyfr po przecinku i kończący się „ |
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 od tego, które alternatywne rozwiązania zostaną wybrane do odbioru i dostawy, 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ą „ |
shipmentType |
Niepusty ciąg znaków określający „typ” przesyłki. Ta funkcja może służyć do definiowania niezgodności lub wymagań między Różni się od |
label |
Określa etykietę dla tej przesyłki. Ta etykieta jest raportowana w odpowiedzi w |
ignore |
Jeśli tak, pomiń tę przesyłkę, ale nie stosuj Ignorowanie dostawy powoduje błąd weryfikacji, jeśli w modelu występują jakiekolwiek Dostawa realizowana w |
penaltyCost |
Jeśli dostawa nie zostanie ukończona, kara zostanie dodana do całkowitego 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 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 czas objazdu w porównaniu z najkrótszą ścieżką od odbioru do dostawy. Jeśli jest podany, musi być dodatni, a przesyłka musi zawierać co najmniej odbiór i dostawę. 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. 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 2017 r. objazdy są obsługiwane tylko wtedy, gdy czas podróży nie zależy od pojazdów. |
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 | |
|---|---|
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 orientacyjny, w którym pojazd wyrusza po zakończeniu tego |
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 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 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 |
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żna go używać do płacenia różnych kosztów za odbiór lub dostawę przesyłki. Te koszty muszą być wyrażone w tych samych jednostkach co |
loadDemands |
Wczytaj wymagania dotyczące tego żądania wizyty. To pole jest podobne do pola |
visitTypes[] |
Określa typy wizyt. Może ona służyć do przydzielenia dodatkowego czasu potrzebnego pojazdowi na wykonanie tej wizyty (patrz Typ może wystąpić 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. Jeśli nie określono inaczej, 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 pośrednie oznaczają miejsca przyjazdu i wyjazdu w żądaniach VisitRequests oraz lokalizacje początkowe i końcowe Pojazdy.
| 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 przebiegać 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 trybie podróży „SPACER”. |
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 opcjonalnego nagłówka. |
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 kontrolnego. |
heading |
Nagłówek kompasu powią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.
Wartości graniczne sztywnego przedziału czasu, czyli 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 łagodnego okresu czasu (softEndTime) określa preferencję, aby zdarzenie miało miejsce softEndTime lub wcześniej przez 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 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 | |
|---|---|
startTime |
Czas rozpoczęcia okna czasowego. Jeśli nie określono inaczej, wartość zostanie ustawiona na Sygnatura czasowa w formacie UTC „Zulu” zdefiniowanym w dokumencie RFC 3339, z dokładnością do nanosekund i maksymalnie 9 miejsc po przecinku. Przykłady: |
endTime |
Czas zakończenia sztywnego przedziału czasu. Jeśli nie określono inaczej, wartość zostanie ustawiona na Sygnatura czasowa w formacie RFC3339 UTC „Zulu” z rozdzielczością nanosekundy i maksymalnie 9 cyframi po przecinku. Przykłady: |
softStartTime |
Godzina łagodnego rozpoczęcia przedziału czasu. Sygnatura czasowa w formacie RFC3339 UTC „Zulu” z rozdzielczością nanosekundy i maksymalnie 9 cyframi po przecinku. Przykłady: |
softEndTime |
Czas zakończenia przedziału czasu (miękki). Sygnatura czasowa w formacie RFC3339 UTC „Zulu” z rozdzielczością nanosekundy i maksymalnie 9 cyframi po przecinku. Przykłady: |
costPerHourBeforeSoftStartTime |
Koszt za godzinę dodany do innych kosztów w modelu, jeśli zdarzenie wystą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
Model 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 nazwa wyświetlana 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ż |
routeModifiers |
Zestaw warunków, które wpływają na sposób obliczania tras dla danego pojazdu. |
startLocation |
Geograficzna lokalizacja, w której pojazd rozpoczyna przejazd przed odbiorem przesyłek. Jeśli nie zostanie określony, pojazd rozpoczyna kurs od pierwszego odbioru. Jeśli model dostawy zawiera macierze czasu i odległości, nie można określić parametru |
startWaypoint |
Punkt drogi reprezentujący lokalizację geograficzną, w której pojazd rozpoczyna przejazd przed odbiorem przesyłek. 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. Pustych lub powtarzających się ciągów znaków nie można używać. |
startTimeWindows[] |
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 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 |
Zasady rozładunku obowiązujące w pojazdach. |
loadLimits |
Pojemność pojazdu (np. waga, objętość, liczba palet). Klucze na mapie to identyfikatory typu obciążenia, zgodne z kluczami w polu |
costPerHour |
Koszty pojazdu: wszystkie koszty są sumowane i muszą być wyrażone w tej samej jednostce co Koszt za godzinę trasy pojazdu. Koszt ten jest naliczany za cały czas trwania trasy, w tym czas podróży, oczekiwania i wizyty. Użycie usługi |
costPerTraveledHour |
Koszt godziny przejazdu pojazdu. Ten koszt jest stosowany tylko do czasu przejazdu po trasie (czyli podanego w |
costPerKilometer |
Koszt przejechania 1 km trasy przez pojazd. Ten koszt jest stosowany do odległości podanej w |
fixedCost |
Stały koszt stosowany, jeśli ten pojazd służy do obsługi przesyłki. |
usedIfRouteIsEmpty |
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 od początku do końca. W przeciwnym razie nie będzie podróżować z początku do miejsca docelowego, a dla tego pojazdu nie zaplanowano żadnych |
routeDurationLimit |
Limit zastosowany do łącznego czasu trwania trasy pojazdu. W danym okresie ( |
travelDurationLimit |
Ograniczenie czasu trwania przejazdu na trasie pojazdu. W danym |
routeDistanceLimit |
Ograniczenie stosowane do całkowitej odległości przebytej przez pojazd. W danym regionie |
extraVisitDurationForVisitType |
Określa mapę od ciągów znaków visitTypes do długości. Czas trwania jest uzupełnieniem Jeśli prośba o wizytę ma kilka typów, na mapie zostanie dodany czas trwania dla każdego z nich. |
breakRule |
Opisuje harmonogram przerw, który ma być stosowany 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 wartość Jeśli dostawa jest realizowana przez zignorowany pojazd w Jeśli przesyłka jest realizowana przez zignorowany pojazd w |
travelDurationMultiple |
Określa współczynnik mnożenia, który może być używany do zwiększania lub zmniejszania czasu przejazdu 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 koszt, 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, 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 Preferred API tras Google Maps Platform; zobacz: https://developers.google.com/maps/documentation/routes/reference/rest/v2/RouteModifiers.
| Zapis JSON |
|---|
{ "avoidTolls": boolean, "avoidHighways": boolean, "avoidFerries": boolean, "avoidIndoor": boolean } |
| Pola | |
|---|---|
avoidTolls |
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. |
avoidHighways |
Określa, czy w uzasadnionych przypadkach unikać autostrad. Priorytet będą miały trasy niezawierające autostrad. Dotyczy tylko pojazdów z silnikiem. |
avoidFerries |
Określa, czy w uzasadnionych przypadkach ma być unikana przeprawa promowa. Preferowane będą trasy nieobejmujące przejazdów promem. Dotyczy tylko pojazdów z silnikiem. |
avoidIndoor |
Opcjonalnie: Określa, czy w uzasadnionych przypadkach unikać przechodzenia do wnętrz. Preferowane będą trasy nieobejmujące nawigacji w pomieszczeniach. Dotyczy tylko środka transportu |
UnloadingPolicy
Zasady dotyczące sposobu 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ą 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 ładunku dla pojazdu, np. „ten samochód może przewozić maksymalnie 3500 kg”. Zobacz loadLimits.
| Zapis JSON |
|---|
{ "softMaxLoad": string, "costPerUnitAboveSoftMax": number, "startLoadInterval": { object ( |
| Pola | |
|---|---|
softMaxLoad |
Ograniczony limit obciążenia. Zobacz |
costPerUnitAboveSoftMax |
Jeśli ładunek przekroczy wartość |
startLoadInterval |
Dopuszczalny przedział ładowania pojazdu na początku trasy. |
endLoadInterval |
Dopuszczalny czas obciążenia pojazdu na końcu trasy. |
maxLoad |
Maksymalna akceptowalna ilość obciążenia. |
costPerKilometer |
Koszt przeniesienia jednej jednostki ładunku na ponad kilometr w przypadku tego pojazdu. Można go użyć jako zastępnika zużycia paliwa: jeśli ładunek to waga (w niutonach), to ładunek*kilometr ma wymiar energii. |
costPerTraveledHour |
Koszt przejazdu tym pojazdem z jednostką ładunku w ciągu godziny. |
Interwał
Odstęp między akceptowanymi wielkościami wczytywania.
| Zapis JSON |
|---|
{ "min": string, "max": string } |
| Pola | |
|---|---|
min |
Minimalne dopuszczalne obciążenie. Wartość musi być większa lub równa 0. Jeśli obie są określone, |
max |
Maksymalne dopuszczalne obciążenie. Wartość musi być większa lub równa 0. Jeśli nie określisz maksymalnego obciążenia, wiadomość nie będzie nakładać żadnych ograniczeń. Jeśli obie są określone, |
LoadCost
Koszt przeniesienia jednej jednostki obciążenia w okresie Transition. Koszt danego obciążenia to suma dwóch części:
- min(wczytanie;
loadThreshold) *costPerUnitBelowThreshold - max(0, obciążenie –
loadThreshold) *costPerUnitAboveThreshold
W przypadku tego kosztu rozwiązania preferują najpierw realizację wysokich zapotrzebowań lub równolegle wysokich zapotrzebowań. Jeśli na przykład pojazd ma
load_limit {
key: "weight"
value {
costPerKilometer {
loadThreshold: 15
costPerUnitBelowThreshold: 2.0
costPerUnitAboveThreshold: 10.0
}
}
}
a jego trasa to start, odbiór, odbiór, dostawa, dostawa, koniec z przechodzeniem:
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 20 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
wtedy koszt poniesiony przez ten LoadCost to (cost_below * load_below * kilometers + cost_above * load_above * kms)
- Przejście 0: 0,0
- przejście 1: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
- Przejście 2: 2,0 * 15 * 1,0 + 10,0 * (20 - 15) * 1,0 = 80,0
- Przejście 3: 2.0 * 10 * 1.0 + 10.0 * 0 * 1.0 = 20.0
- Przejście 4: 0,0
LoadCost na trasie to 120,0.
Jeśli jednak trasa ma przebiegać w kolejności start, odbiór, dostawa, odbiór, dostawa, koniec z przejściami:
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 10 }
travelDistanceMeters: 1000.0 }
transition { vehicle_load['weight'] { amount: 0 }
travelDistanceMeters: 1000.0 }
koszty ponoszone przez to LoadCost wynoszą
- przejście 0: 0,0
- przejście 1: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
- Zmiana 2: 0,0
- przejście 3: 2,0 * 10 * 1,0 + 10,0 * 0 * 1,0 = 20,0
- przejście 4: 0,0
W tym przypadku LoadCost na całej trasie wynosi 40,0.
LoadCost powoduje, że rozwiązania z intensywnym wykorzystaniem przejść są droższe.
| Zapis JSON |
|---|
{ "loadThreshold": string, "costPerUnitBelowThreshold": number, "costPerUnitAboveThreshold": number } |
| Pola | |
|---|---|
loadThreshold |
Ilość ładunku, powyżej której koszt przeniesienia jednostki ładunku zmienia się z costPerUnitBelowThreshold na costPerUnitAboveThreshold. Musi być >= 0. |
costPerUnitBelowThreshold |
Koszt zmiany jednostki obciążenia, wyrażony dla każdej jednostki z zakresu od 0 do progu. Musi być skończoną wartością i musi być równa 0. |
costPerUnitAboveThreshold |
Koszt przeniesienia jednostki obciążenia dla każdej jednostki powyżej progu. W przypadku progu przypadków specjalnych = 0 oznacza to stały koszt jednostki. Musi być skończoną wartością i musi być równa 0. |
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 |
Sztywne ograniczenie, które ogranicza czas trwania do maxDuration. Czas w sekundach z maksymalnie 9 miejscami po przecinku, zakończony literą „ |
softMaxDuration |
miękki limit, który nie narzuca maksymalnego czasu trwania, ale w przypadku jego naruszenia powoduje, że trasa powoduje powstanie kosztu. 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ą „ |
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 jest zdefiniowana, wartość
Czas w sekundach z maksymalnie 9 miejscami po przecinku, zakończony literą „ |
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, "costPerKilometerBelowSoftMax": number, "costPerKilometerAboveSoftMax": number } |
| Pola | |
|---|---|
maxMeters |
sztywny limit ograniczający odległość do maksymalnej wartości 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ą. Jeśli jest zdefiniowana, wartość softMaxMeters musi być mniejsza niż maxMeters i nieujemna. |
costPerKilometerBelowSoftMax |
Poniesiony koszt za kilometr, rosnący do Te koszty nie są obsługiwane w |
costPerKilometerAboveSoftMax |
Koszt za kilometr naliczany, 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ć:
- w trakcie podróży między dwiema wizytami (obejmuje to czas bezpośrednio przed wizytą lub zaraz 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 (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 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ć. 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 | |
|---|---|
earliestStartTime |
Wymagane. Dolna granica (włącznie) na początku przerwy. Sygnatura czasowa w formacie RFC3339 UTC „Zulu” z rozdzielczością nanosekundy i maksymalnie 9 cyframi po przecinku. Przykłady: |
latestStartTime |
Wymagane. Górna granica (włącznie) na początku przerwy. Sygnatura czasowa w formacie RFC3339 UTC „Zulu” z rozdzielczością nanosekundy 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 dziewięciu cyfr po przecinku i kończący się „ |
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 o długości 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 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 dotyczyć przerw nieciągłych. 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 |
Wymagane. Minimalny czas trwania przerwy dla tego ograniczenia. Nieujemna. Zobacz opis Czas w sekundach z maksymalnie 9 miejscami po przecinku, zakończony literą „ |
maxInterBreakDuration |
Wymagane. Maksymalny dozwolony zakres czasu trwania dowolnego przedziału czasu na trasie, który nie zawiera przynajmniej częściowej przerwy wynoszącej Czas w sekundach z maksymalnie 9 miejscami po przecinku, zakończony literą „ |
DurationDistanceMatrix
Określa czas trwania i matrycę odległości od miejsca wizyty i rozpoczęcia pojazdu do odwiedzenia oraz lokalizacji zakończenia 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 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ć inny element |
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 się składać z tylu elementów: Czas trwania w sekundach składający się z maksymalnie dziewięciu cyfr po przecinku i kończący się „ |
meters[] |
Wartości odległości w danym wierszu. Jeśli brak kosztów lub ograniczeń odnosi się do odległości w modelu, możesz zostawić to pole puste. W przeciwnym razie model musi zawierać tyle elementów, ile |
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 ogranicznik lub limit (zgodnie z naturalną semantyką „AND”).
| Zapis JSON |
|---|
{
"srcTag": string,
"excludedSrcTag": string,
"dstTag": string,
"excludedDstTag": string,
"cost": number,
"costPerKilometer": number,
"distanceLimit": {
object ( |
| Pola | |
|---|---|
srcTag |
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 |
excludedSrcTag |
Zobacz |
dstTag |
Odpowiednia wizyta w miejscu docelowym lub koniec korzystania z pojazdu jest zgodna, jeśli pole |
excludedDstTag |
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 doliczana do wszystkich innych istniejących kosztów. |
costPerKilometer |
Określa koszt kilometra stosowany do odległości pokonanej podczas wykonywania tej zmiany. Dodaje się do wszystkich |
distanceLimit |
Określa limit pokonywanej odległości podczas wykonywania tego przejścia. Od 6 czerwca 2021 r. obsługiwane są tylko limity wstępne. |
delay |
Określa opóźnienie związane z przejściem tej zmiany. To opóźnienie występuje zawsze po zakończeniu wizyty źródłowej i przed rozpoczęciem wizyty docelowej. Czas trwania w sekundach składający się z maksymalnie dziewięciu cyfr po przecinku i kończący się „ |
ShipmentTypeIncompatibility
Określa niezgodności między dostawami w zależności od parametru deliveryType. 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 |
incompatibilityMode |
Tryb został 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. 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 dwóch przesyłek z niezgodnymi typami w trybie niezgodności
|
ShipmentTypeRequirement
Określa wymagania dotyczące przesyłek na podstawie ich typu przesyłki. 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ń, w których |
requirementMode |
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ń. Tej wartości nie należy używać. |
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 przesyłki zależnej” musi więc spełniać jeden z tych warunków:
|
IN_SAME_VEHICLE_AT_DELIVERY_TIME |
Tak jak wcześniej, z wyjątkiem przesyłek zależnych, które muszą być „wymagane” 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 rozpoczęciu „pierwszego”.
Kilka pierwszeństwa może odnosić się do tych samych (lub powiązanych) wydarzeń, np. „Odbiór B następuje po dostawie A” i „Odbiór C następuje po odbiorze 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 „pierwsze” zdarzenie to dostawa. |
secondIsDelivery |
Wskazuje, czy „drugie” zdarzenie to dostawa. |
offsetDuration |
Przesunięcie między pierwszym a drugim zdarzeniem. Może być ujemna. Czas trwania w sekundach składający się z maksymalnie dziewięciu cyfr po przecinku i kończący się „ |
firstIndex |
Indeks dostawy „pierwszego” zdarzenia. To pole musi być określone. |
secondIndex |
Indeks dostawy „drugiego” zdarzenia. To pole musi być określone. |