本文为《遗传算法原理及应用》基本遗传算法学习总结。
一、前言
遗传算法有很多形式,其中较为简单的就是基本遗传算法(SGA)了,SGA 是其他遗传算法的基础。接下来我们介绍相关的知识。
二、基本遗传算法描述
我们首先介绍 SGA 的构成要素:
- 染色体编码方法。使用二进制字符串表示,等位基因由二值符号 组成,初始种群的基因值满足均匀分布。
- 个体适应度评价。我们会根据个体适应度的大小对群体进行优胜劣汰,因为要以概率的形式接受个体,所以适应度必须 。实际情况中需要自己设计。
- 遗传算子。SGA 只使用我们上篇文章说到的选择算子、交叉算子和变异算子。选择运算采用比例选择算子,即上篇文章中用个体适应度除以群体适应度总和;交叉运算采用单点交叉算子,只对染色体的一段进行交叉互换(而不考虑多段);变异运算采用基本位变异算子或均匀变异算子,即某些位发生基因突变。
- SGA 的运行参数。以下参数需通过反复实验尝试才能得到较好的结果。
- :群体大小,取20~100
- :终止进化代数,即迭代次数,取100~500
- :交叉概率,即发生交叉互换的概率,取0.4~0.99
- :变异概率,即个体产生基因突变的概率(而非每个基因座的突变概率),取0.0001~0.1
三、基本遗传算法的实现
接下来我们详细介绍 SGA 的构成要素。
-
染色体编码方法。
(1)如 为个体基因型,可表示一个个体;
(2)染色体长度通常取二进制值域刚好能满足可行域的位数(有时也可取一半的离散点):对应二进制编码位数为 , 分别为自变量最大值和最小值, 为需要精确到的位数。
-
个体适应度评价,即适应度函数的选取问题。
(1)最小值优化问题。加负号转化为最大值优化问题;
(2)目标函数总取正的最大值优化问题,直接将目标函数作为适应度函数;
(3)目标函数有负值的最大值优化问题,适应度函数为:
其中 为一个相对较小的数,有三种选择方法:
(a) 预先指定较小的数
(b) 进化到当前代为止的最小目标函数值
(c ) 当前代或近几代群体中的最小目标函数值(4)目标函数有负值的最小值优化问题,适应度函数为:
其中 是一个相对较大的值,选择方法同上。 -
比例选择算子。执行过程如下:
(1)计算群体适应度总和;(2)计算相对适应度,即用个体适应度除以群体适应度总和;
(3)模拟赌盘操作确定个体被选择的次数。概率大的个体被选择遗传下去的个数多。
-
单点交叉算子。执行过程如下:
(1)个体两两配对,人为指定;
(2)随机设置某基因座后为交叉点。若染色体长度为 ,则交叉点可选位置为 ,即不能发生不交叉的情况;
(3)每对个体根据交叉概率 进行交换。示意图如下:
-
基本位变异算子。执行过程如下:
(1)依据概率 对每个基因座指定为变异点;
(2)对于变异点,基因值取反或用其他值代替。
实际上,遗传算法就是一个迭代的过程,每次迭代进行相同操作。我们通过一个例题来解释上文中的知识点:
【例】Rosenbrock 函数的全局最大值计算。
例题已经给我们了数学模型,我们直接运用遗传算法即可。
-
确定编码方法。 分别用 10 位二进制编码表示,则每个变量可取的离散值为 1024 个,表示 间的一半离散点。将 的编码连接。
-
确定解码方法。即用解码公式将上述编码方式转换回变量值,此例题的解码公式根据区间比例容易得到:
-
因为目标函数非负且要求全局最大值,则个体评价方法可直接用目标函数。遗传算子及运行参数与前面相同不再赘述。
在不断进化(迭代)的过程中,适应度高的个体越来越多,并集中在最优点附近,从而可以求得最优解。