遗传算法,很多博客把生物的遗传原理讲得相当到位,而对于算法的详细步骤及应用却避之不谈。本博客少量提及生物原理,然后介绍算法步骤及应用。写得很匆忙,暂时这么理解,多有错误,望读者见谅。
一、生物原理及数学表示
遗传算法,从生物角度看,对物种的选择是,“物竞天择,适者生存”。亲代通过基因重组和基因突变遗传和变异,产生子代。在子代中,适应能力强的继续生存,适应能力弱的死亡。循环如此,最终,有利基因得以保留,不利基因被迫淘汰。
接着,我们把上述的原理用数学式子表示出来,才能真正地进行算法分析(可以用浮点表示法,也可以用二进制,这里以二进制为例)。虽然,这里对突然而来的表示感到不适,但先接受它,最后融会贯通。
(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