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; }
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; }
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; }
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; }
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; }
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; }
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; }
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; }