예제 #1
0
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();
}
예제 #2
0
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;
}