📄 genetic.h
字号:
#pragma once
#define MAX_LENGTH 8 //染色体的最大长度,变量的个数;
#define POPULATION_SIZE 50 //最大的种群数;
#define LARGE_SCALE true
#define SMALL_SCALE false
//***********************************************************
// 一个简单的遗传算法求解函数极值的例子:可以优化任意多个变量,通过设定MAX_LENGTH长度即可。
//
// --李志强 2005.3 于国防大学模拟中心
//
// LL741106@sohu.com
//***********************************************************
struct Individual //个体采用十进制编码;
{
double DNA[MAX_LENGTH]; // DNA:染色体
double Fitness; // 适应度
};
class Genetic
{
//**************************变量:
private:
double Pmutation; //变异概率
double Pcross; //交叉概率
double VarMinMax[MAX_LENGTH][2]; //变量的取值范围
public:
Individual Population[ POPULATION_SIZE ]; //当前种群
Individual BestIndividual; //最佳个体;
double SumFitness ; //种群的适应度总和
double AverageFitness; //种群的平均适应度;
//******************************函数:
private:
bool test(double possibility); //测试概率;
double CalFitness(Individual *pIndividual); //计算某个体的适应度;
int select(void); //轮盘选择;
double randxy(double x, double y); //产生X,Y之间的随机数;
void mutation(Individual *pIndividual,bool Scale); //对某个个体进行变异操作;
void cross(Individual *pParent1,Individual *pParent2,Individual *pChild1,Individual *pChild2);
//对两个个体进行交叉操作;
public:
Genetic(void);
~Genetic(void);
void SetMutation(double mutation); //设置变异概率;
void SetCross(double cross); //设置交叉概率
double setvarscope(double scope[][2]); //设置要编码变量的取值范围;
void init(void); //初始化种群;
void statistic(Individual *pIndividual); //进行个体的统计;
void RunGeneration(); //主函数:进行一次进化计算;
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -