十进制编码的遗传算法与二进制编码的遗传算法有很多相似的地方,算法的流程图相同,选择算子也相同,最大的不同就是交叉算子和变异算子了。
本文只介绍十进制编码遗传算法的交叉算子和变异算子,以及一些小技巧,其余的请看我的二进制编码遗传算法。
一、交叉算子
1.中间重组交叉算子
d=0.25
alpha=uniform(-d, 1 + d)
child1 = parent1 + alpha * (parent2 - parent1) child2 = parent2 + alpha * (parent1 - parent2)
child1 和child2就是交叉后的子代个体了。仔细观察可以发现child1+child2=parent1 +parent2,这个规律在二进制交叉算子上也成立。
二、变异算子
1.步长变异
步长变异公式如下:
X' = X - 0.5 *L*d或者X' = X + 0.5 *L*d
X'就是变异后的染色体。
L为变量的取值范围 L = Upper - Lower, Upper问题解的上界,Lower为下界。
a(i)以1/m的概率取1,1-1/m的概率取0,m一般取20。
三、小技巧
1.混沌映射——Circle map
Circle map生成2000个点的散点图
从图中我们可以观察到,Circle map生成的点非常均匀,适合问题解的初始化。
Circle map公式如下:
Circle map公式
其中为一个在[0,1]区间内的一个随机值。