遗传算法(Genetic Algorithm, GA)最早是由美国密歇根大学Holland教授及其学生于20世纪60年代末到70年代初提出的,起源于对生物系统所进行的计算机模拟研究。它是模仿自然界生物进化机制发展起来的随机全局搜索和优化方法,借鉴了达尔文的进化论和孟德尔的遗传学说。其本质是一种高效、并行、全局搜索的方法,能在搜索过程中自动获取和积累有关搜索空间的知识,并自适应地控制搜索过程以求得最佳解。
遗传算法使用群体搜索技术,将种群代表一组问题解,通过对当前种群施加选择、交叉、变异等一系列遗传操作来产生新一代的种群,并逐步使种群进化到包含近似最优解的状态。
下面说明遗传算法的一些基本概念。
个体是指染色体带有特征的实体,表示可行解。
种群是个体的集合,表示可行解集。该集合内个体数成为种群的大小。
染色体是包含生物体所有遗传信息的化合物,表示可行解的编码。
基因是控制生物体某种形状(即遗传信息)的基本单位,表示可行解编码的分量。
遗传编码是将优化变量转化为基因的组合表示形式,优化变量的编码机制有二进制编码、十进制编码(实数编码)等。
适应度即生物体个体适应生存环境的能力。在遗传算法中,用来评价个体优劣程度的数学函数,称为个体的适应度函数。对于求解最大值的优化问题,某个体的适应度函数值越大,即表示该个体越适应函数。
遗传操作是优选强势个体的“选择”、个体间交换基因产生新个体的“交叉”、个体基因信息突变而产生新个体的“变异”这三种变换的统称。在生物进化过程中,一个群体中生物特性的保持是通过遗传来继承的。生物的遗传主要是通过选择、交叉、变异三个过程把当前父代群体的遗传信息遗传到下一代(子代)成员。与此对应,遗传算法中最优解的搜索过程也模仿生物的这个进化过程,使用所谓的遗传算子来实现,即选择算子、交叉算子、变异算子。
根据个体的适应度,按照一定的规则或方法,从第 t t t代群体 P ( t ) P(t) P(t)中选择出一些优良的个体遗传到下一代群体 P ( t + 1 ) P(t+1) P(t+1)中。
适应度值比例方法(轮盘赌方法) 是遗传算法中最早提出的一种选择方法,由Holland提出,它是一种基于比例的选择,利用各个个体适应度所占比例的大小来决定其子代保留的可能性。
若某个个体 i i i的适应度为 f i f_i fi,种群大小为 N p N_p Np,则它被选择的概率表示为:
p i = f i / ∑ i = 1 N p f i ( i = 1 , 2 , . . . , N p ) p_i=f_i/\sum_{i=1}^{N_p}f_i(i=1,2,...,N_p) pi=fi/i=1∑Npfi(i=1,2,...,Np)
个体适应度越大,则其被选择的机会也越大;反之亦然。为了选择交叉个体,需要进行多轮选择,选择足够多的个体达到种群大小。每一轮产生一个 [ 0 , 1 ] [0,1] [0,1]内的均匀随机数 r r r,将 r r r作为选择指针来确定被选个体。若 r ≤ q 1 r\leq q_1 r≤q1,则个体 i ( i = 1 ) i(i=1) i(i=1)被选中;
若 q k − 1 < r ≤ q k ( 2 ≤ k ≤ N p ) q_{k-1}
q i = ∑ j = 1 i p j ( i = 1 , 2 , . . . , N p ) q_i=\sum_{j=1}^{i}p_j(i=1,2,...,N_p) qi=j=1∑ipj(i=1,2,...,Np)
将被选择的优良个体所组成的新种群 P ( t + 1 ) P(t+1) P(t+1)中的各个个体随机搭配,对每一对个体,以某一概率(交叉概率 P c P_c Pc)交换他们之间的部分染色体。
交叉操作一般分为以下几个步骤:
首先,从交配池中随机取出要交配的一对个体;
然后,根据串位长度 L L L,对要交配的一对个体,随机取出 [ 1 , L − 1 ] [1,L-1] [1,L−1]中的一个或多个整数 k k k作为交叉位置;
最后,根据交叉概率 P c P_c Pc实施交叉操作,配对个体在交叉位置处,相互交换各自的部分基因,从而形成一对新的个体。遗传算法的性能在很大程度上取决于采用的交叉操作的性能。
对群体中的每个个体,以某一概率(变异概率 P m P_m Pm)将某一个或某一些基因上的基因值改变为其他的等位基因值。
变异的一般步骤为:
首先,对种群中所有个体按事先设定的变异概率判断是否进行变异;
然后,对进行变异的个体随机选择变异位进行变异。
遗传算法是模拟生物在自然环境中的遗传和进化的过程而形成的一种并行、高效、全局搜索的方法,它主要有以下特点: