InjectedSolutionConstraint

Rozwiązanie wstrzyknięte w żądanie, w tym informacje o tym, które wizyty muszą być ograniczone i w jaki sposób.

Zapis JSON
{
  "routes": [
    {
      object (ShipmentRoute)
    }
  ],
  "skippedShipments": [
    {
      object (SkippedShipment)
    }
  ],
  "constraintRelaxations": [
    {
      object (ConstraintRelaxation)
    }
  ]
}
Pola
routes[]

object (ShipmentRoute)

Trasy, którymi roztwór ma być podawany. Niektóre trasy mogą zostać pominięte w początkowym rozwiązaniu. Trasy i przesyłki pominięte muszą spełniać podstawowe założenia oparte na injectedFirstSolutionRoutes.

skippedShipments[]

object (SkippedShipment)

Pominięte przesyłki rozwiązania do wstrzyknięcia. Niektóre z nich mogą zostać pominięte w pierwotnym rozwiązaniu. Zapoznaj się z polem routes.

constraintRelaxations[]

object (ConstraintRelaxation)

W przypadku co najmniej 1 grupy pojazdów określa, kiedy i w jakim stopniu można złagodzić ograniczenia. Jeśli to pole jest puste, wszystkie niepuste trasy pojazdów są w pełni ograniczone.

ConstraintRelaxation

W przypadku grupy pojazdów określa, przy jakich wartościach progowych i o ile zostaną złagodzone ograniczenia dotyczące wizyt. Przesyłki wymienione w polu skipped_shipment są przeznaczone do pominięcia, co oznacza, że nie można ich realizować.

Zapis JSON
{
  "relaxations": [
    {
      object (Relaxation)
    }
  ],
  "vehicleIndices": [
    integer
  ]
}
Pola
relaxations[]

object (Relaxation)

Wszystkie łagodniejsze ograniczenia dotyczące wizyt, które będą obowiązywać w przypadku wizyt na trasach z pojazdami w vehicleIndices.

vehicleIndices[]

integer

Określa indeksy pojazdów, do których ma zastosowanie ograniczenie wizyt relaxations. Jeśli pole jest puste, jest ono uważane za domyślne, a relaxations dotyczy wszystkich pojazdów, które nie są określone w innych constraintRelaxations. Może być maksymalnie 1 wartość domyślna, czyli maksymalnie 1 pole z opcją zniesienia ograniczenia może być puste vehicleIndices. Indeks pojazdu może być wymieniony tylko raz, nawet w kilku constraintRelaxations.

Indeks pojazdu jest mapowany tak samo jak ShipmentRoute.vehicle_index, jeśli interpretInjectedSolutionsUsingLabels ma wartość true (patrz komentarz fields).

Relaks

Jeśli relaxations jest pusty, czas rozpoczęcia i kolejność wszystkich wizyt na routes są całkowicie ograniczone, a do tych tras nie można dodawać nowych wizyt. Czas rozpoczęcia i zakończenia w elementach routes jest też całkowicie ograniczony, chyba że pojazd jest pusty (czyli nie ma żadnych wizyt i w modelu element usedIfRouteIsEmpty ma wartość false).

relaxations(i).level określa poziom zniesienia ograniczeń zastosowany do wizyty #j, która spełnia te warunki:

  • route.visits(j).start_time >= relaxations(i).threshold_time ORAZ
  • j + 1 >= relaxations(i).threshold_visit_count

Podobnie, uruchomienie pojazdu jest łagodzone do relaxations(i).level, jeśli spełnia te kryteria:

  • vehicleStartTime >= relaxations(i).threshold_time ORAZ
  • relaxations(i).threshold_visit_count == 0, a na końcu pojazdu relaxations(i).level, jeśli spełnia te wymagania:
  • vehicleEndTime >= relaxations(i).threshold_time ORAZ
  • route.visits_size() + 1 >= relaxations(i).threshold_visit_count

Aby zastosować poziom zrelaksowania, jeśli wizyta spełnia kryterium thresholdVisitCount LUB thresholdTime, dodaj 2 elementy relaxations z tym samym elementem level: jeden z ustawionym tylko parametrem thresholdVisitCount, a drugi tylko parametrem thresholdTime. Jeśli wizyta spełnia warunki wielu relaxations, stosuje się najbardziej liberalny poziom. W efekcie od początku do końca przejazdu poziom relaksacji staje się coraz niższy: innymi słowy, nie maleje w miarę upływu czasu.

Czas i kolejność wizyt w trasach, które nie spełniają warunków progowych dotyczących żadnego relaxations, są całkowicie ograniczone i nie można w tych sekwencjach wstawiać żadnych wizyt. Jeśli początek lub koniec okresu użytkowania pojazdu nie spełnia warunków żadnego poluzowania, czas jest stały, chyba że pojazd jest pusty.

Zapis JSON
{
  "level": enum (Level),
  "thresholdTime": string,
  "thresholdVisitCount": integer
}
Pola
level

enum (Level)

Poziom zniesienia ograniczenia, który ma zastosowanie, gdy warunki na poziomie thresholdTime LUB PO thresholdTime są spełnione.thresholdVisitCount

thresholdTime

string (Timestamp format)

Czas, w którym lub po którym można zastosować level.

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

thresholdVisitCount

integer

Liczba wizyt, po których można zastosować level. Jeśli wartość thresholdVisitCount to 0 (lub nie jest określona), wartość level może zostać zastosowana bezpośrednio po uruchomieniu pojazdu.

Jeśli jest to route.visits_size() + 1, level może być stosowany tylko w przypadku pojazdu. Jeśli jest większa niż route.visits_size() + 1, level nie jest w ogóle stosowana na tej trasie.

Poziom

Określa różne poziomy zniesienia ograniczeń, które są stosowane w przypadku wizyty i tych, które następują po spełnieniu warunków progowych.

Wyliczenie poniżej jest uporządkowane według rosnącego stopnia relaksacji.

Wartości w polu enum
LEVEL_UNSPECIFIED

Domyślny dopuszczalny poziom zawężenia: nie ma żadnych zawężeń, co oznacza, że wszystkie wizyty są w pełni ograniczone.

Ta wartość nie może być używana w sekcji level.

RELAX_VISIT_TIMES_AFTER_THRESHOLD Czasy rozpoczęcia i zakończenia wizyty oraz czasy rozpoczęcia i zakończenia jazdy pojazdem zostaną złagodzone, ale każda wizyta będzie nadal powiązana z tym samym pojazdem i musi być zachowana kolejność wizyt: nie można wstawiać wizyt między sobą ani przed nimi.
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD To samo co RELAX_VISIT_TIMES_AFTER_THRESHOLD, ale z mniej restrykcyjną sekwencją wizyt: wizyty mogą być wykonywane tylko przez ten pojazd, ale mogą też zostać anulowane.
RELAX_ALL_AFTER_THRESHOLD To samo co RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD, ale pojazd jest też zrelaksowany: wizyty są całkowicie bezpłatne w czasie progowym lub po nim i potencjalnie mogą zostać anulowane.