W tej sekcji opisano niektóre opcje rozwiązania routingu.
Limity wyszukiwania
Limity wyszukiwania wyłączają rozwiązanie po osiągnięciu określonego limitu, np. maksymalnej długości czasu lub liczby znalezionych rozwiązań. Możesz ustawić wyszukiwanie za pomocą parametrów wyszukiwania rozwiązania. Zobacz Przykład: Limity czasu.
W poniższej tabeli opisano najczęstsze limity wyszukiwania.
Nazwa | Typ | Domyślny | Opis |
---|---|---|---|
solution_limit
|
int64 | kint64max | Ogranicz liczbę roztworów wygenerowane podczas wyszukiwania. |
time_limit.seconds
|
int64 | kint64max | Ogranicz czas (w sekundach): do wyników wyszukiwania. |
lns_time_limit.seconds
|
int64 | 100 | Ogranicz czas (w sekundach) do czasu w : z wyszukaniem zakończenia dla każdego lokalnego sąsiada wyszukiwania. |
Pierwsza strategia rozwiązania
Pierwszą strategią jest metoda, której używa do znalezienia punktu początkowego
rozwiązanie. W poniższej tabeli znajdziesz opcje dostępne w przypadku first_solution_strategy
.
Opcja | Opis |
---|---|
AUTOMATIC
|
Pozwala rozwiązania określić, którą strategię zastosować zgodnie z rozwiązywanym modelu. |
PATH_CHEAPEST_ARC
|
Początek trasy „start” należy połączyć z który generuje najtańszy segment trasy, a następnie wydłuży trasę o na ostatnim węźle dodanym do trasy. |
PATH_MOST_CONSTRAINED_ARC
|
Podobne do PATH_CHEAPEST_ARC , ale łuki są
oceniane za pomocą selektora opartego na porównaniach, który będzie faworyzował:
najpierw ograniczone łuki. Aby przypisać selektor do modelu routingu, użyj funkcji
metoda ArcIsMoreConstrainedThanArc() . |
EVALUATOR_STRATEGY
|
Podobny do PATH_CHEAPEST_ARC , oprócz kosztów
są oceniane za pomocą funkcji przekazywanej do
SetFirstSolutionEvaluator() |
SAVINGS
|
Algorytm oszczędzania (Clarke i Wright). Odniesienie do: Clarke, G. & Wright, J.W. „Harmonogramy pojazdów z centrum Depot do określonej liczby punktów dostawy” , Operations Research, Vol. 12, 1964, s. 568-581. |
SWEEP
|
Algorytm Sweep (Wren i Holliday). Materiały referencyjne Anthony Wren & Alan Holliday – komputerowe planowanie jazdy pojazdów od jednego lub kilku magazynów do liczby punktów dostawy Kwartalnik Research (1970–1977), nr 23, nr 3 (wrzesień, 1972), s. 333-344. |
CHRISTOFIDES
|
algorytm Christofides (właściwie wariant funkcji Algorytm Christofides wykorzystujący dopasowanie maksymalne zamiast wartości maksymalnej które nie gwarantuje uzyskania 3/2 współczynnika sprzedawcy ds. podróży). Działa w ogólnych modelach kierowania pojazdów przez przedłuża trasę, dopóki nie będzie można wstawić do niej żadnych węzłów. Zobacz Nicosa Christofidesa, najgorszą analizę nowej heurystyki dla problem z podróżnym sprzedawcą, Report 388, Graduate School of Industrial Administracja, CMU, 1976 r. |
ALL_UNPERFORMED
|
Ustaw wszystkie węzły jako nieaktywne. Znajduje rozwiązanie tylko wtedy, gdy węzły są opcjonalne (są elementem ograniczenia rozdzielenia z skończonym kosztem kary). |
BEST_INSERTION
|
Opracuj rozwiązanie iteracyjne, wstawiając najtańszy element węzeł w najtańszej pozycji; koszt wstawienia reklamy jest obliczany na podstawie funkcja kosztowa modelu routingu. Od 2012 r. działa tylko w przypadku modeli węzłów opcjonalnych (z ograniczonymi kosztami kar). |
PARALLEL_CHEAPEST_INSERTION
|
Iteracyjne opracowanie rozwiązania przez wstawienie pary klucz-wartość
najtańszy węzeł w najtańszej pozycji; koszt wstawienia reklamy zależy od
i kosztu łuku. Szybsza niż BEST_INSERTION . |
LOCAL_CHEAPEST_INSERTION
|
Opracuj rozwiązanie iteracyjne, wstawiając każdy z nich
węzeł w najtańszej pozycji; koszt wstawienia zależy od łuku
funkcji kosztu. Różni się od PARALLEL_CHEAPEST_INSERTION według węzła
wybrane do wstawienia; tutaj węzły są uwzględniane w kolejności
proces tworzenia. Szybsza niż PARALLEL_CHEAPEST_INSERTION . |
GLOBAL_CHEAPEST_ARC
|
Łącz iteracyjnie 2 węzły, które generują najtańszy fragment trasy. |
LOCAL_CHEAPEST_ARC
|
Wybierz pierwszy węzeł z niepowiązanym następcą i połączyć go z węzłem, który tworzy najtańszy segment trasy. |
FIRST_UNBOUND_MIN_VALUE
|
Wybierz pierwszy węzeł z niepowiązanym następcą
i połącz go z pierwszym dostępnym węzłem. Jest to odpowiednik
Strategia CHOOSE_FIRST_UNBOUND połączona z kontem ASSIGN_MIN_VALUE (por.
ograniczenie_solver.h). |
Stan wyszukiwania
Stan wyszukiwania możesz zwrócić, używając metody status
modelu routingu.
Oto kod w Pythonie pozwalający wyświetlić stan wyszukiwania:
print("Solver status: ", solver.status())
Powoduje to wydrukowanie liczby całkowitej o następującym znaczeniu:
Wartość | Opis |
---|---|
0 |
ROUTING_NOT_SOLVED : problem nie został jeszcze rozwiązany. |
1 |
ROUTING_SUCCESS : problem został rozwiązany. |
2
|
ROUTING_PARTIAL_SUCCESS_LOCAL_OPTIMUM_NOT_REACHED : problem rozwiązany
po wywołaniu RoutingModel.Solve() z wyjątkiem tego,
nie osiągnięto jeszcze optymalnej wartości. Większa ilość czasu pozwoliłaby poprawić
rozwiązanie. |
3 |
ROUTING_FAIL : nie znaleziono rozwiązania problemu. |
4 |
ROUTING_FAIL_TIMEOUT : upłynęło limit czasu przed znalezieniem rozwiązania. |
5 |
ROUTING_INVALID : model, parametry modelu lub flagi są nieprawidłowe. |
6 |
ROUTING_INFEASIBLE : Okazało się, że problem jest niemożliwy do realizacji. |
Opcje wyszukiwania lokalnego
W tabeli poniżej znajdziesz opcje dotyczące lokalnych strategii wyszukiwania (nazywanych też metaheurystyka). Przeczytaj artykuł Zmienianie strategii wyszukiwania. aby dowiedzieć się, jak skonfigurować te opcje.
Opcja | Opis |
---|---|
AUTOMATIC |
Zezwala rozwiązanieowi na wybranie metaheurystyki. |
GREEDY_DESCENT |
Akceptuje poprawę (obniżenie kosztów) lokalnych sąsiadów z wyszukiwaniem aż do osiągnięto minimum. |
GUIDED_LOCAL_SEARCH |
Wykorzystuje wyszukiwanie lokalne z przewodnikiem, by uciec od lokalnego minima. (por. Wyszukiwanie lokalne z pomocą) jest to zwykle najskuteczniejsza metaheurystyka do wyznaczania tras pojazdów. |
SIMULATED_ANNEALING |
Wykorzystuje symulowane wydrążanie w celu uniknięcia lokalnych minima (por. Symulowane wygładzanie). |
TABU_SEARCH |
Wykorzystuje wyszukiwanie tabu, aby uciec od minima lokalnego (por. Wyszukiwanie w Tabu). |
GENERIC_TABU_SEARCH |
Wykorzystuje wyszukiwanie tabu w odniesieniu do obiektywnej wartości rozwiązania, aby uciec od wyników lokalnych i minimatyczne. |
Kontrola rozmnażania
Nazwa | Typ | Domyślny | Opis |
---|---|---|---|
use_full_propagation
|
wartość logiczna | prawda | Użyj ograniczeń z pełną propagacją w modelu routingu (a nie tylko z propagacją lekką). W pełni naładowana propagacja jest konieczna tylko w przypadku korzystania z wyszukiwania opartego na głębi i modeli które wymagają silnego rozmnażania, aby sfinalizować wartość drugorzędnej zmiennych. Zmiana tego ustawienia na Prawda spowalnia wyszukiwanie w w większości przypadków i zwiększają wykorzystanie pamięci. |