bool RecordEnumerator::doBacktrack(Solver& s, uint32 bl) { assert(bl >= s.rootLevel()); if (!projectionEnabled()) { addSolution(s); } bl = std::min(bl, assertionLevel(s)); if (s.backtrackLevel() > 0) { // must clear backtracking level; // not needed to guarantee redundancy-freeness // and may inadvertently bound undoUntil() s.setBacktrackLevel(0); } s.undoUntil(bl); if (solution_.empty()) { assert(minimize() && minimize()->mode() == MinimizeConstraint::compare_less); return true; } bool r = true; if (solution_.size() < 4) { r = solution_.end(); } else { Literal x; if (s.isFalse(solution_[solution_.secondWatch()])) { x = solution_[0]; } LearntConstraint* c = Clause::newLearntClause(s, solution_.lits(), Constraint_t::learnt_conflict, solution_.secondWatch()); nogoods_.push_back((Clause*)c); r = s.force(x, c); } return r || s.resolveConflict(); }
void run(int iRun) { double t_ini, t_fin; double secs; char evalsal[50];//={"results/Evaluations_"}; char timesal[50];//={"results/Time_"}; char sizesal[50];//={"results/Size_"}; char funsal[50];//={"results/FUN_"}; char varsal[50];//={"results/VAR_"}; int evaluations; numRest = 0; cycle = 0; gen = 0; sprintf(evalsal,"results/Evaluations_%s_%d",problemInstance,D); sprintf(timesal,"results/Time_%s_%d",problemInstance,D); sprintf(sizesal,"results/Size_%s_%d",problemInstance,D); sprintf(funsal,"results/FUN_%s_%d_%d",problemInstance,D,iRun); sprintf(varsal,"results/VAR_%s_%d_%d",problemInstance,D,iRun); if(mpi_rank==0) t_ini=clock(); randomize(); initializeProblem(problemInstance); initializePopulation(); synchronize_x_sub_all(); evaluateSpeciesInitial(); int i; while(cycle<Cycles){ cycle++; // if(mpi_rank==0) // printf("Cycle:\t%d\n",cycle); gen = 0; while(gen<Gmax){ gen++; ED_rand_1_bin(); //species parallel, results differ from original evaluatePopulation(); addSolution(); selection(); synchronize_x_sub_all(); } } evaluations = cycle * Gmax * numSpecies * NP; generateSolutions(); if(mpi_rank==0) { fptx = fopen(funsal,"w"); exportNonDominatedPopulationObjetivesValues(finalFitness,sizeSol,fptx); fptv = fopen(varsal,"w"); exportNonDominatedPopulationSolutionValues(finalSolutions,sizeSol,fptv); fptu = fopen(evalsal,"a"); fprintf(fptu, "%d\n",evaluations); fpts = fopen(sizesal,"a"); fprintf(fpts, "%d\n",sizeSolND); if(mpi_rank==0) t_fin=clock(); secs = (t_fin-t_ini)/CLOCKS_PER_SEC; fptt = fopen(timesal,"a"); fprintf(fptt,"%.16g \n", secs); fclose(fptx); fclose(fptu); fclose(fptv); fclose(fptt); fclose(fpts); } MPI_Barrier(MPI_COMM_WORLD); return; }