遗传算法求函数极大值

1.遗传算法(Genetic Algorithms,GA)

基于自然选择和自然遗传机制的搜索算法,它是一种有效的解决最优化问题的方法,进化算法的一种。最早由美国Michigan大学的John Holland和他的同事及学生提出的。类似于自然界演化的基本法则,“适者生存”是遗传算法的核心机制:复制(reproduce)、杂交(crossover)、变异(mutation)等自然界的生物演化规则在遗传算法中都得到类似的体现。

2. 基本概念

遗传(Heredity)

是生物的普遍特征,亲代把生物信息交给子代,子代按照所得信息而发育、分化,因而子代总是和亲代具有相同或者相似的性状。生物有这个特征,物种才能稳定存在。

变异(Variation)

亲代和子代之间,子代和子代的不同个体之间总有些差异,这种现象称为变异,变异是随机发生的,变异的选择和积累是生命多样性和进化的根源。

染色体,chromosome

是生物细胞中含有的一种微小的丝状化合物,是遗传物质的主要载体,由多个遗传因子——基因组成。

遗传因子,gene

DNA长链结构中占有一定位置的基本遗传单位,也称基因。生物的基因根据物种的不同而多少不一。

个体,individual

指染色体带有特征的实体。

种群,population

染色体带有特征的个体的集合。

进化,evolution

生物在其延续生命的过程中,逐渐适应其生存环境使得其品质不断得到改良,这种生命现象称为进化。生物的进化是以种群的形式进行的。

适应度,fitness

度量某个物种对于生存环境的适应程度。

选择,selection

指以一定的概率从种群中选择若干个体的操作。

复制,reproduction

细胞在分裂时,遗传物质DNA通过复制而转移到新产生的细胞中,新的细胞就集成了旧细胞的基因。

交叉,crossover

有性生殖生物在繁殖下一代时,两个同源染色体之间通过交叉而重组,亦即在两个染色体的某一相同位置处DNA被截断,其前后两串分别交叉组合而形成两个新的染色体。

变异,mutation

复制时很小的概率产生的某些复制差错。

编码,coding

DNA中遗传信息在一个长链上按一定的模式排列,也即进行了遗传编码。遗传编码可以看成是从表现型到遗传子型的映射。

解码,decoding

从遗传子型到表现型的映射。

3.遗传算法原理

遗传算法是从代表问题可能潜在解集的一个种群开始的。

初代种群产生之后,按照适者生存、优胜劣汰的原理,逐代进化产生出越来越好的近似种群在每一代中,根据问题域中个体适应度大小挑选个体,并借助自然遗传学的遗传算子进行组合交叉和变异,产生出代表解的解集的种群。

这个过程将导致种群像自然进化一样的后生代种群比前代更加适应于环境,末代种群中的最优个体经过解码可以作为问题近似最优解。

《遗传算法求函数极大值》

4.遗传算法实例——求函数最大值

考虑一元函数求最大值的优化问题

《遗传算法求函数极大值》

为什么选择这个函数?看下函数曲线就知道了,这么多波峰波谷,就看算法能否找到某一范围的极大值:

《遗传算法求函数极大值》

5.遗传算法求解详细过程

(1)编码

变量x作为实数,可以视为遗传算法的表现形式。从表现型到基因型的映射称为编码。二进制编码将某个变量值代表的个体表示为一个[0,1]二进制串(遗传算法最简单、最经典的编码方法)。

若设定求解精确到6位小数,由于区间长度为2-(-1)=3,必须将区间[-1,2]分为3*10^6等份。因为2097152=2^21<3*10^6<=2^22=4194304,所以编码的二进制串长至少需要22位。

(2)产生初始种群

个体由串长为22的随机产生的二进制串组成染色体的基因码,产生一定数目的个体组成种群,种群的大小(规模)就是指种群中的个体数目。

(3)计算适应度

适应度大的个体其存活和被选中的概率大。适应度的计算就是对个体的计算,本例求函数最大值,目标函数值大的个体适应度大,所以直接引用目标函数作为适应度函数f(s)=f(x)。

例如x1=0.637197通过编码得到的二进制串是s1=[1000101110110101000111],这个串就是个体。此个体的适应度就是:

《遗传算法求函数极大值》 

假设这里选择种群数量为3 ,每个个体为:

s1=[1000101110110101000111] 
s2=[0000001110000000010000] 
s3=[1110000000111111000101]

分别对应于数量值

x1=0.637197, x2=-0.958973, x3=1.627888

另两个个体的适应度计算如下

《遗传算法求函数极大值》

 

(4)选择

轮盘赌选择法,最常用,最直观

f(s1)=2.286345,f(s2)=1.078878,f(s3)=3.250650

把三个适应度依比例画在轮盘上,转动轮盘,最后停在哪里,就选择谁,适应度大的被选中概率大:

《遗传算法求函数极大值》

选择方法的实现:产生[0,1]间的随机数,以随机数落在那个范围进行选择:

[0,0.16)

[0.16,0.51)

[0.51,1]

(5)遗传操作

n下面是经过选择操作后的两个个体: 
s2=[00000 01110000000010000] 
s3=[11100 00000111111000101]

首先执行单点交叉,随机随机选择交叉点,将之后的串交叉 
s2’=[00000 00000111111000101
s3’=[11100 01110000000010000]

n这两个个体的适应度分别为:

《遗传算法求函数极大值》

(6)变异操作

《遗传算法求函数极大值》

假定以一小概率选择S3的第5个遗传因子(第5位)变异,遗传因子由原来的0变为1,产生新个体

s3’=[1110100000111111000101]

该个体适应度

《遗传算法求函数极大值》

个体的适应度比它的父个体的适应度减小了。

《遗传算法求函数极大值》

但如果选中第11个遗传因子变异,产生新个体为

s3”= [11100000001111111000101]

适应度《遗传算法求函数极大值》

又发现s3”的适应度比其父个体的适应度改善了。这说明变异操作的“扰动”作用(全局搜索)。

6.结果分析

编制基本遗传算法(SGA)程序求解上述函数在区域[-1.0,2.0]的全局最大值。我们采用二进制编码,随机产生初始种群,适应度函数取函数体本身。取种群大小为50,染色体长度为22(精度为6位小数),交叉概率为0.6,变异概率为0.02,迭代100代。独立运行5次,绘制种群最大适应度(函数最优解)平均曲线值如下图:

《遗传算法求函数极大值》

由图可以看出遗传算法可以有效地跳出局部最优值且收敛速度较快,程序运行30代左右即可得到最大值3.850274,与实际最大值相差不大,可以作为问题的全局最优解。

转自:http://www.cnblogs.com/littlelucky/articles/1745801.html

转自:http://hi.baidu.com/lewutian/blog/item/40bae709fbc01fa42fddd43c.html

    原文作者:遗传算法
    原文地址: https://blog.csdn.net/dancewyr/article/details/6941415
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞