遗传算法

  遗传算法,很多博客把生物的遗传原理讲得相当到位,而对于算法的详细步骤及应用却避之不谈。本博客少量提及生物原理,然后介绍算法步骤及应用。写得很匆忙,暂时这么理解,多有错误,望读者见谅。

一、生物原理及数学表示

  遗传算法,从生物角度看,对物种的选择是,“物竞天择,适者生存”。亲代通过基因重组和基因突变遗传和变异,产生子代。在子代中,适应能力强的继续生存,适应能力弱的死亡。循环如此,最终,有利基因得以保留,不利基因被迫淘汰。

  接着,我们把上述的原理用数学式子表示出来,才能真正地进行算法分析(可以用浮点表示法,也可以用二进制,这里以二进制为例)。虽然,这里对突然而来的表示感到不适,但先接受它,最后融会贯通。

(1)淘汰

  一个种群中有许许多多这样的亲代,根据自己定义的适度值(适应能力)大小决定产生子代概率,如果不产生子代就意味着被淘汰了。

(2)遗传变异

  基因重组:

  亲代:001|101  110|111 

  子代:001|111  110|101

  观察到,交叉点后面对换

  基因突变:

  亲代:10|1011

  子代:10|0011

  观察到,交叉点处逆位

  ...

  还有很多变异方式。

(3)重复上述两个步骤,直到不满足循环条件

二、如何将生物原理和实际的优化问题联系起来

  原理就是这么简单,难得是这个遗传原理如何具体地和优化联系起来。

举例:

  f(x1,x2)=x12+x1x2+x2+5

  0≤x1,x2≤10

  解的精度为0.001

(1)

  先转成二进制。既然解的精度为0.001,而解的范围为0~10。这意味着总共有1 0000种可能。从0~1 0000用二进制表示它。14位二进制可以表示。

  10 1100 0111 0011 11 0110 0100 1100

  前14位为x1,后14为为x2

(2)

  多个亲代形成种群。根据适应度大小决定产生子代的概率,然后进行遗传变异,然后根据适应度淘汰。适应度是啥?怎么选?没经验,就是知道有的情况直接使用目标优化函数来做适应度计算。

  先避开适应度函数的选择,设为g(x1,x2),对n个亲代,求其适应度设为gi(x1,x2),i=1,2,...,n。那么这些亲代产生后代的概率分别为

  pi=gi(x1,x2)/Σ(gi(x1,x2))

  化成轮盘的情况:

  这个轮盘根据pi的大小画出。根据轮盘的旋转停下来的指向决定哪个亲代可以产生子代,产生一定数量的子代后停止旋转。

  对产生的子代进行遗传变异。

(3)重复步骤(2),直到不满足循环条件

三、其他的机制

  精英机制。产生后代后,发现某亲代比它的子代适应度大,用该亲代取代子代继续繁殖。

四、算法流程

五、比喻

  从前,有一大群袋鼠,它们被莫名其妙的零散地遗弃于喜马拉雅山脉。于是只好在那里艰苦的生活。海拔 低的地方弥漫着一种无色无味的毒气,海拔越高毒气越稀薄。可是可怜的袋鼠们对此全然不觉,还是习惯于活蹦乱跳。于是,不断有袋鼠死于海拔较低的地方,而越是在海拔高的袋鼠越是能活得更久,也越有机会生儿育女。就这样经过许多年,这些袋鼠们竟然都不自觉地聚拢到了一个个的山峰上,可是在所有的袋鼠中,只有聚 拢到珠穆朗玛峰的袋鼠被带回了美丽的澳洲。

参考文献:

很好的比喻:http://blog.csdn.net/emiyasstar__/article/details/6938608

很好的例子:http://blog.csdn.net/b2b160/article/details/4680853/

插图来源:http://www.360doc.com/content/11/0130/15/991597_89950992.shtml

  

原文地址:https://www.cnblogs.com/Wanggcong/p/4695249.html