ShipmentModel

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 (Shipment)
    }
  ],
  "vehicles": [
    {
      object (Vehicle)
    }
  ],
  "globalStartTime": string,
  "globalEndTime": string,
  "globalDurationCostPerHour": number,
  "durationDistanceMatrices": [
    {
      object (DurationDistanceMatrix)
    }
  ],
  "durationDistanceMatrixSrcTags": [
    string
  ],
  "durationDistanceMatrixDstTags": [
    string
  ],
  "transitionAttributes": [
    {
      object (TransitionAttributes)
    }
  ],
  "shipmentTypeIncompatibilities": [
    {
      object (ShipmentTypeIncompatibility)
    }
  ],
  "shipmentTypeRequirements": [
    {
      object (ShipmentTypeRequirement)
    }
  ],
  "precedenceRules": [
    {
      object (PrecedenceRule)
    }
  ],
  "maxActiveVehicles": integer
}
Pola
shipments[]

object (Shipment)

Zestaw wysyłek, które muszą zostać wykonane w modelu.

vehicles[]

object (Vehicle)

Zestaw pojazdów, których można używać do zwiedzania.

globalStartTime

string (Timestamp format)

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 globalEndTime i globalStartTime muszą być mniejsze niż 315 36 000 sekund.

Podczas korzystania z pól cost_per_*hour możesz ustawić krótszy przedział czasu, aby zwiększyć wydajność (np. jeśli modelujesz jeden dzień, ustaw globalne limity czasu na ten dzień). Jeśli zasada nie jest skonfigurowana, jako domyślna używana jest godzina 00:00:00 UTC, 1 stycznia 1970 r. (tzn. sekund: 0, nanos: 0).

Sygnatura czasowa w formacie „Zulu” RFC3339 UTC z rozdzielczością nanosekundową i maksymalnie 9 cyframi po przecinku. Przykłady: "2014-10-02T15:01:23Z" i "2014-10-02T15:01:23.045123456Z".

globalEndTime

string (Timestamp format)

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: "2014-10-02T15:01:23Z" i "2014-10-02T15:01:23.045123456Z".

globalDurationCostPerHour

number

„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 Shipment.penalty_cost.

durationDistanceMatrices[]

object (DurationDistanceMatrix)

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 useGeodesicDistances. Jeśli pole nie jest puste, useGeodesicDistances nie może mieć wartości true i ani durationDistanceMatrixSrcTags, ani durationDistanceMatrixDstTags nie może być puste.

Przykłady użycia:

  • Są 2 miejsca: locA i locB.
  • 1 pojazd rozpoczynający trasę w lokalu locA i kończący się w lokalu locA.
  • 1 prośba o wizytę z odbiorem w lokalu.
model {
  vehicles { startTags: "locA"  endTags: "locA" }
  shipments { pickups { tags: "locB" } }
  durationDistanceMatrixSrcTags: "locA"
  durationDistanceMatrixSrcTags: "locB"
  durationDistanceMatrixDstTags: "locA"
  durationDistanceMatrixDstTags: "locB"
  durationDistanceMatrices {
    rows {  # from: locA
      durations { seconds: 0 }   meters: 0    # to: locA
      durations { seconds: 100 } meters: 1000 # to: locB
    }
    rows {  # from: locB
      durations { seconds: 102 } meters: 990 # to: locA
      durations { seconds: 0 }   meters: 0   # to: locB
    }
  }
}
  • Są 3 lokalizacje: locA, locB i locC.
  • 1 pojazd, który rozpoczyna trasę w lokalu A i kończy w lokalu locB, z użyciem macierzy „szybko”.
  • 1 pojazd, który rozpoczyna trasę w lokalu locB i kończy w lokalu locB z użyciem macierzy „wolno”.
  • 1 pojazd, który rozpoczyna trasę w lokalu locB i kończy w lokalu locB z użyciem macierzy „szybko”.
  • 1 prośba o wizytę z odbiorem w lokalu locC.
model {
  vehicles { startTags: "locA" endTags: "locB" startTags: "fast" }
  vehicles { startTags: "locB" endTags: "locB" startTags: "slow" }
  vehicles { startTags: "locB" endTags: "locB" startTags: "fast" }
  shipments { pickups { tags: "locC" } }
  durationDistanceMatrixSrcTags: "locA"
  durationDistanceMatrixSrcTags: "locB"
  durationDistanceMatrixSrcTags: "locC"
  durationDistanceMatrixDstTags: "locB"
  durationDistanceMatrixDstTags: "locC"
  durationDistanceMatrices {
    vehicleStartTag: "fast"
    rows {  # from: locA
      durations { seconds: 1000 } meters: 2000 # to: locB
      durations { seconds: 600 }  meters: 1000 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }   meters: 0    # to: locB
      durations { seconds: 700 } meters: 1200 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 702 } meters: 1190 # to: locB
      durations { seconds: 0 }   meters: 0    # to: locC
    }
  }
  durationDistanceMatrices {
    vehicleStartTag: "slow"
    rows {  # from: locA
      durations { seconds: 1800 } meters: 2001 # to: locB
      durations { seconds: 900 }  meters: 1002 # to: locC
    }
    rows {  # from: locB
      durations { seconds: 0 }    meters: 0    # to: locB
      durations { seconds: 1000 } meters: 1202 # to: locC
    }
    rows {  # from: locC
      durations { seconds: 1001 } meters: 1195 # to: locB
      durations { seconds: 0 }    meters: 0    # to: locC
    }
  }
}
durationDistanceMatrixSrcTags[]

string

Tagi definiujące źródła macierzy czasu trwania i odległości; durationDistanceMatrices(i).rows(j) definiuje czasy trwania i odległości od wizyt za pomocą tagu durationDistanceMatrixSrcTags(j) do innych wizyt w tablicy i.

Tagi odpowiadają elementom VisitRequest.tags lub Vehicle.start_tags. Dane VisitRequest lub Vehicle muszą pasować dokładnie do 1 tagu w tym polu. Pamiętaj, że tagi źródła, miejsca docelowego i matrycy elementów Vehicle mogą być takie same; podobnie tagi źródła i docelowego elementu typu VisitRequest mogą być takie same. Wszystkie tagi muszą być różne i nie mogą być pustymi ciągami znaków. Jeśli to pole nie jest puste, pole durationDistanceMatrices nie może być puste.

durationDistanceMatrixDstTags[]

string

Tagi określające miejsca docelowe dla macierzy czasu trwania i odległości: durationDistanceMatrices(i).rows(j).durations(k) (odp. durationDistanceMatrices(i).rows(j).meters(k)) określa czas trwania (czyli odległość) podróży z tagiem durationDistanceMatrixSrcTags(j) do wizyt z tagiem durationDistanceMatrixDstTags(k) w tablicy i.

Tagi odpowiadają elementom VisitRequest.tags lub Vehicle.start_tags. Dane VisitRequest lub Vehicle muszą pasować dokładnie do 1 tagu w tym polu. Pamiętaj, że tagi źródła, miejsca docelowego i matrycy elementów Vehicle mogą być takie same; podobnie tagi źródła i docelowego elementu typu VisitRequest mogą być takie same. Wszystkie tagi muszą być różne i nie mogą być pustymi ciągami znaków. Jeśli to pole nie jest puste, pole durationDistanceMatrices nie może być puste.

transitionAttributes[]

object (TransitionAttributes)

Do modelu dodano atrybuty przejścia.

shipmentTypeIncompatibilities[]

object (ShipmentTypeIncompatibility)

Zestawy niezgodnych typów wysyłki (patrz ShipmentTypeIncompatibility).

shipmentTypeRequirements[]

object (ShipmentTypeRequirement)

Zestawy wymagań typu shipmentType (patrz ShipmentTypeRequirement).

precedenceRules[]

object (PrecedenceRule)

Zestaw reguł pierwszeństwa, które muszą być egzekwowane w modelu.

maxActiveVehicles

integer

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 (VisitRequest)
    }
  ],
  "deliveries": [
    {
      object (VisitRequest)
    }
  ],
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "allowedVehicleIndices": [
    integer
  ],
  "costsPerVehicle": [
    number
  ],
  "costsPerVehicleIndices": [
    integer
  ],
  "pickupToDeliveryAbsoluteDetourLimit": string,
  "pickupToDeliveryTimeLimit": string,
  "shipmentType": string,
  "label": string,
  "ignore": boolean,
  "penaltyCost": number,
  "pickupToDeliveryRelativeDetourLimit": number
}
Pola
displayName

string

Zdefiniowana przez użytkownika wyświetlana nazwa przesyłki. Może zawierać do 63 znaków i zawierać znaki UTF-8.

pickups[]

object (VisitRequest)

Zestaw alternatywnych opcji odbioru powiązanych z dostawą. Jeśli go nie podasz, pojazd musi odwiedzić tylko lokalizację odpowiadającą przesyłki.

deliveries[]

object (VisitRequest)

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

map (key: string, value: object (Load))

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 "key": value. Przykład: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

allowedVehicleIndices[]

integer

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 vehicles w tabeli ShipmentModel.

costsPerVehicle[]

number

Określa koszt poniesiony w związku z dostarczeniem przesyłki przez każdy pojazd. Jeśli jest określony, musi zawierać EITHER:

  • tyle samo elementów co costsPerVehicleIndices. Wartość costsPerVehicle[i] odpowiada pojazdowi costsPerVehicleIndices[i] modelu.
  • z taką samą liczbą elementów co w modelu. Element i-ten odpowiada numerowi i-ty pojazdowi modelu.

Koszty muszą być podane w tej samej jednostce co wartość penaltyCost i nie mogą być ujemne. Jeśli nie ma takich kosztów, pozostaw to pole puste.

costsPerVehicleIndices[]

integer

Indeksy pojazdów, których dotyczy costsPerVehicle. Jeśli pole nie jest puste, musi zawierać tę samą liczbę elementów co costsPerVehicle. Indeks pojazdu nie może zostać określony więcej niż raz. Jeśli pojazd nie jest uwzględniony w programie costsPerVehicleIndices, jego koszt wynosi 0.

pickupToDeliveryAbsoluteDetourLimit

string (Duration format)

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 pickupToDeliveryAbsoluteDetourLimit wymusza:

startTime(delivery) - startTime(pickup) <=
t + pickupToDeliveryAbsoluteDetourLimit

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 „s”. Przykład: "3.5s".

pickupToDeliveryTimeLimit

string (Duration format)

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 „s”. Przykład: "3.5s".

shipmentType

string

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 shipment_types (patrz shipmentTypeIncompatibilities i shipmentTypeRequirements w ShipmentModel).

Różni się od usługi visitTypes określonej dla pojedynczej wizyty: wszystkie odbiory/dostawy należące do tej samej przesyłki mają tę samą wartość shipmentType.

label

string

Określa etykietę tej przesyłki. Ta etykieta jest zgłaszana w odpowiedzi w shipmentLabel odpowiedniego elementu (ShipmentRoute.Visit).

ignore

boolean

Jeśli ma wartość prawda, pomiń tę dostawę, ale nie stosuj penaltyCost.

Zignorowanie dostawy spowoduje błąd weryfikacji, gdy w modelu występują jakiekolwiek shipmentTypeRequirements.

Ignorowanie dostawy realizowanej w krajach injectedFirstSolutionRoutes lub injectedSolutionConstraint jest dozwolone. Rozwiązanie rozwiązuje też związane z nią wizyty dotyczące odbioru/dostawy z wybranej trasy. precedenceRules, które odwołują się do ignorowanych przesyłek, również będą ignorowane.

penaltyCost

number

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

number

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 pickupToDeliveryRelativeDetourLimit wymusza:

startTime(delivery) - startTime(pickup) <=
std::ceil(t * (1.0 + pickupToDeliveryRelativeDetourLimit))

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 (LatLng)
  },
  "arrivalWaypoint": {
    object (Waypoint)
  },
  "departureLocation": {
    object (LatLng)
  },
  "departureWaypoint": {
    object (Waypoint)
  },
  "tags": [
    string
  ],
  "timeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "duration": string,
  "cost": number,
  "loadDemands": {
    string: {
      object (Load)
    },
    ...
  },
  "visitTypes": [
    string
  ],
  "label": string
}
Pola
arrivalLocation

object (LatLng)

Lokalizacja geograficzna, do której przyjeżdża pojazd, gdy wykonujesz ten VisitRequest. Jeśli model dostawy ma macierze odległości czasu trwania, nie należy określać atrybutu arrivalLocation.

arrivalWaypoint

object (Waypoint)

Punkt na trasie, do którego dociera pojazd podczas wykonywania tego parametru (VisitRequest). Jeśli model dostawy ma macierze odległości czasu trwania, nie należy określać atrybutu arrivalWaypoint.

departureLocation

object (LatLng)

Geolokalizacja, z której pojazd odjeżdża po wykonaniu tej VisitRequest. Można ją pominąć, jeśli jest taka sama jak wartość arrivalLocation. Jeśli model dostawy ma macierze odległości czasu trwania, nie należy określać atrybutu departureLocation.

departureWaypoint

object (Waypoint)

Punkt na trasie, z którego pojazd odjeżdża po pokonaniu tego trasy VisitRequest. Można ją pominąć, jeśli jest taka sama jak wartość arrivalWaypoint. Jeśli model dostawy ma macierze odległości czasu trwania, nie należy określać atrybutu departureWaypoint.

tags[]

string

Określa tagi dołączone do prośby o wizytę. Puste i zduplikowane ciągi znaków są niedozwolone.

timeWindows[]

object (TimeWindow)

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 TimeWindow.start_time.

Brak TimeWindow oznacza, że pojazd może przeprowadzić tę wizytę w dowolnym momencie.

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 costPerHourAfterSoftEndTime i softEndTime można ustawić tylko wtedy, gdy istnieje 1 przedział czasu.

duration

string (Duration format)

Długość wizyty, czyli czas spędzony przez pojazd między przyjazdem a odjazdem (należy go dodać do możliwego czasu oczekiwania; patrz: timeWindows).

Czas trwania w sekundach z maksymalnie 9 cyframi po przecinku, kończącym się cyframi „s”. Przykład: "3.5s".

cost

number

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 Shipment.penalty_cost i nie może być ujemny.

loadDemands

map (key: string, value: object (Load))

Obciążenia związane z tą prośbą o wizytę. Działa ono tak samo jak pole Shipment.load_demands z tą różnicą, że odnosi się tylko do VisitRequest, a nie do całego pola Shipment. Wymienione tutaj oferty są dodane do żądań wymienionych w: Shipment.load_demands.

Obiekt zawierający listę par "key": value. Przykład: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

visitTypes[]

string

Określa typy wizyt. Pozwala to przydzielić pojazdowi dodatkowy czas na ukończenie tej wizyty (patrz Vehicle.extra_visit_duration_for_visit_type).

Typ może wystąpić tylko raz.

label

string

Określa etykietę elementu VisitRequest. Ta etykieta jest zgłaszana w odpowiedzi jako visitLabel w odpowiednim elemencie ShipmentRoute.Visit.

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

number

Szerokość geograficzna w stopniach. Musi mieścić się w zakresie [-90,0; +90,0].

longitude

number

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 location_type can be only one of the following:
  "location": {
    object (Location)
  },
  "placeId": string
  // End of list of possible types for union field location_type.
}
Pola
sideOfRoad

boolean

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

object (Location)

Punkt określony za pomocą współrzędnych geograficznych, wraz z opcjonalnym nagłówkiem.

placeId

string

Identyfikator miejsca POI powiązany z punktem na trasie.

Lokalizacja

Obejmuje lokalizację (punkt geograficzny i opcjonalny nagłówek).

Zapis JSON
{
  "latLng": {
    object (LatLng)
  },
  "heading": integer
}
Pola
latLng

object (LatLng)

Współrzędne geograficzne punktu pośredniego.

heading

integer

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

string (Timestamp format)

Godzina rozpoczęcia twardego przedziału czasu. Jeśli nie określono inaczej, zostanie ustawiona wartość ShipmentModel.global_start_time.

Sygnatura czasowa w formacie „Zulu” RFC3339 UTC z rozdzielczością nanosekundową i maksymalnie 9 cyframi po przecinku. Przykłady: "2014-10-02T15:01:23Z" i "2014-10-02T15:01:23.045123456Z".

endTime

string (Timestamp format)

Godzina zakończenia twardego przedziału czasu. Jeśli nie określono inaczej, zostanie ustawiona wartość ShipmentModel.global_end_time.

Sygnatura czasowa w formacie „Zulu” RFC3339 UTC z rozdzielczością nanosekundową i maksymalnie 9 cyframi po przecinku. Przykłady: "2014-10-02T15:01:23Z" i "2014-10-02T15:01:23.045123456Z".

softStartTime

string (Timestamp format)

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: "2014-10-02T15:01:23Z" i "2014-10-02T15:01:23.045123456Z".

softEndTime

string (Timestamp format)

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: "2014-10-02T15:01:23Z" i "2014-10-02T15:01:23.045123456Z".

costPerHourBeforeSoftStartTime

number

Koszt na godzinę dodany do innych kosztów w modelu, jeśli zdarzenie wystąpiło przed softStartTime, jest obliczane jako:

   max(0, softStartTime - t.seconds)
                          * costPerHourBeforeSoftStartTime / 3600,
t being the time of the event.

Ten koszt musi być dodatni, a to pole można ustawić tylko wtedy, gdy ustawiono softStartTime.

costPerHourAfterSoftEndTime

number

Koszt na godzinę dodany do innych kosztów w modelu, jeśli zdarzenie wystąpi po softEndTime, jest obliczany w ten sposób:

   max(0, t.seconds - softEndTime.seconds)
                    * costPerHourAfterSoftEndTime / 3600,
t being the time of the event.

Ten koszt musi być dodatni, a to pole można skonfigurować tylko wtedy, gdy ustawiono softEndTime.

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 (TravelMode),
  "startLocation": {
    object (LatLng)
  },
  "startWaypoint": {
    object (Waypoint)
  },
  "endLocation": {
    object (LatLng)
  },
  "endWaypoint": {
    object (Waypoint)
  },
  "startTags": [
    string
  ],
  "endTags": [
    string
  ],
  "startTimeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "endTimeWindows": [
    {
      object (TimeWindow)
    }
  ],
  "unloadingPolicy": enum (UnloadingPolicy),
  "loadLimits": {
    string: {
      object (LoadLimit)
    },
    ...
  },
  "costPerHour": number,
  "costPerTraveledHour": number,
  "costPerKilometer": number,
  "fixedCost": number,
  "usedIfRouteIsEmpty": boolean,
  "routeDurationLimit": {
    object (DurationLimit)
  },
  "travelDurationLimit": {
    object (DurationLimit)
  },
  "routeDistanceLimit": {
    object (DistanceLimit)
  },
  "extraVisitDurationForVisitType": {
    string: string,
    ...
  },
  "breakRule": {
    object (BreakRule)
  },
  "label": string,
  "ignore": boolean,
  "travelDurationMultiple": number
}
Pola
displayName

string

Zdefiniowana przez użytkownika wyświetlana nazwa pojazdu. Może zawierać do 63 znaków i zawierać znaki UTF-8.

travelMode

enum (TravelMode)

Tryb podróży, który ma wpływ na drogi dostępne dla pojazdu oraz prędkość. Zobacz też travelDurationMultiple.

startLocation

object (LatLng)

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 startLocation.

startWaypoint

object (Waypoint)

Punkt pośredni reprezentujący lokalizację geograficzną, w której pojazd rozpoczyna się przed odebraniem przesyłek. Jeśli nie podasz wartości startWaypoint ani startLocation, pojazd rozpocznie się od pierwszego odbioru. Jeśli model dostawy ma czas trwania i macierze odległości, nie należy określać atrybutu startWaypoint.

endLocation

object (LatLng)

Lokalizacja geograficzna, do której pojazd kończy się po zakończeniu ostatniego VisitRequest. Jeśli nie określisz stanu pojazdu, ShipmentRoute kończy się natychmiast po zakończeniu ostatniego okresu (VisitRequest). Jeśli model dostawy ma czas trwania i macierze odległości, nie należy określać atrybutu endLocation.

endWaypoint

object (Waypoint)

Punkt pośredni reprezentujący lokalizację geograficzną, w której pojazd kończy się po zakończeniu ostatniego VisitRequest. Jeśli nie określono ani endWaypoint, ani endLocation, ShipmentRoute pojazdu kończy się natychmiast po zakończeniu ostatniego VisitRequest. Jeśli model dostawy ma czas trwania i macierze odległości, nie należy określać atrybutu endWaypoint.

startTags[]

string

Określa tagi dołączone do początku trasy pojazdu.

Puste i zduplikowane ciągi znaków są niedozwolone.

endTags[]

string

Określa tagi dołączone na końcu trasy pojazdu.

Puste i zduplikowane ciągi znaków są niedozwolone.

startTimeWindows[]

object (TimeWindow)

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 ShipmentModel.global_*). Jeśli nie określono inaczej, nie ma żadnych ograniczeń poza tymi globalnymi limitami czasu.

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 costPerHourAfterSoftEndTime i softEndTime można ustawić tylko wtedy, gdy istnieje 1 przedział czasu.

endTimeWindows[]

object (TimeWindow)

Przedziały czasu, w których pojazd może dotrzeć do miejsca docelowego. Muszą one mieścić się w globalnych limitach czasu (patrz pola ShipmentModel.global_*). Jeśli nie określono inaczej, nie ma żadnych ograniczeń poza tymi globalnymi limitami czasu.

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 costPerHourAfterSoftEndTime i softEndTime można ustawić tylko wtedy, gdy istnieje 1 przedział czasu.

unloadingPolicy

enum (UnloadingPolicy)

Egzekwowana na pojeździe zasada wyładowywania z pamięci.

loadLimits

map (key: string, value: object (LoadLimit))

Pojemność pojazdu (np. waga, objętość, liczba palet). Klucze na mapie to identyfikatory typu obciążenia zgodnie z kluczami w polu Shipment.load_demands. Jeśli danego klucza nie ma na tej mapie, odpowiadająca mu pojemność jest uznawana za nieograniczoną.

Obiekt zawierający listę par "key": value. Przykład: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

costPerHour

number

Koszty pojazdu: wszystkie koszty sumują się i muszą mieć taką samą jednostkę jak Shipment.penalty_cost.

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 costPerHour zamiast costPerTraveledHour może spowodować dodatkowe opóźnienia.

costPerTraveledHour

number

Koszt za godzinę przejazdu na trasie pojazdu. Ten koszt jest stosowany tylko do czasu podróży daną trasą (tj. zarejestrowany w: ShipmentRoute.transitions) i nie uwzględnia czasu oczekiwania ani czasu wizyty.

costPerKilometer

number

Koszt za kilometr na trasie pojazdu. Ten koszt jest stosowany do odległości podawanej w ShipmentRoute.transitions i nie dotyczy żadnej odległości niejawnie przebytej z arrivalLocation do departureLocation pojedynczego VisitRequest.

fixedCost

number

Jeśli ten pojazd jest używany do obsługi przesyłki, zostanie zastosowany stały koszt.

usedIfRouteIsEmpty

boolean

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 breakRule ani opóźnienia (z TransitionAttributes). W tym przypadku numer ShipmentRoute pojazdu nie zawiera żadnych informacji poza indeksem i etykietą pojazdu.

routeDurationLimit

object (DurationLimit)

Limit stosowany do łącznego czasu trwania trasy pojazdu. W przypadku elementu OptimizeToursResponse czas podróży pojazdem jest różnicą między jego wartością vehicleEndTime i vehicleStartTime.

travelDurationLimit

object (DurationLimit)

Limit stosowany do czasu podróży na trasie pojazdu. Czas podróży na trasie dla danego elementu OptimizeToursResponse jest sumą wszystkich wartości tego parametru (transitions.travel_duration).

routeDistanceLimit

object (DistanceLimit)

Limit dotyczący całkowitej odległości na trasie pojazdu. Odległość trasy dla danego elementu OptimizeToursResponse jest sumą wszystkich wartości transitions.travel_distance_meters tego pola.

extraVisitDurationForVisitType

map (key: string, value: string (Duration format))

Określa mapę z ciągów visitTypes po czasy trwania. Czas trwania jest uzupełniony o czas VisitRequest.duration wykonywany podczas wizyt z określonym visitTypes. Ta dodatkowa długość wizyty powoduje naliczanie opłat, jeśli określono costPerHour. Klucze (np. visitTypes) nie mogą być pustymi ciągami znaków.

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 "key": value. Przykład: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

breakRule

object (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

string

Określa etykietę tego pojazdu. Ta etykieta jest zgłaszana w odpowiedzi jako vehicleLabel odpowiedniego elementu ShipmentRoute.

ignore

boolean

Jeśli ma wartość Prawda, usedIfRouteIsEmpty musi mieć wartość Fałsz, a pojazd pozostanie nieużywany.

Jeśli przesyłka jest wykonywana przez zignorowany pojazd w injectedFirstSolutionRoutes, zostanie ona pominięta w pierwszym rozwiązaniu, ale można ją wykonać bezpłatnie w odpowiedzi.

Jeśli przesyłka jest wykonywana przez zignorowany pojazd w injectedSolutionConstraint, a wszelkie związane z nim czynności dotyczące odbioru/dostawy muszą pozostać w pojeździe (tj. urządzenie nie może być rozluźnione do poziomu RELAX_ALL_AFTER_THRESHOLD), zostanie ono pominięte w odpowiedzi. Jeśli przesyłka ma niepuste pole allowedVehicleIndices, a wszystkie dozwolone pojazdy zostały zignorowane, zostanie ona pominięta w odpowiedzi.

travelDurationMultiple

number

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 costPerHour lub costPerTraveledHour. Musi mieścić się w zakresie [0,001; 1000,0]. Jeśli nie jest skonfigurowana, pojazd jest standardowy, a ta wielokrotność przyjmuje wartość 1,0.

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ż extraVisitDurationForVisitType poniżej.

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 (Interval)
  },
  "endLoadInterval": {
    object (Interval)
  },
  "maxLoad": string
}
Pola
softMaxLoad

string (int64 format)

Niewielka granica obciążenia. Zobacz costPerUnitAboveSoftMax.

costPerUnitAboveSoftMax

number

Jeśli obciążenie przekroczy softMaxLoad na trasie tego pojazdu, zostanie zastosowana ta kara (tylko raz na pojazd): (obciążenie – softMaxLoad) * costPerUnitAboveSoftMax. Wszystkie koszty sumują się i muszą mieć taką samą jednostkę jak Shipment.penalty_cost.

startLoadInterval

object (Interval)

Dopuszczalny odstęp czasu ładowania pojazdu na początku trasy.

endLoadInterval

object (Interval)

Dopuszczalny odstęp czasu ładowania pojazdu na końcu trasy.

maxLoad

string (int64 format)

Maksymalna akceptowalna ilość obciążenia.

Odstęp

Przedział czasu obciążenia akceptowalnego obciążenia.

Zapis JSON
{
  "min": string,
  "max": string
}
Pola
min

string (int64 format)

Minimalne akceptowalne obciążenie. Musi wynosić ≥ 0. Jeśli podasz oba, min musi mieć wartość ≤ max.

max

string (int64 format)

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, min musi mieć wartość ≤ max.

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

string (Duration format)

Sztywny limit czasu trwania na maksymalną wartość maxDuration.

Czas trwania w sekundach z maksymalnie 9 cyframi po przecinku, kończącym się cyframi „s”. Przykład: "3.5s".

softMaxDuration

string (Duration format)

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, softMaxDuration musi być nieujemna. Jeśli parametr maxDuration jest również określony, wartość softMaxDuration musi być mniejsza niż wartość maxDuration.

Czas trwania w sekundach z maksymalnie 9 cyframi po przecinku, kończącym się cyframi „s”. Przykład: "3.5s".

quadraticSoftMaxDuration

string (Duration format)

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, quadraticSoftMaxDuration musi być nieujemna. Jeśli określono również maxDuration, wartość quadraticSoftMaxDuration musi być mniejsza niż maxDuration, a różnica nie może być większa niż 1 dzień:

maxDuration - quadraticSoftMaxDuration <= 86400 seconds

Czas trwania w sekundach z maksymalnie 9 cyframi po przecinku, kończącym się cyframi „s”. Przykład: "3.5s".

costPerHourAfterSoftMax

number

Koszt za godzinę wynikający z naruszenia progu softMaxDuration. 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:

  costPerHourAfterSoftMax * (duration - softMaxDuration)

Koszt nie może być liczbą ujemną.

costPerSquareHourAfterQuadraticSoftMax

number

Koszt za godzinę kwadratową w przypadku naruszenia progu quadraticSoftMaxDuration.

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:

  costPerSquareHourAfterQuadraticSoftMax *
  (duration - quadraticSoftMaxDuration)^2

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

string (int64 format)

Sztywne ograniczenie dystansu do maksymalnej wartości maxMeter. Limit nie może być ujemny.

softMaxMeters

string (int64 format)

Ł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

number

Koszt za kilometr naliczony, gdy odległość przekracza softMaxMeters. Jeśli odległość nie przekracza limitu, dodatkowy koszt wynosi 0. W przeciwnym razie do obliczania kosztu obowiązuje ten wzór:

  (distanceMeters - softMaxMeters) / 1000.0 *
  costPerKilometerAboveSoftMax.

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 (BreakRequest)
    }
  ],
  "frequencyConstraints": [
    {
      object (FrequencyConstraint)
    }
  ]
}
Pola
breakRequests[]

object (BreakRequest)

Kolejność przerw. Przeczytaj wiadomość BreakRequest.

frequencyConstraints[]

object (FrequencyConstraint)

Obowiązują kilka zasad (FrequencyConstraint). Wszystkie muszą spełniać warunki BreakRequest tego BreakRule. Zobacz FrequencyConstraint.

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

string (Timestamp format)

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: "2014-10-02T15:01:23Z" i "2014-10-02T15:01:23.045123456Z".

latestStartTime

string (Timestamp format)

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: "2014-10-02T15:01:23Z" i "2014-10-02T15:01:23.045123456Z".

minDuration

string (Duration format)

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 „s”. Przykład: "3.5s".

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

string (Duration format)

To pole jest wymagane. Minimalny czas trwania przerwy dla tego ograniczenia. Nieujemna. Zobacz opis: FrequencyConstraint.

Czas trwania w sekundach z maksymalnie 9 cyframi po przecinku, kończącym się cyframi „s”. Przykład: "3.5s".

maxInterBreakDuration

string (Duration format)

To pole jest wymagane. Maksymalny dozwolony odstęp w dowolnym przedziale czasu na trasie, który nie uwzględnia przynajmniej częściowo przerwy duration >= minBreakDuration. Musi być liczbą dodatnią.

Czas trwania w sekundach z maksymalnie 9 cyframi po przecinku, kończącym się cyframi „s”. Przykład: "3.5s".

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 (Row)
    }
  ],
  "vehicleStartTag": string
}
Pola
rows[]

object (Row)

Określa wiersze macierzy czasu trwania i odległości. Liczba elementów musi być równa ShipmentModel.duration_distance_matrix_src_tags.

vehicleStartTag

string

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 startTags musi być zgodne z vehicleStartTag macierzy (i tylko dla tej macierzy).

Wszystkie macierze muszą mieć inny parametr vehicleStartTag.

Wiersz

Określa wiersz macierzy czasu trwania i odległości.

Zapis JSON
{
  "durations": [
    string
  ],
  "meters": [
    number
  ]
}
Pola
durations[]

string (Duration format)

Wartości czasu trwania poszczególnych wierszy. Liczba elementów musi być równa ShipmentModel.duration_distance_matrix_dst_tags.

Czas trwania w sekundach z maksymalnie 9 cyframi po przecinku, kończącym się cyframi „s”. Przykład: "3.5s".

meters[]

number

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 durations.

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 (DistanceLimit)
  },
  "delay": string
}
Pola
srcTag

string

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 VisitRequest.tags albo pola Vehicle.start_tags zawiera wartość srcTag albo nie zawiera excludedSrcTag (w zależności od tego, które z tych pól nie jest puste).

excludedSrcTag

string

Zobacz srcTag. Pole srcTag lub excludedSrcTag nie może być puste.

dstTag

string

Docelowa wizyta lub koniec pojazdu pasuje do wartości VisitRequest.tags lub Vehicle.end_tags zawiera wartość dstTag albo nie zawiera excludedDstTag (w zależności od tego, które z tych pól nie jest puste).

excludedDstTag

string

Zobacz dstTag. Pole dstTag lub excludedDstTag nie może być puste.

cost

number

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

number

Określa koszt kilometra stosowanego do odległości pokonanej podczas wykonywania tej zmiany. Łączna kwota to Vehicle.cost_per_kilometer określona w pojazdach.

distanceLimit

object (DistanceLimit)

Określa limit odległości pokonanej podczas wykonywania tego przejścia.

Od 2021 roku obsługiwane są tylko miękkie limity.

delay

string (Duration format)

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 „s”. Przykład: "3.5s".

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 (IncompatibilityMode)
}
Pola
types[]

string

Lista niezgodnych typów. Dwie przesyłki o różnych wartościach (shipment_types) spośród wymienionych są „niezgodne”.

incompatibilityMode

enum (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 NOT_IN_SAME_VEHICLE_SIMULTANEOUSLY:

  • Jeśli obie opcje mają charakter tylko odbioru (bez dostaw) lub tylko dostawy (bez odbioru), nie mogą korzystać z tego samego pojazdu.
  • Jeśli jedna z przesyłki obejmuje dostawę, a druga odbiór, mogą one korzystać z tego samego pojazdu, jeśli poprzednia zostanie dostarczona, zanim druga zostanie odebrana.

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 (RequirementMode)
}
Pola
requiredShipmentTypeAlternatives[]

string

Lista alternatywnych typów dostawy, których wymaga dependentShipmentTypes.

dependentShipmentTypes[]

string

Wszystkie przesyłki określonego typu w polu dependentShipmentTypes wymagają, aby na tej samej trasie można było odwiedzić co najmniej jedną przesyłkę typu requiredShipmentTypeAlternatives.

UWAGA: łańcuchy wymagań, takie jak shipmentType zależne od siebie, są niedozwolone.

requirementMode

enum (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 IN_SAME_VEHICLE_AT_PICKUP_TIME wszystkie „zależne” przesyłki muszą mieć w pojeździe co najmniej jedną „niezbędną” przesyłkę w momencie odbioru.

„Zależny” odbiór w przypadku przesyłki musi więc mieć:

  • „Wymagana” przesyłka z dostawą, która zostanie dostarczona na trasie po jej upływie lub
  • Wysyłka „wymagana” została odebrana na trasie przed nią, a jeśli „wymagana” przesyłka została dostarczona, musi zostać ona zrealizowana po odbiorze przesyłki „zależnej”.
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

boolean

Wskazuje, czy „pierwsze” zdarzenie jest wyświetleniem.

secondIsDelivery

boolean

Wskazuje, czy zdarzenie „second” jest wyświetleniem.

offsetDuration

string (Duration format)

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 „s”. Przykład: "3.5s".

firstIndex

integer

Indeks dostawy dla „pierwszego” zdarzenia. To pole musi być określone.

secondIndex

integer

Indeks dostawy dla drugiego zdarzenia. To pole musi być określone.