diff --git a/Graph.cpp b/Graph.cpp index 413f50d..4a1bc35 100755 --- a/Graph.cpp +++ b/Graph.cpp @@ -676,17 +676,29 @@ void Graph::travellingSalesmanTabuSearchEngine(Graph &graph, unsigned tabuSteps, } else { - // W innym przypadku wlasciwa dywersyfikacja przez wygenerowanie nowego - // rozwiazania startowego algorytmem hybrydowym losowo-zachlannym - currentRoute = Graph::travellingSalesmanHybrid(graph); - currentTabuSteps = tabuSteps; - intensification = false; - // Synchronizacja globalnie najlepszej trasy (2) globalOptimumMutex.lock(); optimalRouteLength = globalOptimumLength; optimalRoute = globalOptimum; globalOptimumMutex.unlock(); + + // W innym przypadku wlasciwa dywersyfikacja przez wygenerowanie nowego + // rozwiazania startowego algorytmem hybrydowym losowo-zachlannym + // (ale nie znacznie gorszego niz juz znalezione) + int criticalLength = (15 * optimalRouteLength) / 10; + int currentRouteLength; + + do + { + currentRoute = Graph::travellingSalesmanHybrid(graph); + currentRouteLength = 0; + + for(int i = 1; i < currentRoute.size(); i++) + currentRouteLength += graph.getWeight(currentRoute.at(i - 1), currentRoute.at(i)); + } while(currentRouteLength > criticalLength); + + currentTabuSteps = tabuSteps; + intensification = false; } }