ReturnFlag CPSOSubSwarm::evolve(){ if(this->m_popsize<1) return Return_Normal; Solution<CodeVReal> t; ReturnFlag r_flag=Return_Normal; for(int i=0;i<this->m_popsize;i++){ t=this->m_pop[i]->self(); bool flag=false; r_flag=this->m_pop[i]->moveBound(this->m_pop[i]->m_pbest,this->getNearestBest(this->m_pop[i]->self()),m_W,m_C1,m_C2);// if(this->m_pop[i]->self()>this->m_pop[i]->m_pbest){ this->m_pop[i]->m_pbest=this->m_pop[i]->self(); flag=this->updateBestArchive(this->m_pop[i]->self()); } if(r_flag!=Return_Normal) break; if(!flag&&this->m_pop[i]->self()>t){ r_flag=updateBest(i,1.0); } if(r_flag!=Return_Normal) { break;} } if(r_flag==Return_Normal){ this->m_evoNum++; double ratio=Global::msp_global->mp_problem->getEvaluations()%CAST_PROBLEM_DYN->getChangeFre()/static_cast<double>(CAST_PROBLEM_DYN->getChangeFre()); m_W=m_maxW-(m_maxW-m_minW)*ratio; } computeCenter(); updateCurRadius(true); return r_flag; }
ReturnFlag RASPSO11::evolve() { //lbest model with an adaptive random topology ReturnFlag rf = Return_Normal; if (m_popsize<1) return rf; vector<int> rindex(m_popsize); Global::msp_global->initializeRandomArray(rindex, m_popsize); //generate a permutation of particle index setNeibourhood(); m_noCurActive = 0; m_impr = 0; m_flag[0] = false; for (int i = 0; i<m_popsize; i++) { if (Global::msp_global->mp_uniformAlg->Next()>m_pop[rindex[i]]->fitness()) { m_pop[rindex[i]]->setActive(false); m_curActive[rindex[i]] = false; continue; } Solution<CodeVReal> *l = &neighborBest(rindex[i]); if (l != &m_pop[rindex[i]]->pbest()) rf = m_pop[rindex[i]]->move(m_W, m_C1, m_C2, l, true); else rf = m_pop[rindex[i]]->move(m_W, m_C1, m_C2, 0, true); if (m_pop[rindex[i]]->self()>(m_pop[rindex[i]]->pbest())) { m_pop[rindex[i]]->pbest() = m_pop[rindex[i]]->self(); m_pop[rindex[i]]->setImpr(true); if (updateBestArchive(m_pop[rindex[i]]->self())) { m_impr++; m_flag[0] = true; } }else m_pop[rindex[i]]->setImpr(false); m_pop[rindex[i]]->setActive(true); m_noCurActive++; m_curActive[rindex[i]] = true; handleReturnFlag(rf); HANDLE_RETURN_FLAG(rf) } updateInfor(); updateCurRadius(); m_iter++; m_preActive = m_curActive; m_noPreActive = m_noCurActive; return rf; }
ReturnFlag NFishSwarm::evolve(){ ReturnFlag rf=Return_Normal; //new prey behavior for(auto &fish:m_pop){ for(int i=0;i<m_tryNumber;++i){ rf=fish->prey(m_visual); if(rf!=Return_Normal) return rf; updateBestArchive(fish->self()); } } //new follow behavior for(auto &fish:m_pop){ rf=fish->follow(*m_best[0],m_visual); if(rf!=Return_Normal) return rf; updateBestArchive(fish->self()); } //new swarm behevior computeCenter(); findBest(); for(auto &fish:m_pop){ if(m_center>fish->self()){ if(fish->m_index!=m_bestIdx[0]){ rf=fish->swarm(m_center,m_visual); if(rf!=Return_Normal) return rf; }else{ fish->self()=m_center; } updateBestArchive(fish->self()); } } updateVisual(); updateCurRadius(); m_iter++; return rf; }
ReturnFlag SPSO11::evolve(){ //lbest model with an adaptive random topology ReturnFlag rf=Return_Normal; if(m_popsize<1) return rf; vector<int> rindex(m_popsize); Global::msp_global->initializeRandomArray(rindex,m_popsize); //generate a permutation of particle index setNeibourhood(); m_impr=0; for(int i=0;i<m_popsize;i++){ Solution<CodeVReal> *l = &neighborBest(rindex[i]); if (l != &m_pop[rindex[i]]->m_pbest) rf = m_pop[rindex[i]]->move(m_W, m_C1, m_C2, l, true); else rf = m_pop[rindex[i]]->move(m_W, m_C1, m_C2, 0, true); if(m_pop[rindex[i]]->self()>(m_pop[rindex[i]]->m_pbest)){ m_pop[rindex[i]]->m_pbest=m_pop[rindex[i]]->self(); if(updateBestArchive(m_pop[rindex[i]]->self())){ m_impr++; } } handleReturnFlag(rf); HANDLE_RETURN_FLAG(rf) } updateCurRadius(); m_iter++; return rf; }