📄 selectio.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 + -