区别就在于变异操作
1 差分进化引入的意义
遗传算法的变异操作,就是对个体的某个或某段基因进行随机变换,得到新的个体,也就是新的一组解。
它的目的是通过生成新的解,来试图找到更优的选择。
但是,直观上能想到的是,经过变异之后,新的那段基因,可能是和原先种群中所有的个体中,所对应的所有基因中,有重合的。这就意味着,这次变异是没有意义的变异,并没有产生新的解,还是和原来的有的解一样。
造成的后果也不难想到。当到了优化的后期,整个种群有可能陷入了局部最优。这时候,就需要让解能够跑出那个局部最优的圈圈中,而“无效”的变异,并不能达成目的。
因此,我们希望,变异操作后的解,是能够“与众不同”的,和当前的所有解区分开来,从而有可能碰上全局最优。
2 实现方法
核心公式如下:
ν i ( g + 1 ) = x r 1 ( g ) + F ⋅ ( x r 2 ( g ) − x r 3 ( g ) ) \nu_{i}(g+1)=x_{r 1}(g)+F \cdot\left(x_{r 2}(g)-x_{r 3}(g)\right) νi(g+1)=xr1(g)+F⋅(xr2(g)−xr3(g))
x r 1 , x r 2 , x r 3 . . . x r n 是 n 个 个 体 , F 是 缩 放 因 子 , v i 是 新 生 成 的 解 , g 表 示 第 几 代 x_{r1},x_{r2},x_{r3}...x_{rn} 是n个个体,F是缩放因子,v_i是新生成的解,g表示第几代 xr1,xr2,xr3...xrn是n个个体,F是缩放因子,vi是新生成的解,g表示第几代
可以直观看出,这个算法,通过将某两个现有个体的差,进行缩放后,再加到另一个个体中,从而达到变异的目的。
通过缩放,就能确保新的解,离原来的几个解都有一定的距离。保证其探索能力。
可能有同学会问,这个公式只涉及到三个个体,那如果新的个体跟这三个个体之外的其它个体,发生雷同呢,不是也就没有用了吗?
这个情况,在算法执行初,是有可能存在的。但是当算法执行到后期时,显然大部分的解都是较为接近的。因此通过这方法,产生的新个体,只要和这三个差异大,就基本是和全部个体差异都比较大。因此,是能达到预期效果的。