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 ( |
| Pola | |
|---|---|
routes[] |
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 |
skippedShipments[] |
Pominięte dostawy rozwiązania do wstrzyknięcia. Niektóre mogą zostać pominięte w oryginalnym rozwiązaniu. Sprawdź pole |
constraintRelaxations[] |
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 ( |
| Pola | |
|---|---|
relaxations[] |
Wszystkie złagodzenia ograniczeń wizyt, które będą miały zastosowanie do wizyt na trasach z pojazdami w |
vehicleIndices[] |
Określa indeksy pojazdów, do których ma zastosowanie ograniczenie wizyty Indeks pojazdu jest mapowany tak samo jak |
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_timeORAZj + 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_timeORAZrelaxations(i).threshold_visit_count == 0, a końcówka pojazdu jest rozluźniona dorelaxations(i).level, jeśli spełnia te warunki:vehicleEndTime >= relaxations(i).threshold_timeORAZroute.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 ( |
| Pola | |
|---|---|
level |
Poziom złagodzenia ograniczeń, który obowiązuje, gdy warunki w momencie |
thresholdTime |
Czas, w którym lub po którym można zastosować złagodzenie 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: |
thresholdVisitCount |
Liczba wizyt, po której lub w przypadku której może zostać zastosowane złagodzenie Jeśli jest to |
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 |
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. |