示例#1
0
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;
}
示例#2
0
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;
}
示例#3
0
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;
}
示例#4
0
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;
}