差分进化算法
2020-11-10 本文已影响0人
憨憨的小熊
简述
个人感觉差分进化算法,是对遗传算法的一种优化,他详细定制了变异,交叉的算法,他的改进方向,是取决于种群内其他的个体,而并非基于概率的随机生成。书中原话:差分进化算法是一种自组织最小化方法,用户只需很少的输入。它的关键思想与传统进化方法不同:传统方法是用预先确定的概率分布函数决定向量扰动;而差分进化算法的自组织程序利用种群中两个随机选择的不同向量来干扰一个现有向量,种群中的每一个向量都要进行干扰。差分进化算法利用一个向量种群,其中种群向量的随机扰动可独立进行,因此是并行的。如果新向量对应函数值的代价比它们的前辈代价小,它们将取代前辈向量。
基础理论
这里的基础理论同之前的遗传算法,这里不再描述,直接介绍不同于遗传算法的部分
基本差分算法
变异操作
对于每个目标向量基本差法进化算法的变异由下式产生:
其中ri(i = 1, 2, 3)是三个互不相同的数,F为变异算子,范围[0,2],负责控制偏差向量的放大作用
交叉操作
为了增加干扰参数向量的多样性,引入交叉操作,则试验向量变为:
交叉操作
其中RC表示交叉算子,rnbr是为了保证u中至少有一个v中的个体。
选择操作
依据贪婪准则,在x和u中选择组合成下一代的种群
next_gen = []
for i in length(x):
if fit_x[i] > fit_z[i]: ##这里的大于号只是表示更优,而并非数学意义上的大于
next_gen[i] = x[i]
else:
next_gen[i] = u[i]
差分的其他形式
QQ截图20201110125434.png自适应差分算法
主要针对变异算子F的一个计算过程,在每一次迭代的过程中使F都能针对当前的情况来调整数值,书中给了一个算法是
其中Gm为最大迭代次数,G为当前迭代次数,这样当G=1时,F = 2F0,这样对于变异有较大的帮助,而当G趋近于Gm时,F会趋近于F0,这对结果的收敛有帮助
差分算法的流程
- 确定差分进化算法的控制参数和所要采取的具体策略。
- 随机产生初始种群,进化代数g=1
- 对种群进行评价,即计算初始种群中每个个体的目标函数数值
- 判断是否达到终止条件或者最大进化代数:若是,进化中止;否则,进行下一步操作
- 进行变异和交叉,对边界条件处理,得到临时种群
- 对临时种群评价,计算临时种群的目标函数值。
- 跟据贪心法则选择出新一代的种群
- g = g+1,转到4