void run(std::string inputFile) { srand(1607); loadData(inputFile); clock_t begin = clock(); int bestCost = 0; int* bestSolution; int it = 1; int lastImprovement = 0; const int numExchanges = 10; const int itNoImprovement = 100; const int maxIterations = 500; int* s = initialSolution(); localSearch(s, n); //printf("f(0) = %d\n", cost); bestCost = cost; bestSolution = s; while((it-lastImprovement < itNoImprovement) && (it < maxIterations)) { s = perturbation(s, numExchanges, n); localSearch(s, n); if(cost > bestCost) { bestCost = cost; bestSolution = s; lastImprovement = it; } if((1.0*cost) < ((1-epslon)*bestCost)) { s = bestSolution; } //printf("f(%d) = %d lastImprovement = %d\n", it, bestCost, lastImprovement); it++; } double elapsedSecs = double(clock() - begin) / CLOCKS_PER_SEC; avgTime = avgTime + elapsedSecs; verifySolution(inputFile, bestSolution, bestCost, elapsedSecs); deleteMatrix(matrix, n); deleteMatrix(diff, n); //deleteMatrix(simDegrees, n); //delete [] pos; delete [] s; }
void operator()() { // Memory leak at the end... inst::Instance* instance = createInstance(_param); sol::Solution initialSolution(instance); sol::ObjValue initObjValue = initialSolution.computeObjValue(); initialSolution.applyDelta(initObjValue); _pool.addSolution(initialSolution); RandomMoves randomMoves( _dist(_gen), *instance, instance->numProcesses() * _param["a"].as<double>()); HillClimbing hillClimbing(_dist(_gen), *instance, &_pool, _param["b"].as<int>(), _param["e"].as<int>(), _param["f"].as<int>()); IteratedLocalSearch<HillClimbing, RandomMoves> ils(_param["c"].as<int>(), &hillClimbing, &randomMoves, &_pool); do { sol::Solution solution(bestSolution()); ils.apply(solution); boost::this_thread::interruption_point(); } while(true); }