遗传算法是现代启发式算法的一种。
现代启发式算法共同的特点是:从任意解出发,按照某种机制,以一定该概率在整个求解空间中探寻最优解,具有探寻全局最优的功能。
所有的现代启发式算法最终目的就是寻找全局最优。
遗传算法简介:改编自生物进化规律。在离散的情况下寻找求解空间内全局最优。它不存在求导和函数连续性的限定,具有并行求解的优势。
过程包括:编码,解码,交叉,变异,选择
遗传算法的特点:
1、群体搜索,这个初始设定的任意解是一个集合。
2、适应度函数不受连续、可微等条件约束,适用范围广。
3、它是穷举搜索的提升,根据一定的规则寻找。
(一)编码&解码
将求解空间映射成字符串,就是一个映射。主要有三种映射方法:01映射、真值映射、符号编码
1、01映射
将解空间划分最小区域,这个区域就是精度了。我们知道,遗传算法最大的特征就是离散了,如何将一个连续的区域映射成一群离散点呢。从连续到离散必然会有精度损失的,所以在编码之前要设置一个最小区域的精度,记为△。
记区域下界为0000000000000
上界为111111111111111
然后在下界的基础上每增加一个△,编码加一,这样就把连续的区域近似映射到了一个个离散的点上。
比如:
00000000…00000000=0 u_min
00000000…00000001=1 u_min+δ
00000000…00000010=2 u_min+2δ
……
11111111…11111111=2l–1 u_max
解码过程就是逆编码了,就是在下界加上精度的n倍。
2、真值映射
真值映射就是,不改变原来的解空间。如果解空间连续,就每隔精度取一个点作为映射点。
3、符号编码
不会
(二)适应度函数
对编码后的解集合要进行一次初次选择,这个选择就要有一定的标准,可根据实际问题选择一个适应度函数,作为区分好坏的标准。
(三)交叉
交叉其实才是遗传算法的核心所在,它将编码后的解空间按一定规则查找,如果没有交叉,这个遗传算法和随机查找最优其实就没区别了,所以,发生交叉的概率应该设置大一些一般0.9以上,下面有一些交叉方法可供选择:
1、单点交叉法
2、双点交叉法
(四)变异
根据很小的几率随机按照一定规则改变其中一个算子的值。
1、对换变异
2、倒置变异
3、插入变异
具体规则很简单了。
最终,遗传算法的具体步骤就是编码,解码,计算适应度函数,选择,用交叉变异处理编码,解码,选择。。。。。。一直到满足终止条件。
终止条件一般是在程序开始是设置的遗传代数。