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

📄 genetic.h

📁 一个遗传算法C++类,值得收藏!
💻 H
字号:
// Genetic.h: interface for the CGenetic class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_GENETIC_H__72C36058_C073_487F_BD99_D8BD4A59EFF0__INCLUDED_)
#define AFX_GENETIC_H__72C36058_C073_487F_BD99_D8BD4A59EFF0__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include"definition.h"
typedef struct mychrom{
double chrom[MAXVARNO];
double fitness;//适应度
}CHROM;
#include "BpNet.h"
////////张纯禹 2001年   chunyu79@hotmail.com
class CGenetic  
{
public:
	bool IsStoped;
	double dblAngle;
	CHROM best;
	Mm mData,mResult;
	double dblDifference;//差异〉改值的染色体视为不同
	double dblCre;//适应度>改值的染色体符合条件
	int iBestNum;//符合条件的染色体数目
	CBpNet * bpnet;
	//double (* obj_fun)();
	double CalFitness(CHROM chrome);//计算适应度函数
	long gen;//当前进化代数
	void setscope(double scope[MAXVARNO][2],int iNo);//设置染色体取值范围
	double randxy(double x,double y);//产生x,y之间的随机数
	void statistic(CHROM pop[]);
	CHROM bestchrom[MAXBESTNUM];//最优染色体
	bool begin();//主函数
	void generation();//一次进化
	int rselect();//轮盘赌选择
	CHROM newpop[POPSIZE];//种群
	CHROM oldpop[POPSIZE];//种群
	double pmutation;//变异概率
	double pcross;//交叉概率
	long maxgen;//最大进化代数
	int iVarNo;//染色体数目
	double sumfitness;
	CGenetic();
	virtual ~CGenetic();

private:
	double angle(CHROM ch1,CHROM ch2);
	bool IsNew(CHROM ch);//判断是否为符合条件的新染色体
	double difference(CHROM ch1,CHROM ch2);//量个染色体之间的差异,用以区别

	bool identify(CHROM chrome);//验证是否为合法的染色体
	double varminmax[MAXVARNO][2];
	void init();//初始化,设置初始染色体
	void mutation(CHROM *chrome);//对新染色体进行变异
	bool flip(double possibility);//测试
	//交叉操作,iPlace指明新染色体位置
	void cross(CHROM chrom1,CHROM chrom2,int iPlace);
	bool IsSetScope;
	
};

#endif // !defined(AFX_GENETIC_H__72C36058_C073_487F_BD99_D8BD4A59EFF0__INCLUDED_)

⌨️ 快捷键说明

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