遗传算法——听上去颇为神秘有趣,那么遗传算法究竟是什么呢?应该如何用代码实现这一算法呢?
遗传算法理论简介
基本概念
- 基因:组成染色体的单元,可以表示为一个二进制位,一个整数或一个字符等。
- 染色体:表示待求解问题的一个可能解,由若干基因组成,是 GA 操作的基本对象。
- 个体:在本节中个体等同于染色体,从基因角度而言称为染色体,从适应度函数角度称为个体。
- 群体:一定数量的染色体组成了群体,表示 GA 的遗传搜索空间。
- 适应度:代表一个染色体所对应解的优劣,通常由某一适应度函数表示。
基本操作:
- 选择:根据个体的适应度,在群体中按照一定的概率选择可以作为父本的个体,选择依据是适应度大的个体被选中的概率高。选择操作体现了适者生存、优胜劣汰的进化规则。
- 交叉:将父本染色体的基因按照一定概率随机地交换,形成新的染色体。
- 变异:按一定的概率改变染色体内的某个基因值。
主要处理步骤:
- 对优化问题的解进行编码,即用染色体表示优化问题的可能解,组成染色体的元素称为基因。
- 适应度函数的构造和应用——因优化问题的目标函数而定。
- 以各染色体所对应的适应度函数值的大小决定哪些染色体适应生存,哪些被淘汰。
- 生存下来的染色体组成种群,形成一个可以繁衍下一代的群体。双亲遗传的结合通过编码之间的交叉 crossover 实现下一代的产生。新的染色体产生时,以一定概率发生基因变异,变异使解有更大的遍历性,防止过早收敛于局部极小值。