一、简介
演化算法一样,DE是一种模拟生物进化的随机模型,通过反复迭代,使得那些适应环境的个体被保存了下来。但相比于进化算法,DE保留了基于种群的全局搜索策略,采用实数编码、基于差分的简单变异操作和一对一的竞争生存策略,降低了遗传操作的复杂性。同时,DE特有的记忆能力使其可以动态跟踪当前的搜索情况,以调整其搜索策略,具有较强的全局收敛能力和鲁棒性,且不需要借助问题的特征信息,适于求解一些利用常规的数学规划方法所无法求解的复杂环境中的优化问题。目前,DE已经在许多领域得到了应用,譬如人工神经元网络、化工、电力、机械设计、机器人、信号处理、生物信息、经济学、现代农业、食品安全、环境保护和运筹学等。
DE 算法主要用于求解连续变量的全局优化问题,其主要工作步骤与其他进化算法基本一致,主要包括变异(Mutation)、交叉(Crossover)、选择(Selection)三种操作。算法的基本思想是从某一随机产生的初始群体开始,利用从种群中随机选取的两个个体的差向量作为第三个个体的随机变化源,将差向量加权后按照一定的规则与第三个个体求和而产生变异个体,该操作称为变异。然后,变异个体与某个预先决定的目标个体进行参数混合,生成试验个体,这一过程称之为 交叉。如果试验个体的适应度值优于目标个体的适应度值,则在下一代中试验个体取代目标个体,否则目标个体仍保存下来,该操作称为选择。在每一代的进化过程中,每一个体矢量作为目标个体一次,算法通过不断地迭代计算,保留优良个体,淘汰劣质个体,引导搜索过程向全局 最优解逼近[1]。
二、算法:
其中,J表示当前向量的维数中第j个,为了简单理解就好像一个染色体上有D个基因,j表示地J个基因。L和U分别表示第J个基因的上下界,也可以理解为范围。
1、初始化
其中,是第i个个体,可以简单的理解为一个人有NP个染色体,i表示第i个染色体。
其中,表示在区间上的随机数。
2、变异
算法通过差分策略实现个体变异,常见的差分策略是随机选取种群中两个不同的个体,将其向量差缩放后与待变异个体进行向量合成。
其中,,和是三个随机数,区间为,称为缩放因子,为一个确定的常数。表示第代。
3、交叉
其中,称为交叉概率。通过概率的方式随机生成新的个体。
4、选择
DE中采用的是贪婪选择的策略,即选择较优的个体作为新的个体。
伪代码[2]:
5.差分进化算法改进
还有一些改进的方法,形如DE/x/y/z,其中x表示是“随机的”还是“最优的”;y表示所利用向量的个数;z表示交叉程序的操作方法,上边叙述的操作方法可用“bin”表示。[3]
参数的选择
F∈[0,1]F∈[0,1]F∈(0,1)F∈(0,1)F∈[0.4,0.95]F∈[0.4,0.95]F∈[0.7,0.9]
三、实现过程
F(A,B)=sin(A)*cos(A*B)+A+B组成(这里的A,B是由弧度,其中pi/4<A<pi/2,-pi<B<pi),然后找出最小值。
代码:
clear all; clc; x=pi/4:0.01:pi/2; y=-pi:0.01:pi; [X,Y]=meshgrid(x,y); for k=1:length(x) F(k,:)=sin(x(k))*cos(x(k)+y)+x(k)+y; end surf(F); shading interp
图像:
运行结果:
最优变量
最优值
原来的随机曲面也收敛到平面:
代码地址:https://download.csdn.net/download/belence_zhao/10449427
参考文献:[1]https://baike.sogou.com/v71030748.htmfromTitle=%E5%B7%AE%E5%88%86%E8%BF%9B%E5%8C%96
[2]https://www.cnblogs.com/tsingke/p/5809453.html