|
@@ -0,0 +1,59 @@
|
|
1
|
+# PEA 2 Plus – tabu search dla TSP
|
|
2
|
+Rozwinięcie drugiego projektu na kurs Projektowanie efektywnych algorytmów na PWr w 2017 – implementacja algorytmu przeszukiwania lokalnego z zakazami (tabu search) dla problemu komiwojażera (TSP) dostosowana do pracy wielowątkowej oraz (dodatkowo) algorytmów z pierwszego projektu – przegląd zupełny (brute force), podział i ograniczenia (branch and bound). Program jest napisany w standardzie C++11 bez używania bibliotek specyficznych dla konkretnego systemu operacyjnego, powinno dać się go skompilować na Windowsie, chociaż sam nie próbowałem.
|
|
3
|
+
|
|
4
|
+__Elementy programu__
|
|
5
|
+* interfejs grafu – klasa abstrakcyjna Graph
|
|
6
|
+* implementacja grafu w postaci macierzy sąsiedztwa (domyślnie używana) i listy sąsiedztwa – klasy ArrayGraph i ListGraph
|
|
7
|
+* niezależny od platformy system do pomiaru czasu, bazujący na std::chrono z C++11 – klasa Stopwatch
|
|
8
|
+* parsery plików w formatach FULL_MATRIX i EUC_2D z TSPLIB95
|
|
9
|
+* algorytmy przeglądu zupełnego (jednowątkowy)
|
|
10
|
+* algorytm podziału i ograniczeń (jednowątkowy)
|
|
11
|
+* algorytm tabu search (wielowątkowy, bazujący na std::thread z C++11)
|
|
12
|
+* pomocnicze algorytmy na potrzeby tabu search: losowy, zachłanny oraz ich hybryda
|
|
13
|
+* pętla do automatycznego wykonywania pomiarów dla określonych w stałej czasów pracy algorytmu tabu search
|
|
14
|
+
|
|
15
|
+__Charakterystyka tabu search:__
|
|
16
|
+* rozwiązanie początkowe generowane algorytmem zachłannym
|
|
17
|
+* sąsiedztwo typu swap (zamiana wierzchołków miejscami)
|
|
18
|
+* lista tabu przechowująca obydwa zamienione wierzchołki
|
|
19
|
+* kryterium aspiracji omijające listę tabu, jeżeli zakazany ruch prowadzi do lepszego rozwiązania niż najlepsze znalezione dotychczas
|
|
20
|
+* dwa rodzaje dywersyfikacji:
|
|
21
|
+ * intensyfikacja przeszukiwania po znalezieniu lepszego rozwiązania od dotychczasowego (restart od nowego rozwiązania ze zmniejszoną 4x kadencją na liście tabu)
|
|
22
|
+ * restart od nowego rozwiązania wygenerowanego algorytmem losowo-zachłannym (losowa część wierzchołków jest losowana, reszta wybierana zachłannie) po określonej liczbie iteracji bez poprawy – domyślnie 10 tysięcy
|
|
23
|
+* kadencja na liście tabu dobierana automatycznie (liczba wierzchołków zaokrąglona w dół do najbliższej dziesiątki) lub konfigurowana ręcznie
|
|
24
|
+
|
|
25
|
+__Parametry wywołania programu:__
|
|
26
|
+* -t – liczba wątków tabu search (domyślnie 2)
|
|
27
|
+* -l – użycie listowej reprezentacji grafu (zamiast macierzowej)
|
|
28
|
+* -fmatrix – wczytanie pliku w formacie FULL_MATRIX przy uruchamianiu programu
|
|
29
|
+* -feuc2d – wzytanie pliku w formacie EUC_2D przy ładowaniu programu
|
|
30
|
+
|
|
31
|
+__Osiągi tabu search na moim laptopie – 2 wątki:__
|
|
32
|
+(1x Intel Core i5-2520M @ 2.5 GHz, 8 GB RAM, macOS 10.13.6)
|
|
33
|
+* ftv33.atsp (optimum 1286)
|
|
34
|
+ * po 30 sekundach za każdym razem optimum
|
|
35
|
+* swiss42.tsp (optimum 1273)
|
|
36
|
+ * po 30 sekundach zwykle optimum lub więcej o około 20 (np. 1288)
|
|
37
|
+ * po 60 sekundach za każdym razem optimum
|
|
38
|
+* ftv47.atsp (optimum 1776)
|
|
39
|
+ * po 5 minutach 1790, więcej o 14 od optimum – jeden test
|
|
40
|
+ * po 15 minutach 1798, więcej o 22 od optimum – jeden test
|
|
41
|
+* berlin52.tsp (optimum 7542)
|
|
42
|
+ * po 5 minutach 7730, więcej o 188 od optimum – jeden test
|
|
43
|
+ * po 10 minutach 7673, więcej o 131 od optimum – jeden test
|
|
44
|
+
|
|
45
|
+__Osiągi tabu search na serwerze panamint.kcir.pwr.edu.pl – 64 wątki:__
|
|
46
|
+(4x AMD Opteron 6276 @ 2.3 GHz, 256 GB RAM, Debian Linux 9)
|
|
47
|
+* ftv47.atsp (optimum 1776)
|
|
48
|
+ * po 5 minutach czasami optimum lub blisko optimum (np. 1782)
|
|
49
|
+ * po 15 minutach tak samo, ale większa szansa trafienia na optimum lub prawie dokładnie optimum (1777)
|
|
50
|
+ * po 20 minutach za każdym razem optimum
|
|
51
|
+* berlin52.tsp (optimum 7542)
|
|
52
|
+ * po 5 minutach czasami optimum lub więcej o około 130 (np. 7679)
|
|
53
|
+ * po 10 minutach prawie za każdym razem optimum
|
|
54
|
+* ftv70.atsp (optimum 1950)
|
|
55
|
+ * po 40 minutach 1972, więcej o 22 od optimum – jeden test
|
|
56
|
+
|
|
57
|
+Dane testowe pochodzą ze strony:
|
|
58
|
+http://comopt.ifi.uni-heidelberg.de/software/TSPLIB95/
|
|
59
|
+Poza ftv70 (kadencja 60), wszystkie testy zostały przeprowadzone z automatycznie ustawioną kadencją.
|