在科学研究和工程实践中,我们经常需要求解如公式所示的某个函数的最大值或最小值的问题.这类问题可以统称为最优化问题,其中 为待优化的目标函数, 和 为约束条件.在满足约束条件的前提下,使得目标函数的值达到最大或最小的自变量 被称为目标函数的最优解.

 

最优化问题的目标函数和约束条件种类繁多,对于如何求解该类问题,人们一直在探究和探讨.而GA的出现为最优化问题的求解提供了一个有效的途径和通用的框架.GA最早由美国密执安大学的Holland教授提出.70年代,De Jong基于GA的思想在计算机上进行了大量的纯数值函数优化计算实验.90年代,Goldberg在一系列研究工作的基础上进行归纳总结,形成了GA的基本框架.

1  遗传算法的原理

在GA中,首先将目标函数的自变量映射成一个特定的编码串,我们称之为染色体或个体,编码值 被称为个体的基因型,与之对应的自变量 被称为个体的表现型.多个个体组成的集合被称为种群.对于每一个体,需要按照一定的规则确定其对环境的适应度.个体的适应度是与其表现型 对应的目标函数值有关的,越接近目标函数的最优解,适应度越大,反之,适应度越小.

GA的运算过程是一个迭代的过程.按照优胜劣汰的规则,对第 代种群中的个体进行选择,让适应度较高的个体有更大的概率遗传到第 代.如此循环往复的对种群进行遗传运算,种群中最终将会进化出一个优良的个体,它的表现型将达到或接近于问题的最优解.

遗传运算的整体过程可以分为三个基本操作:

(1)选择:模拟自然界的自然选择过程,从第 代种群中选择出适应度高的个体,遗传到第 代种群中.

(2)交叉:模拟生物的有性繁殖过程,先将被选择出的优良个体随机搭配成对,对每一对个体,以某个概率(交叉概率)交换他们的部分染色体.

(3)变异:模拟生物的基因变异过程,对每一个个体,以某一概率(变异概率)改变其某个或者某些基因的值.

2 遗传算法的实现过程

(1)编码

把一个问题的可行解从其解空间转换到GA所能处理的搜索空间的转换方法称为编码.编码是应用GA时要解决的首要问题,编码方式会影响遗传运算的结果精度和运行效率.常用的编码方法可以分为三大类:二进制编码方法、浮点编码方法和符号编码方法,其中二进制编码最为常用.

 

(2)初始化种群

在一定的限制条件下初始化种群,该种群是解空间的一个子空间.种群的大小依赖于待求解问题的特性.通常,初始化种群是随机产生的,在整个可行解的范围内取值.

 

(3)计算适应度

在GA中,个体被遗传到下一代的概率是由该个体的适应度决定的.如何确定适应度函数对GA的性能有较大的影响.适应度函数也应根据实际问题选择,但应保证:当个体的表现型越接近最优解时,其适应度越大.

(4)选择

选择是指根据适应度大小选择优秀个体繁殖下一代.个体的适应度越高,则被选中的概率越大.常用的选择方法有轮盘赌选择、联赛选择和精英选择等.

(5)交叉

交叉是指一定概率交换两个互相配对的染色体按的部分基因,形成两个新的个体.交叉运算是产生新个体的主要方法.目前常用的配对策略是随机配对.交叉算子的设计和实现与所研究的问题密切相关.常用的交叉算子有单点交叉、多点交叉和算数交叉等.

(6)变异

变异是指以一定概率改变编码串中的某些基因座上的基因值,从而形成一个新的个体.常用的变异方法有基本位变异、均匀变异、边界变异、非均匀变异、高斯变异等.

变异运算是产生新个体的辅助方法,但也是必不可少的,因为它决定了GA的局部搜索能力.交叉原子与变异算子的相互配合,共同完成对搜索空间的全局搜索和局部搜索.

(7)迭代

从步骤4开始循环迭代,直到种群中满足判别准则或达到规定的遗传代数.常用的判定准则有:连续几代个体的平均适应度的差异小于某一个极小的阈值、种群中所有个体适应度的方差小于某一个极小的阈值等.

3 遗传算法的特点

与传统的优化算法相比,GA有以下的特点:

(1)以自变量的编码作为运算对象.对一些无数值概念或很难有数值概念的问题,如组合优化等,编码处理方式拥有独特的优越性.

(2)直接以目标函数值作为搜索信息.GA不需要梯度信息,对于很多导数不存的函数的优化问题,可以非常方便的求解.

(3)同时使用多个搜索点的搜索信息.能比较有效的避免算法陷入局部最优,因此不需要花费很大的精力的选择优化的初始值.并且多点搜索有其隐含的并行性.

(4)使用概率搜索.GA的选择、交叉和变异等运算都是以概率的方式来进行的,这增加了其搜索过程的灵活性.

(5)可拓展性强.GA的本质是一个优化算法,大多应用到优化算法的地方都可以应用GA,因此可以比较容易的与其他算法结合.

尽管GA具有非常优秀的性质,但也有其所固有的不足.算法的交叉概率、变异概率等参数在大多情况下是凭算法设计者的经验选取的.如果参数选择或者算法设计不甚合理,GA可能会收敛过于缓慢,抑或过早的收敛于局部最优解,即所谓的早熟问题.