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