智能优化算法

您所在的位置:网站首页 差分算法流程图 智能优化算法

智能优化算法

2023-07-26 20:11| 来源: 网络整理| 查看: 265

差分演化算法(Differential Evolution )是曾经一度非常热门的算法,该算法简单易用,收敛速度快。这篇文章对其进行总结。

 

算法简介

所谓的演化算法是一种自适应,并行的全局优化算法,还包括遗传算法等。

差分演化算法与其他演化算法的最大区别在与差分变异算子的应用。

差分演化算法主要用于求解实数优化问题,一般不用于求解离散问题。

 

算法流程

算法流程图如下。

伪代码流程如下。

下面对每一个具体的阶段进行说明。

在初始化阶段,对于每个个体的每一维在其自变量范围内采用均匀随机初始化。

在变异阶段,采用差分变异算子,经典差分算子DE/rand/1的公式如下:

在交叉阶段,采用离散重组,常用的二项式杂交算子如下(就是让子个体和父个体交换某些维度的坐标值):

其中的v是变异之后的个体,此处的条件j==jrand是为了避免交叉后的子个体与父个体完全相同,交叉的效果如下图。

在选择阶段采用锦标赛一对一选择,就是父个体和自己的子个体比较,谁优秀谁留下。

 

实例代码

随手撸的简易版差分演化代码,目标函数为f=x^2+y^2。对于每个个体都要进行变异操作,所以不设置变异率这个常量。

#include #include #include using namespace std; const int SIZE = 10; //种群规模 const int DIMENSION = 2; //目标函数维数 const double F = 0.6; //缩放因子 const double CROSSOVER_RATE = 0.2; //交叉率 const int ITER_NUM = 30; //进化20代 const vector LOWER_BOUND = { -100,-100 }; //每一个维度的上限 const vector UPPER_BOUND = { 100,100 }; //每一个维度的下限 struct Single{ //个体结构 vectorm_xreal; //n维坐标 double m_fitness; //适应度 Single(){ //构造函数 m_xreal = vector(DIMENSION, 0); //初始化坐标 m_fitness = 0; //初始化适应度 } }; vectorparentpop(SIZE); //父种群 vectorchildpop(SIZE); //子种群 double RandReal(int left, int right); //得到一个随机实数 double RandInt(int left, int right); //得到一个随机整数 void Print(); //打印群体情况 void InitPop(); //初始化群体 double CalculateFitness(vectorrealx); //计算适应度 void ParentSelection(vector&index); //选择三个不相同的父亲个体 void Mutation(vector&index,int i); //变异操作 void BinCrossover(int i); //交叉操作 void Selection(int i); //根据一对一锦标赛选择个体 int main() { srand((unsigned)time(NULL)); //随机数种子 InitPop(); Print(); cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3