📄 ga.h
字号:
#ifndef _GA_H_
#define _GA_H_
#include "include.h"
struct SGenome
{
vector<double> vecWeights;//神经网络的编码(权值序列)
double dFitness;//基因的适应度
SGenome() : dFitness(0) {}//默认构造函数,一个不带参数的构造函数当然是默认构造函数,如果参数被提供了默认值,那么带参数的默认构造函数也是可能的
SGenome(vector<double> w, double f) : vecWeights(w),dFitness(f) {} //构造函数
friend bool operator<(const SGenome& lhs, const SGenome& rhs)
{
return lhs.dFitness<rhs.dFitness;
}
};
class CGA
{
private:
vector<SGenome> m_vecPop;//群体
int m_iPopSize;//群体
int m_iChromoLength;//染色体长度
double m_dTotalFitness;//总体适应度
double m_dBestFitness;//最好适应度
double m_dWorstFitness;//最差适应度
double m_dAverageFitness;//平均适应度
int m_iFittestGenome;//最适合基因
double m_dMutationRate;//变异率
double m_dCrossoverRate;//杂交率
int m_iGeneration;//代
void Mutate(vector<double> &chromo);//变异
void Crossover(const vector<double> &mum,const vector<double> &dad, vector<double> &baby1, vector<double> &baby2);//杂交
SGenome GetChromoRoulette();
void GrabNBest(int NBest, const int NumCopies, vector<SGenome> &vecPop);//精英选择
void CalculateBestWorstAvTot();//计算适应度
void Reset();
public:
CGA() {}
CGA(int popsize, double mutationrate, double crossoverrate, int numweights);
vector<SGenome> Epoch(vector<SGenome> &old_pop);
vector<SGenome> GetChromos() const {return m_vecPop;}
double AverageFitness() {return m_dTotalFitness/m_iPopSize;}
double BestFitness() {return m_dBestFitness;}
};
#endif;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -