首先用最简单的例子来介绍遗传算法
例:用遗传算法求y = x在[-1, 1]上的最小值。
- 步骤一:选择二进制编码,及将
[-1, 1]上的数向[0000000000 1111111111]映射,例将-1映射为0000000000,1映射为1111111111。 - 步骤二:初始化种群。随意生成50个10位二进制数作为初始种群。
- 步骤三:适应度计算。由于我们要求最小值,所以我们将适应度函数设为
F = 1 / y。,然后计算初始种群的个体适应度。 - 步骤四:选择操作。常见的选择算子有轮盘赌法,即基于适应度比例的选择策略,个体
i被选中的概率为 - 步骤五:交叉操作。交叉操作是指从种群中随机选择两个个体,通过两个个体的交换组合得到新的个体,例两个个体为
1010101010和0101010101,交换其后两位得到1010101001和0101010110。 - 步骤六:变异操作。变异操作主要目的是维持种群多样性。例:将
1010101010变异成1010101011。 - 重复步骤三到六,迭代500次,最后种群中的适应度最高的个体即为得到的最优解。
遗传算法的不足
- 全局搜索能力极强而局部寻优能力较差。研究发现,遗传算法可以用几极快的速度达到最优解的90%左右,但要达到真正的最优解则需要花费很长的时间。
- 易出现早熟收敛现象。当种群规模较小,如果在进化初期出现适应度较高的个体,由于个别优势个体繁殖过快,往往会破坏群体的多样性,从而出现早熟收敛现象。
遗传算法的改进
- 为改善遗传算法的局部搜索能力,在变异操作后加上进化逆转操作。例随机变换一个个体中的两个部分交换,如果这种操作使得适应度增强,则保留,否则不变。
- 使用精英策略,子代种群中的最优个体永远不会比父代的个体差。父代中的精英会原封不动地直接传给子代,而不经过交叉或变异操作。
- 多种群遗传算法,多个种群同时进化,然后加入移民算子,将个体在种群之间交换。
- 量子遗传算法,每一个二进制位有两个纠缠的量子表示,只有当测量的时候才知道其真实值。然后用量子旋转操作代替选择、交叉和变异操作。