Пример #1
0
ReturnFlag CPSORSwarm::run_(){
	#ifdef OFEC_CONSOLE
	if(Global::msp_global->m_runId==0){
		mSingleObj::getSingleObj()->setProgrOutputFlag(true);
		if(mMultiModal::getPopInfor())
		mMultiModal::getPopInfor()->setOutProgFlag(true);
	}
	#endif // OFEC_CONSOLE

	createSubswarms();
	ReturnFlag r_flag=Return_Normal;
	while(!ifTerminating()){
		for(auto &swarm:m_subPop){
			if(swarm->m_popsize==0) continue;
			r_flag=swarm->evolve();
			if(r_flag==Return_Terminate) break;
			
			handleReturnFlagAll(r_flag);
			HANDLE_RETURN_FLAG(r_flag)
			
			#ifdef OFEC_DEMON
					vector<Algorithm*> vp;
					for(auto &it:m_subPop){
						vp.push_back(it.get());
					}
					msp_buffer->updateBuffer_(&vp);
			#endif
		}
		if(r_flag==Return_Terminate) break;
		//cout<<Global::msp_global->mp_problem->getEvaluations()<<" "<<getNumPops()<<" "<<m_subPop[findBestPop(1)]->m_best[0]->obj(0)<<endl;
		measureMultiPop();


		if(m_subPop.size()>1){
			while(removeOverlapping()!=-1);
			for(auto it=m_subPop.begin();it!=m_subPop.end();++it) (*it)->checkOverCrowd(m_subSize);
				
			for(decltype(m_subPop.size()) i=0;i<m_subPop.size();i++){
				if(m_subPop[i]->isConverged(0.0001)){
					deletePopulation(i);
					i--;
				}
			}
		}		

		if(Global::msp_global->m_totalNumIndis<m_initialSize*m_diversityDegree){
			initialize();
			if(ifTerminating()) break;
			createSubswarms();
		}

	}
	return Return_Terminate;
}
Пример #2
0
ReturnFlag CPSOH::run_()
{
	ReturnFlag rf=Return_Normal;

	#ifdef OFEC_CONSOLE
	if(Global::msp_global->m_runId==0){
		mSingleObj::getSingleObj()->setProgrOutputFlag(true);
		if(mMultiModal::getPopInfor())
		mMultiModal::getPopInfor()->setOutProgFlag(true);
	}
	#endif // OFEC_CONSOLE

	while(!ifTerminating())
	{
		//cout<<"Run: "<<Global::msp_global->m_runId<<" "<<Global::msp_global->mp_problem->getEvaluations()<<endl;
		rf=evolve();

		#ifdef OFEC_CONSOLE
		if(mMultiModal::getPopInfor()){
			int peaksf;		
			peaksf=CAST_PROBLEM_CONT->getGOpt().getNumGOptFound();
			mMultiModal::getPopInfor()->input(Global::msp_global.get(), Global::msp_global->mp_problem->getEvaluations(),\
				Global::msp_global->m_totalNumIndis,1,peaksf,\
				CAST_PROBLEM_CONT->getGOpt().getNumOpt(),0,0,0,0,\
				0,0,CAST_PROBLEM_CONT->getGOpt().isAllFound());
		}
		#endif

		if(rf==Return_Terminate) return rf;
	}
	return rf;
}
Пример #3
0
ReturnFlag ACS::run_()
{
	int i, j, dim;
	initializeSystem();
	dim = m_pop[0]->getNumDim();
	m_iter = 0;

	if (m_stopCriterion == MIN_COVER){
		dynamic_cast<TermMean*>(m_term.get())->initialize(DBL_MAX);
	}

	while (!ifTerminating())
	{
#ifdef OFEC_DEMON
		for (i = 0; i<this->getPopSize(); i++)
			updateBestArchive(this->m_pop[i]->self());
		vector<Algorithm*> vp;
		vp.push_back(this);
		msp_buffer->updateBuffer_(&vp);
#endif
		for (i = 0; i < m_popsize; i++)
		{
			for (j = 1; j < dim; j++)
			{
				double q = Global::msp_global->mp_uniformAlg->Next();
				if (q <= m_Q)
					m_pop[i]->selectNextCity_Greedy(mvv_phero, m_beta);
				else
					m_pop[i]->selectNextCity_Pro(mvv_phero, m_beta);
				local_updatePheromeno(i);
			}
			local_updatePheromeno(i, true);
		}
		global_updatePheromeno();
		resetAntsInfo();
		++m_iter;
		if (m_stopCriterion == MIN_COVER) {
			dynamic_cast<TermMean*>(m_term.get())->countSucIter(mean());
		}
		//cout<<" "<<Global::msp_global->mp_problem->getBestSolutionSoFar().getObjDistance(CAST_TSP->getGOpt()[0].data().m_obj)<<" "<<m_stopCount<<endl;
#ifdef OFEC_CONSOLE
		double tempdif = 0;
		for (int i = 0; i < m_popsize; i++)
			tempdif += m_pop[i]->self().getDistance(Solution<CodeVInt>::getBestSolutionSoFar());
		tempdif /= m_popsize;
		double impr = static_cast<double>(m_impRadio) / m_popsize;
		OptimalEdgeInfo::getOptimalEdgeInfo()->recordiffAndImp(Global::msp_global->m_runId, Global::msp_global->mp_problem->getEvaluations(), fabs(tempdif), impr);
#endif
	}
#ifdef OFEC_CONSOLE
	vector<int> bestIdx = findBest();
	OptimalEdgeInfo::getOptimalEdgeInfo()->recordEdgeInfo<Ant>(Global::msp_global.get(), Solution<CodeVInt>::getBestSolutionSoFar(), m_pop, m_num, m_popsize, m_saveFre, false);

	OptimalEdgeInfo::getOptimalEdgeInfo()->recordLastInfo(Global::msp_global->m_runId, Global::msp_global->mp_problem->getEvaluations());
#endif
	return Return_Terminate;
}
Пример #4
0
ReturnFlag NFishSwarm::run_(){
	ReturnFlag rf=Return_Normal;
	Global::msp_global->mp_problem->setValidateMode(VALIDATION_SETTOBOUND);
	while(!ifTerminating()){
		g_mutexStream.lock();
	//	cout<<Global::msp_global->m_runId<<" "<<Global::msp_global->mp_problem->getEvaluations()<<" "<<m_best[0]->obj(0)<<endl;
		g_mutexStream.unlock();
		#ifdef OFEC_DEMON
			vector<Algorithm*> vp;	
			vp.push_back(this);	
			msp_buffer->updateBuffer_(&vp);
		#endif
        rf=evolve();
    }
	 
     return rf;
}
Пример #5
0
ReturnFlag LinkageDE_::run_() {
	ReturnFlag rf = Return_Normal;

#ifdef OFEC_CONSOLE
	if (Global::msp_global->m_runId == 0) {
		mSingleObj::getSingleObj()->setProgrOutputFlag(true);
		if (mMultiModal::getPopInfor())
			mMultiModal::getPopInfor()->setOutProgFlag(true);
	}
#endif // OFEC_CONSOLE

	initilizeMemory();
	initilizeCurPop();

	while (!ifTerminating()) {
		/*g_mutexStream.lock();
		cout<<Global::msp_global->m_runId<<" "<<Global::msp_global->mp_problem->getEvaluations()<<" "<<m_best[0]->obj(0)<<endl;
		g_mutexStream.unlock();*/
		rf = this->evolve();
#ifdef OFEC_DEMON
		vector<Algorithm*> vp;
		vp.push_back(this);
		msp_buffer->updateBuffer_(&vp);
#endif
		if (rf != Return_Normal) handleReturnFlag(rf);

		updateMemory();

#ifdef OFEC_CONSOLE
		if (mMultiModal::getPopInfor()) {
			int peaksf;
			peaksf = CAST_PROBLEM_CONT->getGOpt().getNumGOptFound();
			mMultiModal::getPopInfor()->input(Global::msp_global.get(), Global::msp_global->mp_problem->getEvaluations(), \
				Global::msp_global->m_totalNumIndis, 1, peaksf, \
				CAST_PROBLEM_CONT->getGOpt().getNumOpt(), 0, 0, 0, 0, \
				0, 0, CAST_PROBLEM_CONT->getGOpt().isAllFound());
		}
#endif

		if (rf == Return_Terminate) break;
	}

	return rf;
}
Пример #6
0
ReturnFlag CRDEPopulation::run_()
{
	#ifdef OFEC_CONSOLE
	if(Global::msp_global->m_runId==0){
		mSingleObj::getSingleObj()->setProgrOutputFlag(true);
		if(mMultiModal::getPopInfor())
		mMultiModal::getPopInfor()->setOutProgFlag(true);
	}
	#endif // OFEC_CONSOLE

	ReturnFlag rf=Return_Normal;
	while(!ifTerminating())
	{
	//	cout<<Global::msp_global->mp_problem->getEvaluations()<<endl;

		#ifdef OFEC_DEMON
			vector<Algorithm*> vp;	
			vp.push_back(this);	
			msp_buffer->updateBuffer_(&vp);
		#endif

		rf=evolve();

		#ifdef OFEC_CONSOLE
		if(mMultiModal::getPopInfor()){
			int peaksf;		
			peaksf=CAST_PROBLEM_CONT->getGOpt().getNumGOptFound();
			mMultiModal::getPopInfor()->input(Global::msp_global.get(), Global::msp_global->mp_problem->getEvaluations(),\
				Global::msp_global->m_totalNumIndis,1,peaksf,\
				CAST_PROBLEM_CONT->getGOpt().getNumOpt(),0,0,0,0,\
				0,0,CAST_PROBLEM_CONT->getGOpt().isAllFound());
		}
		#endif

		if(rf==Return_Terminate) break;
	}

	return rf;
}
Пример #7
0
ReturnFlag CMAES::run_(){
#ifdef OFEC_CONSOLE
	if (Global::msp_global->m_runId == 0) {
		mSingleObj::getSingleObj()->setProgrOutputFlag(true);
		if (mMultiModal::getPopInfor())
			mMultiModal::getPopInfor()->setOutProgFlag(true);
	}
#endif // OFEC_CONSOLE

	cmaes_t evo; /* an CMA-ES type struct or "object" */
	double *arFunvals, *const*pop, *xfinal;
	int i;
	
	int numDim = Global::msp_global->mp_problem->getNumDim();

	/* Initialize everything into the struct evo, 0 means default */
	arFunvals = cmaes_init(&evo, numDim, NULL, NULL, 0, m_pop.size(), initialsFilePathName.c_str());//"cmaes_initials.par"
	//printf("%s\n", cmaes_SayHello(&evo));
	cmaes_ReadSignals(&evo, signalsFilePathName.c_str());  /* "cmaes_signals.par"write header and initial values */

												   /* Iterate until stop criterion holds */
	while (!ifTerminating())/*!cmaes_TestForTermination(&evo)*/
	{
		/* generate lambda new search points, sample population */
		pop = cmaes_SamplePopulation(&evo); /* do not change content of pop */
		for (i = 0; i < cmaes_Get(&evo, "lambda"); ++i) {
			copy(pop[i], m_pop[i].data());
		}

		for (i = 0; i < cmaes_Get(&evo, "popsize"); ++i) {
			/* You may resample the solution i until it lies within the
			feasible domain here, e.g. until it satisfies given
			box constraints (variable boundaries). The function
			is_feasible() needs to be user-defined.
			Assumptions: the feasible domain is convex, the optimum
			is not on (or very close to) the domain boundary,
			initialX is feasible (or in case typicalX +- 2*initialStandardDeviations
			is feasible) and initialStandardDeviations is (are)
			sufficiently small to prevent quasi-infinite looping.
			*/
			while (!Global::msp_global->mp_problem->isValid(m_pop[i].data())) {
				cmaes_ReSampleSingle(&evo, i);
				copy(pop[i], m_pop[i].data());
			}		
		}
											
		/* evaluate the new search points using fitfun */
		for (i = 0; i < cmaes_Get(&evo, "lambda"); ++i) {
			arFunvals[i] = fitCompute(m_pop[i]);
		}

		/* update the search distribution used for cmaes_SamplePopulation() */
		cmaes_UpdateDistribution(&evo, arFunvals);

		/* read instructions for printing output or changing termination conditions */
		cmaes_ReadSignals(&evo, signalsFilePathName.c_str());//"cmaes_signals.par"
		fflush(stdout); /* useful in MinGW */

#ifdef OFEC_CONSOLE
		if (mMultiModal::getPopInfor()) {
			int peaksf;
			peaksf = CAST_PROBLEM_CONT->getGOpt().getNumGOptFound();
			mMultiModal::getPopInfor()->input(Global::msp_global.get(), Global::msp_global->mp_problem->getEvaluations(), \
				Global::msp_global->m_totalNumIndis, 1, peaksf, \
				CAST_PROBLEM_CONT->getGOpt().getNumOpt(), 0, 0, 0, 0, \
				0, 0, CAST_PROBLEM_CONT->getGOpt().isAllFound());
		}
#endif
		//cout << cmaes_Get(&evo, "fbestever") <<" "<<Global::msp_global->mp_problem->getEvaluations()<< endl;
	}
	//printf("Stop:\n%s\n", cmaes_TestForTermination(&evo)); /* print termination reason */
	//cmaes_WriteToFile(&evo, "all", "allcmaes.dat");         /* write final results */

															/* get best estimator for the optimum, xmean */
	xfinal = cmaes_GetNew(&evo, "xmean"); /* "xbestever" might be used as well */
	cmaes_exit(&evo); /* release memory */

					  /* do something with final solution and finally release memory */
	free(xfinal);

    return Return_Terminate;
}
Пример #8
0
ReturnFlag GSTM::run_()
{
	GAPopulation<CodeVInt, GAIndividual<CodeVInt>> subPopul(m_popsize);
	GAIndividual<CodeVInt> ia, ib;
	int i, n;
	double p;
	int flag, flag1;
	double bestlen = DBL_MAX;
	vector<int> arr(m_numDim);

	dynamic_cast<TermMean*>(m_term.get())->initialize(mean());
	while (!ifTerminating())
	{

		/*if(Global::msp_global->mp_problem->getEvaluations()/m_saveFre<m_num){
		mean<<diffEdges()<<" "<<Global::msp_global->mp_problem->getEvaluations()<<endl;
		}*/

#ifdef OFEC_DEMON
		for (i = 0; i<this->getPopSize(); i++)
			updateBestArchive(this->m_pop[i]->self());
		vector<Algorithm*> vp;
		vp.push_back(this);
		msp_buffer->updateBuffer_(&vp);
#endif
		//cout<<Global::msp_global->mp_problem->getEvaluations()<<endl;

		n = 0;
		while (n<m_popsize)
		{
			flag = 0;
			flag1 = 0;
			selection(ia, ib);
			p = Global::msp_global->mp_uniformAlg->Next();
			if (p <= m_PC)
			{
				*subPopul.getPop()[n++] = crossover(ia, ib);
				flag = 1;
			}
			if (flag == 0)
			{
				if (n<m_popsize - 1)
				{
					*subPopul.getPop()[n++] = ia;
					*subPopul.getPop()[n++] = ib;
				}
				else
				{
					*subPopul.getPop()[n++] = ia;
					flag1 = 1;
				}
			}
			p = Global::msp_global->mp_uniformAlg->Next();
			if (p <= m_PM)
			{
				if (flag == 1 || flag1 == 1) mutation(*subPopul.getPop()[n - 1]);
				else
				{
					mutation(*subPopul.getPop()[n - 2]);
					mutation(*subPopul.getPop()[n - 1]);
				}
			}
		}
		for (i = 0; i<m_popsize; i++)
			subPopul.getPop()[i]->evaluate();
		*(static_cast<GAPopulation<CodeVInt, GAIndividual<CodeVInt>>*>(this)) = subPopul;

#ifdef OFEC_CONSOLE
		OptimalEdgeInfo::getOptimalEdgeInfo()->recordEdgeInfo<GAIndividual<CodeVInt>>(Global::msp_global.get(), Solution<CodeVInt>::getBestSolutionSoFar(), m_pop, m_num, m_popsize, m_saveFre);
#endif
		m_iter++;
	}

#ifdef OFEC_CONSOLE
	OptimalEdgeInfo::getOptimalEdgeInfo()->recordEdgeInfo<GAIndividual<CodeVInt>>(Global::msp_global.get(), Solution<CodeVInt>::getBestSolutionSoFar(), m_pop, m_num, m_popsize, m_saveFre, false);
	OptimalEdgeInfo::getOptimalEdgeInfo()->recordLastInfo(Global::msp_global->m_runId, Global::msp_global->mp_problem->getEvaluations());
#endif
	return Return_Terminate;
}