瀏覽代碼

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

Jan Potocki 5 年之前
父節點
當前提交
20160689f4
共有 1 個檔案被更改,包括 18 行新增6 行删除
  1. 18
    6
      Graph.cpp

+ 18
- 6
Graph.cpp 查看文件

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

Loading…
取消
儲存