1.算法基本思想
是一种基于差分变异模式的进化算法,在每一代的算法迭代过程中,对于当前群体的每一个个体,首先选择两个互不相同的个体,相减计算差分向量,差分向量乘以一个缩放因子F,再随机选择第三个个体相加等到变异个体,变异个体经过与目标个体的交叉和选择操作生成一个新的进入下一代。
2.算法流程图
图1 DE算法
3.算法参数
公式一:{Xi ┤| i=1,2 ,⋯N} Xi表示种群中的每一个个体,群体规模为N (一般表示成N个D维向量)
公式二:Xi=(Xi(1),Xi(2),Xi(3),⋯Xi(D) ) Xi是实数向量,D是目标问题的决策变量个数
公式三:Vi=Xr1+F×(Xr2-Xr3) Xr1,Xr2,Xr3是当前群体中的三个随机个体。
F是缩放因子(变异算子)0<F<=2; 通常取值0.5,可采用随机法生成
公式四:Ui(j)={█(Vi(j),&R(0,1)≤Pcr or j=jrand;@Xi(j),others)┤ 公式中Rj(0,1)是(0,1)均匀随机数生成器 ; jrand是[1,D]的随机整数 p_cR∈[0,1]代表交叉概率,一般为0.9
公式五:X_i^、= {█(Ui,if f(Ui)≤(Xi);@Xi ,others)┤ f()是目标函数;X_i^、是替代Xi的个体
4.算法实现步骤
- 群体初始化,DE算法中一般表示为N个D维度的向量,D就是目标问题的决策变量个数,也就是问题的维数。初始化是在搜索空间内随机均匀生成N个D维向量构成的初始种群
- 变异操作,是一个生成新个体的过程。随机选择三个互不相同的个体进行变异操作生成新的个体,缩放因子F为负值时代表个体交换了位置,不影响算法功能,而且变异公式有好多种,文档里面的是最经典常用有效的方式之一
- 交叉操作,交叉操作就是生成一个新的种群的过程。从目标个体和变异个体中选择出一个新的种群,均匀随机数保证个体不是全部来自目标个体。交叉概率控制那些决策变量采用变异值。
- 选择操作,对变异得到的新种群中的每一个个体进行贪心选择,得到一个新的种群,进入下一次的算法迭代过程。
5.算法参数优化思想
- 基于经验的参数控制
一般初始F=0.5 ,如果过早成熟收敛阔以增大变异因子(增大搜索步长)
太小容易陷入局部最优,太大则算法难以收敛(一般为大于1)
交叉概率P_CR一般设置为0.1 ,大的概率会增加算法的收敛速度,所以0.8有阔以。(过大会导致算法早熟) - 基于随机化的参数适应策略
由于不同的解空间分布会对于不同的需求,甚至同一问题不同进化阶段对解空间需求也不一样,参数固定会影响DE算法的使用范围和价值。主要通过生成-测试的模式让算法自己选取比较合适的参数值
常用的概率分布模型有均匀分布、高斯分布(正态分布)、柯西分布等
对于均匀分布,一般限定随机范围为[0.4 ,1];高斯分布中一般F设置为均值为0,方差为1的分布
无论高斯还是均匀分布,搜索步长的广度都是有限的,当算法靠近多极值问题的局部最优点时,可能无法提供足够大的步长进行跳跃式搜索,陷入局部最优。可以使用柯西分布进行,同时兼顾大小步长。 - 基于统计学习的参数随机化适应策略
这里不再展开描述
6.参数自适应策略
基于统计学习的参数适应和随机化参数适应都只是适应策略,自适应策略一般是将算法参数放入个体编码中与决策变量一同进化。