1)编码问题
编码是遗传算法要解决的首要问题,常用的编码方法有二进制编码、格雷码编码、实数编码、符号编码等,针对不同的问题要采用不同的编码方法。
下面介绍几种常用编码方法:
(1)二进制编码:它是遗传算法中最常用的一种编码方法。
它具有下列一些优点:
①编码、解码操作简单易行;
②交叉、变异操作便于实现;
③符合最小字符集编码原则;
④便于利用模式定理对算法进行理论分析。
(2)格雷码编码:格雷码编码方法是二进制编码方法的一种变形,它是这样的一种编码方法:其连续的两个整数所对应的编码值之间只有一个码位是不相同的,其余码位都完全相同。格雷码除了具有二进制编码的优点外,还能提高遗传算法的局部搜索能力。
(3)实数编码:为了克服二进制编码在一些多维、高精度要求的连续函数优化问题上的缺点,人们提出实数编码方法,即个体的每个基因值用实数表示。实数编码方法具有提高遗传算法的精度要求和运算效率、改善遗传算法的计算复杂性等优点。
2)群体设定
遗传操作是对众多个体同时进行的,这众多个体组成了群体。在遗传算法处理流程中,继编码设计后的任务是初始群体的设定,并以此为起点一代代进化直到按某种一进化停止准则终止进化过程,由此得到最后一代。关键问题是,群体规模:即群体中包括的个体数目如何确定。其中有两个需要考虑的因素:初始群体的设定;进化过程一中各代的规模如何维持。作为遗传算法的控制参数之一,它对遗传算法效能的发挥有一定的影响。
(1)初始群体设定。
遗传算法中初始群体中的个体是随机产生的,一般来说,初始群体的设定可采用如下的策略:
①根据问题固有知识,设法把握最优解所占空间在整个问题空间的分布范围,然后在此分布范围内设定初始群体;
②先随机生成一定数目的个体,然后从中挑出最好的个体加到初始群体中。这种过程不断迭代,直到初始群体中的个体数达到了预先确定的规模。
(2)群体多样性。
群体规模的确定受遗传操作中选择操作的影响很大。一般而言,群体规模越大,群体中个体的多样性越高,算法陷入局部解的危险就越小。所以,从考虑群体多样性出发,群体规模应较大。但是群体规模太大会带来若干弊病:一是从计算效率着眼,群体越大,其适应值评估次数增加,所以计算量也增加,从而影响算法效能;二是群体中个体生存下来概率与其适应值成正比例,当群体中个体非常多时,少量适应值很高的个体会被选择而生存下来,但大多数个体却被淘汰,这会影响配对库的形成,从而影响交叉操作。另外,群体规模太小,会使遗传算法的搜索空间中分布范围有限,因而搜索有可能停止在未成熟阶段,引起未成熟收敛现象。显然,要避免未成熟收敛现象,必须保持群体的多样性,即群体规模不能太小。
3)适应度函数
遗传算法在进化搜索中基本上不用外部信息,仅用目标函数即适应度函数为依据。遗传算法的目标函数不受约束且定义域可以为任意集合,对目标函数的唯一要求是:针对输入值,可计算出能加以比较的非负结果。这一特点使得遗传算法应用范围很广,在具体应用中,适应度函数的设计要结合求解问题本身的要求而定,适应度函数的评估是选择操作的依据,适应度函数的设计直接影响到遗传算法的性能。
(1)原始适应度函数。
它是问题求解目标的直接表示,通常采用问题的目标函数作为个体的适应值度量。而对于很多非数值优化问题,也可以将其转化为求某个目标函数的极值问题,如设计和训练神经网络时,我们可以将网络的实际输出与期望输出之差的平方和作为问题的目标函数,则原问题成为寻找一个网络使该目标函数达到最小。对于一个问题,定义原始适应度函数的方法可能不止一种,选择时要尽量反映问题本身整体的特性,而不能只追求片面的目标。
(2)标准适应度函数。
它反映问题的最初求解目标,因此会出现两种情形:一是极小化情形,即原始适应值越小个体性能越好;另一种是极大化情形即原始适应度值越大个体性能越好,但遗传算法中的某些选择策略则要求适应度函数是非负的,而适应度值越大表明个体的性能越好,这时就需要将原始适应度函数做一个适当的变换以转化成标准的度量方式,即转化为极大化情形,并且适应值非负。
4)遗传操作
遗传操作是模拟生物基因遗传的操作。在遗传算法中,遗传操作的任务就是对群体的个体按照它们对环境适应的程度施加一定的操作,从而实现优胜劣汰的进化过程。
遗传操作包括以下3个基本透传算子:交叉、变异、选择。
这3个遗传算子有如下特点:
①这3个遗传算子的操作都是随机化操作,因此,个体向最优解的迁移也是随机的;
②遗传操作的效果和上述3个遗传算子所取的操作概率、编码方法、群体大小、初始群体,以及适应度函数的设定密切相关;
③3个基本遗传算子的操作方法或操作策略和个体的编码方式直接有关。
(1)交叉运算。是指对两个相互配对的染色体按某种方式相互交换其部分基因,从而形成两个新的个体。交叉运算是遗传算法区别于其他进化算法的重要特征,它决定了遗传算法的全局搜索能力,是产生新个体的主要方法。下面介绍几种常用的交叉算法。
①单点交叉:
又称为简单交叉,它是指在个体编码串中随机设置一个交叉点,然后在该点相互交换两个配对个体的部分基因。
②双点交叉:
它的具体操作过程是:
a.在相互配对的两个个体编码串中随机设置两个交叉点;
b.交换两个交叉点之间的部分基因。
(2)变异运算。
是指将个体编码串中的某些基因值用其他基因值来替换,从而形成一个新的个体。遗传算法中的变异运算是产生新个体的辅助方法,但必不可少,因为它决定了遗传算法的局部搜索能力。
下面介绍几种常用的变异运算方法:
①基本位变异:它是指对个体编码串以变异概率尸随机指定某一位或某儿位基因做变异运算。
②均匀变异:它是指分别用符合某一范围内均匀分布的随机数,以某一较小的概率来替换个体中每个基因。
③二元变异:它的操作需要两条染色体参与,两条染色体通过二元变异操作后生成两条新个体。新个体中的各个基因分别取原染色体对应基因值的同或/异或。
例如:
(3)选择运算。
或称复制运算,就是对群体中的个体进行优胜劣汰操作:适应度高的个体被遗传到下一代群体中的概率大,适应度低的个体被遗传到下一代群体中的概率小,它的任务就是按某种方法从父代群体中选取一些个体,遗传到下一代群体。
下面介绍几种选择方法:
①睹盘选择:又称比例选择方法,其基本思想是,各个个体被选中的概率与其适应度大小成正比。
②排序选择:该方法的主要思想是,对群体中的所有个体按其适应度大小进行排序,基于这个排序来分配各个个体被选中的概率。
③随机联赛选择:其操作思想是,从群体中任意选择一定数目的个体(称为联模),其中适应值最高的个体保存到下一代,这一过程反复执行,直到保存到下一代的个体数达到预先设定的数目为止。
根据遗传算法的基本原理,可以给出如图10-4所示的简单遗传算法的框图。
图10-4 遗传算法流程