Algorytm Helda-Karpa
Algorytm Helda – Karpa , zwany także algorytmem Bellmana – Helda – Karpa , to algorytm programowania dynamicznego zaproponowany w 1962 roku niezależnie przez Bellmana oraz Helda i Karpa w celu rozwiązania problemu komiwojażera (TSP), w którym dane wejściowe to macierz odległości między zbiór miast, a celem jest znalezienie trasy o minimalnej długości, która odwiedza każde miasto dokładnie raz przed powrotem do punktu początkowego. Znajduje dokładne rozwiązanie tego problemu i kilku powiązanych problemów, w tym problemu cyklu Hamiltona , w czas wykładniczy .
Opis algorytmu i motywacja
Ponumeruj miasta z wyznaczonym jako miasto „początkowe” (ponieważ rozwiązaniem TSP jest cykl, wybór miasto startowe nie ma znaczenia). Algorytm Helda-Karpa zaczyna się od obliczenia dla każdego zestawu miast i każdego miasta nie zawarte w najkrótszej jednokierunkowej ścieżce od do każde miasto w w jakiejś kolejności (ale nie przez inne miasta). Oznacz tę odległość i napisz dla długości bezpośredniej krawędzi od do . Obliczymy najmniejszych zestawów
Kiedy ma dwa obliczenie na jedną lub dwie Na przykład jest po prostu i to tylko długość . Podobnie sol jest długością lub , cokolwiek jest krótsze.
Gdy zawiera trzy lub więcej miast, liczba ścieżek prowadzących przez szybko rośnie, ale wystarczy zbadać tylko kilka takich ścieżek, aby znaleźć najkrótszą Na przykład, jeśli jest 1 wtedy musi być krótszy niż , a długość nie jest możliwą wartością . Podobnie najkrótsza \ przez , a najkrótsza ścieżka od przez do kończy się krawędzią , wtedy cała ścieżka od do musi wynosić , a nie żadna z pozostałych pięciu ścieżek utworzonych przez odwiedzenie w innej kolejności.
ogólnie _ _ Dla każdej liczby całkowitej , napisz dla zestawu utworzonego przez usunięcie z . Następnie, jeśli najkrótsza ścieżka od przez do ma Displaystyle jako jego przedostatnie miasto, a następnie usunięcie ostatniej krawędzi z tej ścieżki musi dać najkrótszą ścieżkę od do . Oznacza to że są tylko ścieżki od do przez , po jednej dla każdego możliwego przedostatniego miasta o długości sol i .
Ten etap algorytmu kończy się, gdy jest znany dla każdej liczby całkowitej , co daje najkrótszą odległość od miasta do miasta , który przechodzi przez każde inne miasto. Znacznie długości krawędzi, możliwe następnie znajduje najkrótszy
Ostatecznie samą najkrótszą ścieżkę (a nie tylko jej długość) można zrekonstruować, przechowując obok etykiety przedostatniego miasta na ścieżce od do do , podnosząc wymagania dotyczące tylko o stały współczynnik.
Złożoność algorytmiczna
Algorytm Helda-Karpa ma wykładniczą złożoność czasową wydajność algorytmu brutalnej siły. Karp wymaga funkcji siła potrzebuje tylko do przechowywania samego wykresu
Czas
sol dla -elementowego podzbioru z wymaga znalezienia najkrótszej z , z których każda została znaleziona przez dodanie znanej wartości i długość krawędzi z oryginalnego wykresu; to znaczy wymaga czasu proporcjonalnego do . Istnieją -elementowe podzbiory ; a każdy podzbiór daje możliwe wartości . Obliczanie wszystkich wartości gdzie wymaga więc czasu , przez całkowity czas we wszystkich rozmiarach podzbioru . Drugi algorytmu, znalezienie pełnego cyklu spośród czas na wydajność
W grafów można minimum dla każdego , gdzie jest zbiorem dopełnień . Jest to analogiczne do wyszukiwania dwukierunkowego rozpoczynającego się od i spotkanie w punkcie środkowym . Jest to jednak stała poprawa czynnika i nie wpływa na wydajność asymptotyczną.
Przestrzeń
Przechowywanie wszystkich wartości dla podzbiorów o zachowania . Kompletna tabela wartości zatem miejsca . To zakłada, że jest wystarczająco mały, aby można go przechowywać jako maskę bitową stałej wielokrotności słów maszynowych , a nie jawną k-krotkę.
nie sam cykl, to złożoność przestrzeni można nieco poprawić, zauważając, że obliczenie dla o rozmiarze tylko wartości dla o rozmiarze . Zachowując tylko wartości gdzie ma rozmiar albo lub zmniejsza maksymalne wymagania algorytmu dotyczące miejsca, osiągane, gdy , do .
Przykład
Macierz odległości:
Opis funkcji:
- g(x, S) - zaczynając od 1, path min cost kończy się na wierzchołku x, przechodząc przez wierzchołki w zbiorze S dokładnie raz
- c xy - koszt krawędzi kończy się na x od y
- p(x, S) - przedostatni wierzchołek do x ze zbioru S. Używany do konstruowania ścieżki TSP z powrotem na końcu.
k = 0, zbiór zerowy:
Zestaw ∅:
g(2, ∅) = do 21 = 1 g(3, ∅) = do 31 = 15 g(4, ∅) = do 41 = 6
k = 1, rozważ zestawy po 1 elemencie:
zestaw {2}:
g(3,{2}) = do 32 + g(2, ∅ ) = do 32 + do 21 = 7 + 1 = 8 p(3,{2}) = 2 g(4,{2}) = do 42 + g(2, ∅ ) = do 42 + do 21 = 3 + 1 = 4 p(4,{2}) = 2
zestaw {3}:
g(2,{3}) = do 23 + g(3, ∅ ) = do 23 + do 31 = 6 + 15 = 21 p(2,{3}) = 3 g(4,{3}) = do 43 + g(3, ∅ ) = do 43 + do 31 = 12 + 15 = 27 p(4,{3}) = 3
zestaw {4}:
g(2,{4}) = do 24 + g(4, ∅ ) = do 24 + do 41 = 4 + 6 = 10 p(2,{4}) = 4 g(3,{4}) = do 34 + g(4, ∅ ) = do 34 + do 41 = 8 + 6 = 14 p(3,{4}) = 4
k = 2, rozważmy zestawy 2 elementów:
Zestaw {2,3}:
g(4,{2,3}) = min {c 42 + g(2,{3}), c 43 + g(3,{2})} = min {3+21, 12+8}= min {24, 20}= 20 p(4,{2,3}) = 3
Zestaw {2,4}:
g(3,{2,4}) = min {c 32 + g(2,{4}), c 34 + g(4,{2})} = min {7+10, 8+4}= min {17, 12} = 12 p(3,{2,4}) = 4
Zestaw {3,4}:
g(2,{3,4}) = min {c 23 + g(3,{4}), do 24 + g(4,{3})} = min {6+14, 4+27}= min {20, 31}= 20 p(2,{3,4}) = 3
Długość optymalnej wycieczki:
f = g(1,{2,3,4}) = min { do 12 + g(2,{3,4}), do 13 + g(3,{2,4}), do 14 + g( 4,{2,3}) } = min. {2 + 20, 9 + 12, 10 + 20} = min. {22, 21, 30} = 21
Poprzednik węzła 1: p(1,{2,3,4}) = 3
Poprzednik węzła 3: p(3, {2,4}) = 4
Poprzednik węzła 4: p(4, {2}) = 2
Poprzednik węzła 2: p(2, {}) = 1
Stąd optymalna trasa TSP jest dana przez 1 → 2 → 4 → 3 → 1.
Pseudo kod
funkcji TSP (G, n) jest dla k := 2 do n do g({k}, k) := d(1, k) koniec dla dla s := 2 do n−1 do dla wszystkich S ⊆ { 2, ..., n}, |S| = s do dla wszystkich k ∈ S do g(S, k) := min m≠k,m∈S [g(S\{k}, m) + d(m, k)] koniec za koniec za koniec dla opt := min k≠1 [g({2, 3, ..., n}, k) + d(k, 1)] return (opt) funkcja końcowa
Powiązane algorytmy
Dokładne algorytmy rozwiązywania TSP
Poza programowaniem dynamicznym, programowanie liniowe oraz rozgałęzianie i wiązanie są również wzorcami projektowymi używanymi do dokładnych rozwiązań TSP. Programowanie liniowe wykorzystuje metodę płaszczyzny cięcia w programowaniu całkowitym , tj. rozwiązywanie LP utworzonego przez dwa ograniczenia w modelu, a następnie szukanie płaszczyzny cięcia poprzez dodawanie ograniczeń nierówności, aby stopniowo zbiegać się do optymalnego rozwiązania. Kiedy ludzie stosują tę metodę, aby znaleźć płaszczyznę cięcia, często polegają na doświadczeniu, więc ta metoda jest rzadko stosowana jako metoda ogólna.
Termin oddział i związany został po raz pierwszy użyty w 1963 roku w artykule opublikowanym przez Little i in. na TSP, opisujący technikę łączenia mniejszych przestrzeni poszukiwań i ustalania dolnych granic w celu rozszerzenia praktycznego zakresu zastosowania dokładnego rozwiązania. Technika ta jest przydatna do zwiększania liczby miast, które można rozpatrywać obliczeniowo, ale nadal dzieli się na zbiory danych na dużą skalę.
Kontroluje proces wyszukiwania poprzez zastosowanie restrykcyjnych granic, umożliwiając poszukiwanie optymalnej gałęzi rozwiązania z drzewa stanów przestrzeni w celu jak najszybszego znalezienia optymalnego rozwiązania. Kluczowym elementem tego algorytmu jest wybór ograniczającej granicy. Różne ograniczające granice mogą tworzyć różne algorytmy związane z gałęziami.
Przybliżone algorytmy rozwiązywania TSP
Ponieważ zastosowanie precyzyjnego algorytmu do rozwiązania problemu jest bardzo ograniczone, często stosujemy algorytm przybliżony lub algorytm heurystyczny. Wynik algorytmu można ocenić za pomocą C / C* ≤ ε . C to całkowita odległość do pokonania wygenerowana z przybliżonego algorytmu; C* to optymalna odległość przejazdu; ε jest górną granicą stosunku całkowitej odległości przebytej przez rozwiązanie przybliżone do rozwiązania optymalnego w najgorszych warunkach. Wartość ε >1,0. Im bardziej zbliża się do 1,0, tym lepszy jest algorytm. Algorytmy te obejmują: Algorytm interpolacji, Algorytm najbliższego sąsiada , algorytm Clarka i Wrighta, algorytm podwójnego drzewa rozpinającego, algorytm Christofidesa , algorytm hybrydowy, algorytm probabilistyczny (taki jak symulowane wyżarzanie ).