好文档 - 专业文书写作范文服务资料分享网站

遗传算法入门到掌握

天下 分享 时间: 加入收藏 我要投稿 点赞

图2-6

运行程序:

程序运行后请选择菜单项:控制->让袋鼠们开始跳吧,开始遗传算法的过程。其中蓝色的线条是函数曲线(恩,那就是喜玛拉雅山脉。其中最高的波峰,就是珠穆朗玛峰。)绿色的点是一只只袋鼠。上方的黑色曲线图表是对每一代最优的个体的适应性评分的统计图表。下方的黑色曲线图表是对每一代所有个体的平均适应性评分的统计图表。(如果你认为它们阻碍了你的视线,你可以在参数设置里面取消掉。)如图2-7所示。另外还可以用键盘的上下左右键来控制视窗的移动,加减键控制函数曲线的放缩。

图2-7

刚开始的时候,袋鼠分布得比较分散它们遍布了各个山岭,有的在高峰上,有的在深谷里。(如图2-8)

图2-8

经过了几代的进化后,一些海拔高度比较低的都被我们射杀了,而海拔较高的袋鼠却不断的生儿育女。(如图2-9)

图2-9

最后整个袋鼠种群就只出现在最高峰上面(最优解上)。(如图2-10)

图2-10

当然,袋鼠不是每一次都能跳到珠穆朗玛峰的,如图2-11所 示。(就是说不是每次都能收敛到最优解)也许它们跳到了某一个山峰,就自大的认为它们已经“会当凌绝顶”了。(当然,事实上是因为不管它们向前还是向后跳 都只能得到更小的适应度,所以不等它们跳过山谷,再跳到旁边更高的山峰,就被我们射杀了。)所以,我们为了使到袋鼠每次都尽可能的攀到珠穆朗玛峰,而不是 留恋在某一个低一些的山峰,我们有两个改进的办法,其一是初始人口数目更多一些,以使最好有一些袋鼠一开始就降落到最高峰的附近,但是这种方法对于搜索空 间非常大的问题往往是无能为力的。我们常常采用的方法是使袋鼠有一定的概率跳一个很大的步长,以使袋鼠有可能跳过一个山谷到更高的山峰去。这些改进的方法 留给读者自己去实现。

图2-11

另外,如果把变异的机率调得比较高,那么就会出现袋鼠跳得比较活跃的局面,但是很可能丢失了最优解;而如果变异的机率比较低的话,袋鼠跳得不太活跃,找到最优解的速度就会慢一些,这也留给读者自己去体验。

作为一个寻找大值的程序,这个的效率还 很低。我希望留给初学者更多改进的空间,大家不必受限于现有的方法,大可以发挥丰富的想象力,自己想办法去提高程序的效率,然后自己去实现它,让事实去验 证你的想法是否真的能提高效率,抑或刚好相反。恩,在这个过程当中,大家不知不觉地走进了遗传算法的圣殿了,胜于一切繁复公式的摆设和教条式的讲解。

总结与及扩充

经 过本章的学习,我想读者应该能基本上把握遗传算法的基本步骤与及隐约的看到了她的本质。当然同时还会带着许多许多的疑问和不解。好的,不必急躁,让我们在 以后的章节中慢慢领会。下面我们回顾一下前面所学过的内容,同时也做一些扩充。(为了适应学习新知识的客观规律,我对知识点的介绍所遵循的原则是:先对理 论作简单的介绍,目的是让读者对新鲜理论有一个感性的认识。然后用实际的例子实现理论并且在实践中加深对理论的理解。最后对理论作更为深入系统的总结与及 扩充。)

对编码方式的回顾与扩充

1.二进制编码

二进制编码的编码符号集由0和1组成,因此染色体是 一个二进制符号串,其优点在于编码、解码操作简单,交叉、变异等遗传操作便于实现,对于全局搜索能力有一定的优势;其缺点在于,不便于反映所求间题的特定 知识,对于一些连续函数的优化问题等,也由于遗传算法的随机特性而使得其局部搜索能力较差,对于一些多维、高精度要求的连续函数优化,二进制编码存在着连 续函数离散化时的映射误差,个体编码串较短时,可能达不到精度要求;而个体编码串的长度较长时,虽然能提高精度,但却会使算法的搜索空间急剧扩大。如果个 体编码串特别长时,会造成遗传算法的性能降低。 2.浮点数编码

浮点数编码方式,以浮点数为编码的单位。就二进制编码和浮点数编码比较而言,浮点数编码一些情况下比较能反映所求问题的特定知识,编码结构一般比二进制来得简单些。一般二进制编码比浮点数编码搜索能力强,但浮点数编码比二进制编码在变异操作上能够保持更好的种群多样性。 3.其它编码方式

其实编码的方式是多种多样的,有时候还会用到混合编 码,而且编码形式对具体问题的依赖性比较强。设计编码的时候不必拘泥于现有的几种编码方式,解决具体问题的时候,很多情况下需要为具体问题“度身定做”。 有时候一种合适的编码方式,配合合适的交换算子,变异算子(交换算子和变异算子常常需要适合特定的编码方式。),这些都会影响到解决问题的效率,在以后的 深入学习过程中大家将会有深刻体会。(下一章的例子将用到混合编码。) 接下来总结出遗传算法选取编码过程的几个原则:

1.完全性,原则上问题的所有可能的解都能找到与之对应的编码组合。 2.合法性,每个基因编码都对应一个可接受的个体。

3.多重性,多个基因型解码成一个表现型,即从基因型到相应的表现型空间是多对一的关系,这是基因的多重性。若相同的基因型被解码成不同的表现型,这是表现型多重性。当然,基因型到表现型的映射关系最好是一对一的关系。 4.紧致性,若两种基因编码能解码成相同的个体,那么占用空间越小的编码方式就越紧致。

5.复杂性,指基因型结构的复杂性,解码的复杂性,计算时空的复杂性。 这些特征常常是鱼与熊掌,不可兼得的。(整理《遗传算法――理论、应用与软件实现》相关资料而来)

对适应性函数的回顾与扩充

适 应性函数有一个更形象的名字――压力函数。为什么这样说呢?如果你对遗传算法没有一定程度上的理解的话很难把握它的意思,但是经过上面那个例子――对“袋 鼠逃”问题解决,读者会发现经过一段时间的进化过程,袋鼠都被无形的力“压”到了山顶。这其实是适应性函数的力量,如果你喜欢的话,你可以通过对适应性函 数的作简单修改,就能把袋鼠“压”到谷底。(建议初学者自己尝试尝试如何修改,虽然简单,但是你不一定那么容易成功的。)由此可见适应性函数是一个影响进 化趋势的函数,有非常重要的地位。 尺度变换(fitness scaling)

并不是每个问题的适应性函数都像“袋鼠跳”问题的那么简单明了。我们常常需要对目标函数值作一些变换。这种对目标函数值域的映射变换就称为适应度的尺度变换(fitness scaling)。下面是几种常见的尺度变换。(函数,

为目标函数)

为适应度

遗传算法入门到掌握

图2-6运行程序:程序运行后请选择菜单项:控制->让袋鼠们开始跳吧,开始遗传算法的过程。其中蓝色的线条是函数曲线(恩,那就是喜玛拉雅山脉。其中最高的波峰,就是珠穆朗玛峰。)绿色的点是一只只袋鼠。上方的黑色曲线图表是对每一代最优的个体的适应性评分的统计图表。下方的黑色曲线图表是对每一代所有个体的平均适应性评分的统计图表。(如果你认为
推荐度:
点击下载文档文档为doc格式
9fg1u8zxc9423gj8fm0n
领取福利

微信扫码领取福利

微信扫码分享