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

📄 ga.h

📁 一个简单的改进的遗传算法
💻 H
字号:
// GA.h: interface for the CGA class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_GA_H__94BC81C0_0A98_4357_8F93_5A05417BF891__INCLUDED_)
#define AFX_GA_H__94BC81C0_0A98_4357_8F93_5A05417BF891__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
const int chromSizeMax=21;			//染色体字节数最大值
const int varibleSizeMax=18;		//变量最大值
const int popSizeMax=100;			//群的最大值

typedef struct						//个体
{
    unsigned chrom[chromSizeMax];   //染色体 
    double   fitness;				//个体适应度
    double   varible[varibleSizeMax];//个体对应的变量值
    int      xsite;					// 交叉位置
    int      parent[2];				//父个体
}INDIVIDUAL,*pINDIVIDUAL;

typedef struct						//最佳个体
{
    unsigned chrom[chromSizeMax];	//最佳个体染色体
    double   fitness[5];			//最佳个体适应度;
    double   varible[varibleSizeMax];//最佳个体对应的变量值
    int      generation;			//最佳个体生成代
    int      Ki;					//最佳个体生成计算次数
}BESTEVER,*pBESTEVER;
/* 随机数发生器使用的静态变量 */
static double oldrand[56];//oldrand[55]为种子,0--54为随机数
static int jrand;

///////////////
class CGA : public CObject  
{
public:
	DECLARE_SERIAL(CGA)
	CGA();
	virtual ~CGA();
public:
	double *Outfitness;
	double pcross,pmutation;		//交叉概率,变异概率 
	int popSize,lchrom,genMax,Kmax;       //种群大小,每个变量染色体长度,最大进化世代数,重复计算的次数
public:
	void CalculateGA(CDC *pDC,CString str1[]);
private:
	INDIVIDUAL temp;		      // 当前个体
	INDIVIDUAL oldpop[popSizeMax];//当前代种群
	INDIVIDUAL newpop[popSizeMax];//新一代种群
	BESTEVER bestfit;             // 最佳个体
	int varibleSize,chromsize;	  //对应变量数,存储一染色体所需字节数 
	int Ki,gen,KBestGen;   //计算最大次数,当前计算第Ki次,当前进化世代数
	int nmutation,ncross;		// 当前代变异发生次数 ,交叉发生次数
	double sumfitness,max,avg,min;	//当前种群中个体适应度累计,最大适应度,平均适应度,最小适应度
	int bestIndex[2],worseIndex[2];
private:
	int randLow_high(int low, int high);
	double randomperc();
	int  flip(double prob);
	void advance_random();
	void warmup_random();
	void randomize();
	void VCinitpop();
	void Dobjfunc(pINDIVIDUAL st);
	void VCstatistics(pINDIVIDUAL st);
	void generation();
	void prselect();
	int  select();
	int  crossover(unsigned int *parent1, unsigned int *parent2, unsigned int *child1, unsigned int *child2);
	void mutation(unsigned int *child);//变异操作
	void writechrom(unsigned *chrom,CString str[]);
	void resultStrOut(CDC *pDC,CString str[]);
	void BestWorseIndex(pINDIVIDUAL st,int index1[],int index2[]);
};

#endif // !defined(AFX_GA_H__94BC81C0_0A98_4357_8F93_5A05417BF891__INCLUDED_)

⌨️ 快捷键说明

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