Browse Source

Release v2.0

Jan Potocki 5 years ago
parent
commit
436c66c8fa
3 changed files with 69 additions and 1 deletions
  1. 9
    0
      LICENSE
  2. 59
    0
      README.md
  3. 1
    1
      pea2plus.cpp

+ 9
- 0
LICENSE View File

@@ -0,0 +1,9 @@
1
+/*
2
+ * ------------------------------------------------------------
3
+ * "THE BEERWARE/CIDERWARE LICENSE" (Revision 1):
4
+ * <MKjanek32> wrote this code. As long as you retain this
5
+ * notice, you can do whatever you want with this stuff. If we
6
+ * meet someday, and you think this stuff is worth it, you can
7
+ * buy me a beer (or preferably a cider) in return.
8
+ * ------------------------------------------------------------
9
+*/

+ 59
- 0
README.md View File

@@ -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ą.

+ 1
- 1
pea2plus.cpp View File

@@ -204,7 +204,7 @@ void parseTSPLIB_EUC_2D(const char *filename, Graph **graph)
204 204
 
205 205
 void banner()
206 206
 {
207
-    cout << "PEA Projekt 2 Plus v2.0ALPHA" << endl;
207
+    cout << "PEA Projekt 2 Plus v2.0" << endl;
208 208
     cout << "Jan Potocki 2017-2019" << endl;
209 209
     cout << "(beerware)" << endl;
210 210
 }

Loading…
Cancel
Save