⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 selectio.h

📁 改算法基于遗传算法
💻 H
字号:
//                          Time-stamp: <2007-07-12 11:55:58 handa>// studied  by T.Noda        99/08/05  Ver.0.1// modified by H.Handa       99/08/16  Ver.0.4// gcc ___.cc -lstdc++#ifndef SELECTIO_H#define SELECTIO_H#include "chromoso.h"#include <vector>#include <list>using namespace std;template <class T> class selection {protected:  random_number& rn;public:  selection(random_number& r): rn(r) { }    virtual void mating(list<chromosome<T> *>& pop,		      vector<chromosome<T> *>& pool,		      int flag)    {      int i,j;       list<chromoIntP>::iterator il;      double sum_fit=0.0;      double bias = 0.0;      for(il = pop.begin() ;il != pop.end();il++) {	sum_fit += (*il)->fitness(0);	bias = (bias > (*il)->fitness(0)) ? (*il)->fitness(0) : bias;      }      sum_fit -= bias*pop.size();      for(i = 0 ;i < pool.size();i++) {	double dtmp = rn.urand(sum_fit);	for(il = pop.begin() ;il != pop.end();il++) {	  dtmp -= (*il)->fitness(0) - bias;	  if(dtmp <= 0.0) break;	}  	if ( il == pop.end()) {	  cerr << "error may be occured in  population::" <<	    "roulette_preselect()" << endl;	  j = pop.size() -1;	}	pool[i] = (*il);	pool[i]->setFlag(flag);      }    }  // this class indicate roulette wheel selection, which implies  // that our fitness is uni-objective and maxmize one.  virtual void postprocessing(list<chromosome<T> *>& pool,			      list<chromosome<T> *>& pop, int flag)    {      list<chromoIntP>::iterator il;      int flag2 = 1-flag;      for(il = pop.begin(); il != pop.end(); il++) {	while ((*il)->isFlag() == flag2) {	  il = pop.erase(il);	}      }      for(il = pool.begin(); il != pool.end();il++) {	(*il)->setFlag(flag);	(*il)->fitness() = (*il)->objfunc();	pop.push_front(*il);      }  }  virtual selection<T>& operator=(const selection<T>& arg) {    if(this == &arg) return *this;    rn = arg.rn;     // random  }};#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -