Exemple #1
0
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;	
}
Exemple #2
0
   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);
   }