📄 es.h
字号:
#pragma once
#include ".\individual.h"
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;
const double PI = 3.1415926;
const int pop = 40; // 种群大小
const int NGEN = 40; // 执行1/5成功法则的代数
class ES
{
public:
ES(void);
~ES(void);
void Init(); // 初始种群
void ReInit();
double myRand(); // 产生-5.12到5.12之间的随机小数,保留5位小数
double F(double x, double y, double z); // 适应度函数
void sort_fval(vector<Individual>::iterator begin, vector<Individual>::iterator end); // 种群中个体按适应度大小升序排列
double _random(void);//产生0~1随机小数
double N(double mu, double sigma); // 产生满足正态分布的随机数
void Mutation_twoPop(); // 变异算子,基于双种群
void Mutation_Gauss(); // 变异算子,基于高斯分布
void Mutation_Gauss_Cauchy(); // 变异算子,基于高斯分布和柯西分布
void Mutation_Cauchy(); // 变异算子,基于柯西分布
bool fit_x(double x);// 判断x是否满足要求
void Selection(); // 选择算子
void showPop(); // 输出种群的信息
void evolution(); // 进化过程
void fifthSuccessRule(); // 1/5成功法则
double cauchy(double a, double b); // 产生满足柯西分布的随机数
double RangeRand(); // 产生-10.24到10.24之间的随机小数
private:
vector<Individual> vecInd; // 个体向量集合
int g; // 当前代数
int Gen; // 最大的迭代代数
int popSize; // 种群大小
double epsilon;// 精度
int nSucMut; //成功变异的次数
double sigma; // 变异方差
double chSigma; // 变异方差的变化
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -