New approach for global optimum sharing

This commit is contained in:
Jan Potocki
2020-01-15 19:25:38 +01:00
parent 74e1d0be8e
commit b577fd6c13
+20 -17
View File
@@ -560,16 +560,10 @@ void Graph::travellingSalesmanTabuSearchEngine(Graph &graph, unsigned tabuSteps,
} }
// Kryterium aspiracji... // Kryterium aspiracji...
globalOptimumMutex.lock(); if(tabu == true && neighbourRouteLength >= optimalRouteLength)
if(tabu == true && neighbourRouteLength >= globalOptimumLength)
{
globalOptimumMutex.unlock();
// ...jezeli niespelnione - pomijamy ruch // ...jezeli niespelnione - pomijamy ruch
continue; continue;
}
else
globalOptimumMutex.unlock();
if(nextRouteLength == -1) if(nextRouteLength == -1)
{ {
@@ -592,22 +586,17 @@ void Graph::travellingSalesmanTabuSearchEngine(Graph &graph, unsigned tabuSteps,
// PEA 2 Plus // PEA 2 Plus
// Jan Potocki 2019 // Jan Potocki 2019
globalOptimumMutex.lock(); if(optimalRouteLength == -1)
if(globalOptimumLength == -1)
{ {
globalOptimumLength = nextRouteLength; optimalRouteLength = nextRouteLength;
globalOptimum = nextRoute;
optimalRoute = nextRoute; optimalRoute = nextRoute;
// Reset licznika // Reset licznika
stopCounter = 0; stopCounter = 0;
std::cout << "Nowa najlepsza trasa: " << globalOptimumLength << std::endl;
} }
else if(globalOptimumLength > nextRouteLength) else if(optimalRouteLength > nextRouteLength)
{ {
globalOptimumLength = nextRouteLength; optimalRouteLength = nextRouteLength;
globalOptimum = nextRoute;
optimalRoute = nextRoute; optimalRoute = nextRoute;
// Zaplanowanie intensyfikacji przy znalezieniu nowego optimum // Zaplanowanie intensyfikacji przy znalezieniu nowego optimum
@@ -615,6 +604,14 @@ void Graph::travellingSalesmanTabuSearchEngine(Graph &graph, unsigned tabuSteps,
// Reset licznika // Reset licznika
stopCounter = 0; 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; std::cout << "Nowa najlepsza trasa: " << globalOptimumLength << std::endl;
} }
@@ -680,6 +677,12 @@ void Graph::travellingSalesmanTabuSearchEngine(Graph &graph, unsigned tabuSteps,
currentRoute = Graph::travellingSalesmanHybrid(graph); currentRoute = Graph::travellingSalesmanHybrid(graph);
currentTabuSteps = tabuSteps; currentTabuSteps = tabuSteps;
intensification = false; intensification = false;
// Synchronizacja globalnie najlepszej trasy (2)
globalOptimumMutex.lock();
optimalRouteLength = globalOptimumLength;
optimalRoute = globalOptimum;
globalOptimumMutex.unlock();
} }
} }