Pārlūkot izejas kodu

Experimental: constraint for diversification (max 150% of current optimum length)

Jan Potocki 5 gadus atpakaļ
vecāks
revīzija
20160689f4
1 mainītis faili ar 18 papildinājumiem un 6 dzēšanām
  1. 18
    6
      Graph.cpp

+ 18
- 6
Graph.cpp Parādīt failu

@@ -676,17 +676,29 @@ void Graph::travellingSalesmanTabuSearchEngine(Graph &graph, unsigned tabuSteps,
676 676
             }
677 677
             else
678 678
             {
679
-                // W innym przypadku wlasciwa dywersyfikacja przez wygenerowanie nowego
680
-                // rozwiazania startowego algorytmem hybrydowym losowo-zachlannym
681
-                currentRoute = Graph::travellingSalesmanHybrid(graph);
682
-                currentTabuSteps = tabuSteps;
683
-                intensification = false;
684
-
685 679
                 // Synchronizacja globalnie najlepszej trasy (2)
686 680
                 globalOptimumMutex.lock();
687 681
                 optimalRouteLength = globalOptimumLength;
688 682
                 optimalRoute = globalOptimum;
689 683
                 globalOptimumMutex.unlock();
684
+
685
+                // W innym przypadku wlasciwa dywersyfikacja przez wygenerowanie nowego
686
+                // rozwiazania startowego algorytmem hybrydowym losowo-zachlannym
687
+                // (ale nie znacznie gorszego niz juz znalezione)
688
+                int criticalLength = (15 * optimalRouteLength) / 10;
689
+                int currentRouteLength;
690
+
691
+                do
692
+                {
693
+                    currentRoute = Graph::travellingSalesmanHybrid(graph);
694
+                    currentRouteLength = 0;
695
+                    
696
+                    for(int i = 1; i < currentRoute.size(); i++)
697
+                        currentRouteLength += graph.getWeight(currentRoute.at(i - 1), currentRoute.at(i));
698
+                } while(currentRouteLength > criticalLength);
699
+
700
+                currentTabuSteps = tabuSteps;
701
+                intensification = false;
690 702
             }
691 703
         }
692 704
 

Notiek ielāde…
Atcelt
Saglabāt