Experimental: constraint for diversification (max 150% of current optimum length)
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user