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

This commit is contained in:
Jan Potocki
2020-01-20 19:33:40 +01:00
parent 6cab940785
commit 20160689f4
+18 -6
View File
@@ -676,17 +676,29 @@ void Graph::travellingSalesmanTabuSearchEngine(Graph &graph, unsigned tabuSteps,
} }
else 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) // Synchronizacja globalnie najlepszej trasy (2)
globalOptimumMutex.lock(); globalOptimumMutex.lock();
optimalRouteLength = globalOptimumLength; optimalRouteLength = globalOptimumLength;
optimalRoute = globalOptimum; optimalRoute = globalOptimum;
globalOptimumMutex.unlock(); 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;
} }
} }