InjectedSolutionConstraint

Rozwiązanie podane w żądaniu, w tym informacje o tym, które wizyty należy ograniczyć i jak należy to robić.

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

object (ShipmentRoute)

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

skippedShipments[]

object (SkippedShipment)

Pominięto dostawy roztworu do wstrzykiwania. Niektóre z nich mogą zostać pominięte w pierwotnym rozwiązaniu. Zobacz pole routes.

constraintRelaxations[]

object (ConstraintRelaxation)

W przypadku zerowej lub większej liczby grup pojazdów określa, kiedy i jak bardzo złagodzą 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 progi i poziomy ograniczeń dotyczących wizyt. Przesyłki wymienione w polu skipped_shipment nie można pominąć. tzn. nie można ich wykonać.

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

object (Relaxation)

Wszystkie złagodzenia ograniczeń dotyczących 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 pole jest puste, jest uznawane za wartość domyślną, a relaxations ma zastosowanie do wszystkich pojazdów, które nie zostały określone w innych polach constraintRelaxations. Może być maksymalnie 1 wartość domyślna, tzn. maksymalnie 1 pole relaksacji ograniczenia jest puste vehicleIndices. Indeks pojazdu może być wymieniony tylko raz, nawet w obrębie kilku constraintRelaxations.

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

Relaks

Jeśli pole relaxations jest puste, godzina rozpoczęcia i sekwencja wszystkich wizyt w dniu routes są w pełni ograniczone i nie można dodawać do tych tras nowych wizyt ani dodawać do nich nowych wizyt. Poza tym godzina rozpoczęcia i zakończenia pojazdu w regionie routes jest całkowicie ograniczona, chyba że pojazd jest pusty (np. nie ma wizyt, a wartość usedIfRouteIsEmpty w modelu ma wartość Fałsz).

relaxations(i).level określa poziom złagodzenia ograniczeń stosowany do wizyty #j, która jest spełniona:

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

I analogicznie, uruchomienie pojazdu jest ustawione na relaxations(i).level, jeśli spełnione są następujące warunki:

  • vehicleStartTime >= relaxations(i).threshold_time ORAZ
  • relaxations(i).threshold_visit_count == 0, a koniec pojazdu jest ustawiony na relaxations(i).level, jeśli są spełnione:
  • vehicleEndTime >= relaxations(i).threshold_time ORAZ
  • route.visits_size() + 1 >= relaxations(i).threshold_visit_count

Aby zastosować poziom relaksacji, jeśli wizyta spełnia thresholdVisitCount LUB thresholdTime, dodaj 2 obiekty relaxations z tymi samymi wartościami level: jeden z ustawionym tylko parametrem thresholdVisitCount, a drugi z tylko thresholdTime. Jeśli wizyta spełnia warunki wielu relaxations, stosowany jest poziom najbardziej zrelaksowany. W efekcie, gdy pojazd zaczyna się od zwiedzania trasy, aż do jego końca, poziom relaksacji staje się bardziej relaksujący: tj. poziom relaksacji nie maleje w miarę postępów trasy.

Czas i sekwencja wizyt na trasie, które nie spełniają warunków progu żadnego z relaxations, są w pełni ograniczone i nie można do nich dodawać żadnych wizyt. Ponadto, jeśli początek lub koniec pojazdu nie spełnia warunków relaksacji, czas jest ustalony, chyba że pojazd jest pusty.

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

enum (Level)

Poziom złagodzenia ograniczeń stosowany, gdy spełnione są warunki na poziomie thresholdTime lub później ORAZ co najmniej thresholdVisitCount.

thresholdTime

string (Timestamp format)

Czas, po którym lub po upływie tego czasu może zostać zastosowane złagodzenie level.

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

thresholdVisitCount

integer

Liczba wizyt, podczas których lub po upływie których może zostać zastosowane złagodzenie level. Jeśli zasada thresholdVisitCount ma wartość 0 (lub jest nieskonfigurowana), zasada level może zostać zastosowana bezpośrednio przy uruchamianiu pojazdu.

Jeśli ma wartość route.visits_size() + 1, level można przyłożyć tylko na końcu pojazdu. Jeśli jest większa niż route.visits_size() + 1, zasada level w ogóle nie jest stosowana do tej trasy.

Poziom

Wyraża różne poziomy złagodzeń ograniczeń, które są stosowane do wizyty i te, które nastąpią po spełnieniu warunków progowych.

Poniższe wyliczenie ułożone jest w kolejności rosnącej złagodzenia.

Wartości w polu enum
LEVEL_UNSPECIFIED

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

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

RELAX_VISIT_TIMES_AFTER_THRESHOLD Godziny rozpoczęcia i zakończenia wizyt w pojeździe zostaną skrócone, ale każda wizyta będzie powiązana z tym samym pojazdem i należy przestrzegać jej sekwencji: nie można wstawiać pomiędzy nimi ani przed nimi.
RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD Tak samo jak w przypadku witryny RELAX_VISIT_TIMES_AFTER_THRESHOLD, ale sekwencja wizyt jest też spokojna: wizyty są powiązane z pojazdem użytkownika.
RELAX_ALL_AFTER_THRESHOLD Tak samo jak w przypadku usługi RELAX_VISIT_TIMES_AND_SEQUENCE_AFTER_THRESHOLD, ale pojazd jest też w prostym stylu: wizyty są całkowicie bezpłatne po osiągnięciu progu lub później i mogą stać się nieskuteczne.