这个就当是自己学习的整理总结吧。
一、差分进化算法理论
差分进化算法是基于群体智能理论的优化算法,通过群体内个体间的合作与竞争而产生的智能优化搜索算法。
1.1 差分进化特点
(1)结构简单,容易使用。主要通过差分变异算子来进行遗传操作。
(2)性能优越。具有较好的可靠性,鲁棒性,高效性。
(3)自适应性。差分变异算子可以是一个常数,也可以是一个具有变异步长和搜索方向的自适应能力。
(4)具有内在并行性,可协同搜索。在同一要求下,差分进化算法拥有更快的收敛速度。
1.2 差分进化算法操作
(1)初始化
差分进化算法利用NP个维数为D的实数值参数向量,作为每一代的种群。一般初始化种群符合均匀概率分布。
(2)变异
基本变异向量由下式产生
要求r1,r2,r3,i互不相同,所以NP必须大于4,F是变异算子通常在0-2之间,它控制偏差向量的放大作用。
通俗的理解就是把两个向量的差值乘上变异算子加给第三个向量作为新的变异向量。
(3)交叉
为了增加干扰向量的多样性,引入交叉操作。
randb(j)表示产生[0,1]之间随机数第j个估计值,rnbr表示一个随机选择的序列。CR是交叉算子。
通俗理解就是如果随机产生的randb(j)小于CR或者j=r,那么就将变异后的种群放入选择群体中,如果不是就就将原来的种群放入选择种群中。
(4)选择
为了决定选择种群中的向量是否能成为下一代的一员,试验向量与当前的目标向量进行比较,如果出现目标函数被最小化,那么具有最小目标函数的向量将在下一代出现。试验向量只与一个个体进行比较,而不是所有个体。
(5)边界条件处理
一种方法是将超过边界的向量使用可行域中随机产生的参数向量代替。
例如:u(n,m)=rand*(Xs-Xx)+Xx;
另一种方法是,进行边界吸收处理,直接放栗子好理解
if u(n,m)<Xx
u(n,m)=Xx;
end
if u(n,m)>Xs
u(n,m)=Xs;
end
二、改进的差分进化算法
(1)自适应差分进化算法
主要是使用了自适应算子。在基本的差分进化算法中,变异算子经常取常数,比较难准确确定,变异率太大,全局最优解低,变异率小,群体多样性下降,易出现‘早熟’的现象。我们可以设计这样的变异算子:
这样开始的时候变异算子为2F0,在初期可以保持多样性,防止早熟。随着进展,变异算子降低最后变为F0,避免最优解遭到破坏。
还可以设计一个随机范围的交叉算子: