New approach for global optimum sharing
This commit is contained in:
@@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user