Bladeren bron

v2.0.2: new tabu auto-tenure, minor refactoring

Jan Potocki 5 jaren geleden
bovenliggende
commit
29e58ee5ad
2 gewijzigde bestanden met toevoegingen van 22 en 20 verwijderingen
  1. 4
    1
      README.md
  2. 18
    19
      pea2plus.cpp

+ 4
- 1
README.md Bestand weergeven

27
 * dwa rodzaje dywersyfikacji:
27
 * dwa rodzaje dywersyfikacji:
28
   * intensyfikacja przeszukiwania po znalezieniu lepszego rozwiązania od dotychczasowego (restart od nowego rozwiązania ze zmniejszoną 4x kadencją na liście tabu)
28
   * intensyfikacja przeszukiwania po znalezieniu lepszego rozwiązania od dotychczasowego (restart od nowego rozwiązania ze zmniejszoną 4x kadencją na liście tabu)
29
   * 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
29
   * 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
30
-* kadencja na liście tabu dobierana automatycznie (liczba wierzchołków zaokrąglona w dół do najbliższej dziesiątki) lub konfigurowana ręcznie
30
+* kadencja na liście tabu dobierana automatycznie (dwukrotność liczby wierzchołków zaokrąglona w dół do najbliższej dziesiątki) lub konfigurowana ręcznie
31
 * warunkiem zatrzymania algorytmu jest skonfigurowana liczba sekund (domyślnie 60)
31
 * warunkiem zatrzymania algorytmu jest skonfigurowana liczba sekund (domyślnie 60)
32
 
32
 
33
 __Parametry wywołania programu:__
33
 __Parametry wywołania programu:__
65
 Dane testowe pochodzą ze strony:  
65
 Dane testowe pochodzą ze strony:  
66
 http://comopt.ifi.uni-heidelberg.de/software/TSPLIB95/  
66
 http://comopt.ifi.uni-heidelberg.de/software/TSPLIB95/  
67
 Poza ftv70 (kadencja 60), wszystkie testy zostały przeprowadzone z automatycznie ustawioną kadencją.
67
 Poza ftv70 (kadencja 60), wszystkie testy zostały przeprowadzone z automatycznie ustawioną kadencją.
68
+
69
+UWAGA:  
70
+Opisane wyżej osiągi zostały zmierzone na wcześniejszej wersji z błędnie aktualizowaną listą tabu, po poprawce (v2.0.2) rezultaty są ciut lepsze - na panamincie optimum dla berlin52.tsp prawie zawsze zostaje trafione po 5 minutach zamiast 10, z drugiej strony 15 minut dalej nie wystarcza, żeby za każdym razem trafić optimum ftv47.atsp. Po przeprowadzeniu wszystkich testów jeszcze raz zaktualizuję powyższe sekcje, póki co zostawiam z tym komentarzem.

+ 18
- 19
pea2plus.cpp Bestand weergeven

119
 
119
 
120
 void parseTSPLIB_EUC_2D(const char *filename, Graph **graph)
120
 void parseTSPLIB_EUC_2D(const char *filename, Graph **graph)
121
 {
121
 {
122
-  // Parser plikow EUC_2D z TSPLIB
123
-  // Implementacja: Jan Potocki 2017
122
+    // Parser plikow EUC_2D z TSPLIB
123
+    // Implementacja: Jan Potocki 2017
124
     string fileInput;
124
     string fileInput;
125
     vector<float> xCoord, yCoord;
125
     vector<float> xCoord, yCoord;
126
     ifstream salesmanDataFile;
126
     ifstream salesmanDataFile;
202
     return;
202
     return;
203
 }
203
 }
204
 
204
 
205
+unsigned autoTabuLength(Graph &graph)
206
+{
207
+    unsigned computedTabuLength;
208
+
209
+    computedTabuLength = (2 * graph.getVertexNumber() / 10) * 10;
210
+    if(computedTabuLength == 0)
211
+        computedTabuLength = 10;
212
+
213
+    // PEA 2 Plus
214
+    // Jan Potocki 2019
215
+    return computedTabuLength;
216
+}
217
+
205
 void banner()
218
 void banner()
206
 {
219
 {
207
-    cout << "PEA Projekt 2 Plus v2.0.1" << endl;
220
+    cout << "PEA Projekt 2 Plus v2.0.2" << endl;
208
     cout << "Jan Potocki 2017-2019" << endl;
221
     cout << "Jan Potocki 2017-2019" << endl;
209
     cout << "(beerware)" << endl;
222
     cout << "(beerware)" << endl;
210
 }
223
 }
400
                     {
413
                     {
401
                         unsigned effectiveTabuLength;
414
                         unsigned effectiveTabuLength;
402
                         if(tabuLength == 0)
415
                         if(tabuLength == 0)
403
-                        {
404
-                            effectiveTabuLength = (graph->getVertexNumber() / 10) * 10;
405
-                            if(effectiveTabuLength == 0)
406
-                              effectiveTabuLength = 10;
407
-                              // PEA 2 Plus
408
-                              // Jan Potocki 2019
409
-                        }
416
+                            effectiveTabuLength = autoTabuLength(*graph);
410
                         else
417
                         else
411
-                        {
412
                             effectiveTabuLength = tabuLength;
418
                             effectiveTabuLength = tabuLength;
413
-                        }
414
 
419
 
415
                         if(tabuLength == 0)
420
                         if(tabuLength == 0)
416
                             cout << "Kadencja: " << effectiveTabuLength << " (auto)" << endl;
421
                             cout << "Kadencja: " << effectiveTabuLength << " (auto)" << endl;
524
                 {
529
                 {
525
                     unsigned effectiveTabuLength;
530
                     unsigned effectiveTabuLength;
526
                     if(tabuLength == 0)
531
                     if(tabuLength == 0)
527
-                    {
528
-                        effectiveTabuLength = (graph->getVertexNumber() / 10) * 10;
529
-                        if(effectiveTabuLength == 0)
530
-                          effectiveTabuLength = 10;
531
-                    }
532
+                        effectiveTabuLength = autoTabuLength(*graph);
532
                     else
533
                     else
533
-                    {
534
                         effectiveTabuLength = tabuLength;
534
                         effectiveTabuLength = tabuLength;
535
-                    }
536
 
535
 
537
                     int measureResult = -1;
536
                     int measureResult = -1;
538
                     int measureResultDiv = -1;
537
                     int measureResultDiv = -1;

Laden…
Annuleren
Opslaan