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