InjectedSolutionConstraint

Rozwiązanie wstrzyknięte w żądanie, które zawiera 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)

Drogi podania roztworu. Niektóre trasy mogą zostać pominięte w oryginalnym rozwiązaniu. Trasy i pominięte przesyłki muszą spełniać podstawowe założenia dotyczące ważności wymienione w przypadku injectedFirstSolutionRoutes.

skippedShipments[]

object (SkippedShipment)

Pominięte dostawy rozwiązania do wstrzyknięcia. Niektóre mogą zostać pominięte w oryginalnym rozwiązaniu. Sprawdź pole routes.

constraintRelaxations[]

object (ConstraintRelaxation)

Określa, kiedy i w jakim stopniu należy złagodzić ograniczenia w przypadku co najmniej 1 grupy pojazdów. 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 progach ograniczenia dotyczące wizyt zostaną złagodzone i do jakiego poziomu. Przesyłki wymienione w polu skipped_shipment nie mogą być realizowane.

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

object (Relaxation)

Wszystkie złagodzenia ograniczeń wizyt, które będą miały zastosowanie do wizyt na trasach z pojazdami w vehicleIndices.

vehicleIndices[]

integer

Określa indeksy pojazdów, do których ma zastosowanie ograniczenie wizyty relaxations. Jeśli to pole jest puste, jest to wartość domyślna, a relaxations mają zastosowanie do wszystkich pojazdów, które nie są określone w innych constraintRelaxations. Może być co najwyżej 1 wartość domyślna, czyli co najwyżej 1 pole ograniczenia może być puste vehicleIndices. Indeks pojazdów 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 pole relaxations jest puste, czas rozpoczęcia i kolejność wszystkich wizyt w polu routes są w pełni ograniczone i nie można wstawiać ani dodawać nowych wizyt do tych tras. Ponadto czas rozpoczęcia i zakończenia przejazdu pojazdu w routes jest w pełni ograniczony, chyba że pojazd jest pusty (tzn. nie ma wizyt, a w modelu parametr usedIfRouteIsEmpty ma wartość false).

relaxations(i).level określa poziom złagodzenia 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 początek podróży jest traktowany jako relaxations(i).level, jeśli spełnia te warunki:

  • vehicleStartTime >= relaxations(i).threshold_time ORAZ
  • relaxations(i).threshold_visit_count == 0, a końcówka pojazdu jest rozluźniona do relaxations(i).level, jeśli spełnia te warunki:
  • vehicleEndTime >= relaxations(i).threshold_time ORAZ
  • route.visits_size() + 1 >= relaxations(i).threshold_visit_count

Aby zastosować poziom złagodzenia, jeśli wizyta spełnia warunek thresholdVisitCount LUB thresholdTime, dodaj 2 warunki relaxations z tym samym warunkiem level: jeden z ustawionym tylko warunkiem thresholdVisitCount, a drugi z ustawionym tylko warunkiem thresholdTime. Jeśli wizyta spełnia warunki kilku relaxations, stosowany jest najbardziej liberalny poziom. W rezultacie od momentu rozpoczęcia jazdy do momentu zakończenia jazdy poziom odprężenia staje się coraz wyższy, czyli nie maleje w trakcie trasy.

Czas i kolejność wizyt na trasie, które nie spełniają warunków progowych żadnego relaxations, są w pełni ograniczone i nie można wstawiać do nich żadnych wizyt. Jeśli rozpoczęcie lub zakończenie przejazdu nie spełnia warunków żadnego z wyjątków, czas jest stały, chyba że pojazd jest pusty.

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

enum (Level)

Poziom złagodzenia ograniczeń, który obowiązuje, gdy warunki w momencie thresholdTime ORAZ co najmniej thresholdVisitCount są spełnione.

thresholdTime

string (Timestamp format)

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

Korzysta ze standardu RFC 3339, w którym wygenerowane dane wyjściowe są zawsze znormalizowane do formatu Z i zawierają 0, 3, 6 lub 9 cyfr po przecinku. Akceptowane są też przesunięcia inne niż „Z”. Przykłady: "2014-10-02T15:01:23Z", "2014-10-02T15:01:23.045123456Z" lub "2014-10-02T15:01:23+05:30".

thresholdVisitCount

integer

Liczba wizyt, po której lub w przypadku której może zostać zastosowane złagodzenie level. Jeśli wartość thresholdVisitCount wynosi 0 (lub nie jest ustawiona), level może zostać zastosowany bezpośrednio po uruchomieniu pojazdu.

Jeśli jest to route.visits_size() + 1, level można zastosować tylko do końca 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 złagodzenia ograniczeń, które są stosowane w przypadku wizyty i kolejnych wizyt, gdy spełnione są warunki progowe.

Poniższe wyliczenie jest uporządkowane według rosnącego stopnia rozluźnienia.

Wartości w polu enum
LEVEL_UNSPECIFIED

Domyślny poziom relaksacji: żadne ograniczenia nie są zrelaksowane, tzn. wszystkie wizyty są w pełni ograniczone.

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

RELAX_VISIT_TIMES_AFTER_THRESHOLD Godziny rozpoczęcia wizyt oraz godziny rozpoczęcia i zakończenia przejazdów pojazdów zostaną poluzowane, ale każda wizyta pozostanie przypisana do tego samego pojazdu, a kolejność wizyt musi być zachowana: nie można wstawić między nimi ani przed nimi żadnej wizyty.
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD Podobnie jak w przypadku RELAX_VISIT_TIMES_AFTER_THRESHOLD, ale sekwencja wizyt jest też mniej rygorystyczna: wizyty mogą być wykonywane tylko przez ten pojazd, ale mogą też zostać niewykonane.
RELAX_ALL_AFTER_THRESHOLD Tak samo jak RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD, ale wizyta jest też elastyczna: wizyty są całkowicie bezpłatne po przekroczeniu czasu progowego i mogą zostać anulowane.