离散的差分进化Discrete DE
一般的差分算法的变异规则:
Xmutation=Xr1+F(Xr2-Xr3),F为缩放因子,
离散差分进化DDE的变异规则:设每个解为K个元素的集合,则
Xr2-Xr3:求出Xr2与Xr3有m个共同元素,则Xr2-Xr3表示Xr2中减去m个相同的元素,剩下的K-m个独有元素e1,e2,...eK-m(若K-m==0,则随机产生一个新的Xr3替换掉原有的Xr3,再执行上述过程)。
Xr1+F(Xr2-Xr3):F为缩放因子,F=0.5+random(0.5到1.5之间的随机数),则Xr1+F(Xr2-Xr3)表示,
要在Xr1中随机找出N=F*(K-m)个元素进行替换,新的元素来自(e1,e2,...eK-m)。
若N<=K-m,替换N个
若K-m<N<K,替换N个,不足的元素从集合V随机挑选。
若N>K,则替换N=K个,即替换Xr1中K个位置的所有元素,元素为e1,e2,...eK-m和集合V中的随机元素。
替换之后的Xr1为Xmutation。
交叉规则:
if random<cr
Xselection=Xmutation
else
把X再次进行变异得到Xnew
Xselection=Xnew
这样做是因为,我把变异理解局部搜索,交叉部分必须能够产生新的个体,才能实现全局搜索。