New approach for global optimum sharing
This commit is contained in:
@@ -560,16 +560,10 @@ void Graph::travellingSalesmanTabuSearchEngine(Graph &graph, unsigned tabuSteps,
|
||||
}
|
||||
|
||||
// Kryterium aspiracji...
|
||||
globalOptimumMutex.lock();
|
||||
if(tabu == true && neighbourRouteLength >= globalOptimumLength)
|
||||
{
|
||||
globalOptimumMutex.unlock();
|
||||
|
||||
if(tabu == true && neighbourRouteLength >= optimalRouteLength)
|
||||
// ...jezeli niespelnione - pomijamy ruch
|
||||
continue;
|
||||
}
|
||||
else
|
||||
globalOptimumMutex.unlock();
|
||||
|
||||
|
||||
if(nextRouteLength == -1)
|
||||
{
|
||||
@@ -592,22 +586,17 @@ void Graph::travellingSalesmanTabuSearchEngine(Graph &graph, unsigned tabuSteps,
|
||||
// PEA 2 Plus
|
||||
// Jan Potocki 2019
|
||||
|
||||
globalOptimumMutex.lock();
|
||||
if(globalOptimumLength == -1)
|
||||
if(optimalRouteLength == -1)
|
||||
{
|
||||
globalOptimumLength = nextRouteLength;
|
||||
globalOptimum = nextRoute;
|
||||
optimalRouteLength = nextRouteLength;
|
||||
optimalRoute = nextRoute;
|
||||
|
||||
// Reset licznika
|
||||
stopCounter = 0;
|
||||
|
||||
std::cout << "Nowa najlepsza trasa: " << globalOptimumLength << std::endl;
|
||||
}
|
||||
else if(globalOptimumLength > nextRouteLength)
|
||||
else if(optimalRouteLength > nextRouteLength)
|
||||
{
|
||||
globalOptimumLength = nextRouteLength;
|
||||
globalOptimum = nextRoute;
|
||||
optimalRouteLength = nextRouteLength;
|
||||
optimalRoute = nextRoute;
|
||||
|
||||
// Zaplanowanie intensyfikacji przy znalezieniu nowego optimum
|
||||
@@ -615,6 +604,14 @@ void Graph::travellingSalesmanTabuSearchEngine(Graph &graph, unsigned tabuSteps,
|
||||
|
||||
// Reset licznika
|
||||
stopCounter = 0;
|
||||
}
|
||||
|
||||
// Synchronizacja globalnie najlepszej trasy (1)
|
||||
globalOptimumMutex.lock();
|
||||
if(globalOptimumLength == -1 || globalOptimumLength > nextRouteLength)
|
||||
{
|
||||
globalOptimumLength = nextRouteLength;
|
||||
globalOptimum = nextRoute;
|
||||
|
||||
std::cout << "Nowa najlepsza trasa: " << globalOptimumLength << std::endl;
|
||||
}
|
||||
@@ -680,6 +677,12 @@ void Graph::travellingSalesmanTabuSearchEngine(Graph &graph, unsigned tabuSteps,
|
||||
currentRoute = Graph::travellingSalesmanHybrid(graph);
|
||||
currentTabuSteps = tabuSteps;
|
||||
intensification = false;
|
||||
|
||||
// Synchronizacja globalnie najlepszej trasy (2)
|
||||
globalOptimumMutex.lock();
|
||||
optimalRouteLength = globalOptimumLength;
|
||||
optimalRoute = globalOptimum;
|
||||
globalOptimumMutex.unlock();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user