轻松理解遗传算法教材.docx
- 文档编号:1225373
- 上传时间:2022-10-19
- 格式:DOCX
- 页数:28
- 大小:440.86KB
轻松理解遗传算法教材.docx
《轻松理解遗传算法教材.docx》由会员分享,可在线阅读,更多相关《轻松理解遗传算法教材.docx(28页珍藏版)》请在冰豆网上搜索。
轻松理解遗传算法教材
遗传算法的手工模拟计算示例
为更好地理解遗传算法的运算过程,下面用手工计算来简单地模拟遗传算法的各
个主要执行步骤。
例:
求下述二元函数的最大值:
(1)个体编码
遗传算法的运算对象是表示个体的符号串,所以必须把变量x1,x2编码为一种
符号串。
本题中,用无符号二进制整数来表示。
因x1,x2为0~7之间的整数,所以分别用3位无符号二进制整数来表示,将它
们连接在一起所组成的6位无符号二进制数就形成了个体的基因型,表示一个可
行解。
例如,基因型X=101110所对应的表现型是:
x=[5,6]。
个体的表现型x和基因型X之间可通过编码和解码程序相互转换。
(2)初始群体的产生
遗传算法是对群体进行的进化操作,需要给其淮备一些表示起始搜索点的初始
群体数据。
本例中,群体规模的大小取为4,即群体由4个个体组成,每个个体可通过随机
方法产生。
如:
011101,101011,011100,111001
(3)适应度汁算
遗传算法中以个体适应度的大小来评定各个个体的优劣程度,从而决定其遗传
机会的大小。
本例中,目标函数总取非负值,并且是以求函数最大值为优化目标,故可直接
利用目标函数值作为个体的适应度。
(4) 选择运算
选择运算(或称为复制运算)把当前群体中适应度较高的个体按某种规则或模型遗传到下一代群体中。
一般要求适应度较高的个体将有更多的机会遗传到下一代
群体中。
本例中,我们采用与适应度成正比的概率来确定各个个体复制到下一代群体中
的数量。
其具体操作过程是:
• 先计算出群体中所有个体的适应度的总和 fi (i=1.2,…,M);
• 其次计算出每个个体的相对适应度的大小fi/fi,它即为每个个体被遗传
到下一代群体中的概率,
• 每个概率值组成一个区域,全部概率值之和为1;
• 最后再产生一个0到1之间的随机数,依据该随机数出现在上述哪一个概率区
域内来确定各个个体被选中的次数。
(5) 交叉运算
交叉运算是遗传算法中产生新个体的主要操作过程,它以某一概率相互交换某
两个个体之间的部分染色体。
本例采用单点交叉的方法,其具体操作过程是:
•先对群体进行随机配对;
•其次随机设置交叉点位置;
•最后再相互交换配对染色体之间的部分基因。
(6) 变异运算
变异运算是对个体的某一个或某一些基因座上的基因值按某一较小的概率进
行改变,它也是产生新个体的一种操作方法。
本例中,我们采用基本位变异的方法来进行变异运算,其具体操作过程是:
•首先确定出各个个体的基因变异位置,下表所示为随机产生的变异点位置,
其中的数字表示变异点设置在该基因座处;
•然后依照某一概率将变异点的原有基因值取反。
对群体P(t)进行一轮选择、交叉、变异运算之后可得到新一代的群体p(t+1)。
从上表中可以看出,群体经过一代进化之后,其适应度的最大值、平均值都得
到了明显的改进。
事实上,这里已经找到了最佳个体“111111”。
[注意]
需要说明的是,表中有些栏的数据是随机产生的。
这里为了更好地说明问题,
我们特意选择了一些较好的数值以便能够得到较好的结果,而在实际运算过程中有可
能需要一定的循环次数才能达到这个最优结果。
遗传算法的有趣应用很多,诸如寻路问题,8数码问题,囚犯困境,动作控制,找圆心问题(这是一个国外网友的建议:
在一个不规则的多边形中,寻找一个包含在该多边形内的最大圆圈的圆心。
),TSP问题(在以后的章节里面将做详细介绍。
),生产调度问题,人工生命模拟等。
直到最后看到一个非常有趣的比喻,觉得由此引出的袋鼠跳问题(暂且这么叫它吧),既有趣直观又直达遗传算法的本质,确实非常适合作为初学者入门的例子。
问题的提出与解决方案
让我们先来考虑考虑下面这个问题的解决办法。
已知一元函数:
现在要求在既定的区间内找出函数的最大值
极大值、最大值、局部最优解、全局最优解
在解决上面提出的问题之前我们有必要先澄清几个以后将常常会碰到的概念:
极大值、最大值、局部最优解、全局最优解。
学过高中数学的人都知道极大值在一个小邻域里面左边的函数值递增,右边的函数值递减,在图2.1里面的表现就是一个“山峰”。
当然,在图上有很多个“山峰”,所以这个函数有很多个极大值。
而对于一个函数来说,最大值就是在所有极大值当中,最大的那个。
所以极大值具有局部性,而最大值则具有全局性。
因为遗传算法中每一条染色体,对应着遗传算法的一个解决方案,一般我们用适应性函数(fitnessfunction)来衡量这个解决方案的优劣。
所以从一个基因组到其解的适应度形成一个映射。
所以也可以把遗传算法的过程看作是一个在多元函数里面求最优解的过程。
在这个多维曲面里面也有数不清的“山峰”,而这些最优解所对应的就是局部最优解。
而其中也会有一个“山峰”的海拔最高的,那么这个就是全局最优解。
而遗传算法的任务就是尽量爬到最高峰,而不是陷落在一些小山峰。
(另外,值得注意的是遗传算法不一定要找“最高的山峰”,如果问题的适应度评价越小越好的话,那么全局最优解就是函数的最小值,对应的,遗传算法所要找的就是“最深的谷底”)如果至今你还不太理解的话,那么你先往下看。
本章的示例程序将会非常形象的表现出这个情景。
“袋鼠跳”问题
既然我们把函数曲线理解成一个一个山峰和山谷组成的山脉。
那么我们可以设想所得到的每一个解就是一只袋鼠,我们希望它们不断的向着更高处跳去,直到跳到最高的山峰(尽管袋鼠本身不见得愿意那么做)。
所以求最大值的过程就转化成一个“袋鼠跳”的过程。
下面介绍介绍“袋鼠跳”的几种方式。
爬山法、模拟退火和遗传算法
解决寻找最大值问题的几种常见的算法:
1.爬山法(最速上升爬山法):
从搜索空间中随机产生邻近的点,从中选择对应解最优的个体,替换原来的个体,不断重复上述过程。
因为只对“邻近”的点作比较,所以目光比较“短浅”,常常只能收敛到离开初始位置比较近的局部最优解上面。
对于存在很多局部最优点的问题,通过一个简单的迭代找出全局最优解的机会非常渺茫。
(在爬山法中,袋鼠最有希望到达最靠近它出发点的山顶,但不能保证该山顶是珠穆朗玛峰,或者是一个非常高的山峰。
因为一路上它只顾上坡,没有下坡。
)
2.模拟退火:
这个方法来自金属热加工过程的启发。
在金属热加工过程中,当金属的温度超过它的熔点(MeltingPoint)时,原子就会激烈地随机运动。
与所有的其它的物理系统相类似,原子的这种运动趋向于寻找其能量的极小状态。
在这个能量的变迁过程中,开始时。
温度非常高,使得原子具有很高的能量。
随着温度不断降低,金属逐渐冷却,金属中的原子的能量就越来越小,最后达到所有可能的最低点。
利用模拟退火的时候,让算法从较大的跳跃开始,使到它有足够的“能量”逃离可能“路过”的局部最优解而不至于限制在其中,当它停在全局最优解附近的时候,逐渐的减小跳跃量,以便使其“落脚”到全局最优解上。
(在模拟退火中,袋鼠喝醉了,而且随机地大跳跃了很长时间。
运气好的话,它从一个山峰跳过山谷,到了另外一个更高的山峰上。
但最后,它渐渐清醒了并朝着它所在的峰顶跳去。
)
3.遗传算法:
模拟物竞天择的生物进化过程,通过维护一个潜在解的群体执行了多方向的搜索,并支持这些方向上的信息构成和交换。
以面为单位的搜索,比以点为单位的搜索,更能发现全局最优解。
(在遗传算法中,有很多袋鼠,它们降落到喜玛拉雅山脉的任意地方。
这些袋鼠并不知道它们的任务是寻找珠穆朗玛峰。
但每过几年,就在一些海拔高度较低的地方射杀一些袋鼠,并希望存活下来的袋鼠是多产的,在它们所处的地方生儿育女。
)(后来,一个叫天行健的网游给我想了一个更恰切的故事:
从前,有一大群袋鼠,它们被莫名其妙的零散地遗弃于喜马拉雅山脉。
于是只好在那里艰苦的生活。
海拔低的地方弥漫着一种无色无味的毒气,海拔越高毒气越稀薄。
可是可怜的袋鼠们对此全然不觉,还是习惯于活蹦乱跳。
于是,不断有袋鼠死于海拔较低的地方,而越是在海拔高的袋鼠越是能活得更久,也越有机会生儿育女。
就这样经过许多年,这些袋鼠们竟然都不自觉地聚拢到了一个个的山峰上,可是在所有的袋鼠中,只有聚拢到珠穆朗玛峰的袋鼠被带回了美丽的澳洲。
)
下面主要介绍介绍遗传算法实现的过程。
遗传算法的实现过程
遗传算法的实现过程实际上就像自然界的进化过程那样。
首先寻找一种对问题潜在解进行“数字化”编码的方案。
(建立表现型和基因型的映射关系。
)然后用随机数初始化一个种群(那么第一批袋鼠就被随意地分散在山脉上。
),种群里面的个体就是这些数字化的编码。
接下来,通过适当的解码过程之后,(得到袋鼠的位置坐标。
)用适应性函数对每一个基因个体作一次适应度评估。
(袋鼠爬得越高,越是受我们的喜爱,所以适应度相应越高。
)用选择函数按照某种规定择优选择。
(我们要每隔一段时间,在山上射杀一些所在海拔较低的袋鼠,以保证袋鼠总体数目持平。
)让个体基因交叉变异。
(让袋鼠随机地跳一跳)然后产生子代。
(希望存活下来的袋鼠是多产的,并在那里生儿育女。
)遗传算法并不保证你能获得问题的最优解,但是使用遗传算法的最大优点在于你不必去了解和操心如何去“找”最优解。
(你不必去指导袋鼠向那边跳,跳多远。
)而只要简单的“否定”一些表现不好的个体就行了。
(把那些总是爱走下坡路的袋鼠射杀。
)以后你会慢慢理解这句话,这是遗传算法的精粹!
所以我们总结出遗传算法的一般步骤:
开始循环直至找到满意的解。
1.评估每条染色体所对应个体的适应度。
2.遵照适应度越高,选择概率越大的原则,从种群中选择两个个体作为父方和母方。
3.抽取父母双方的染色体,进行交叉,产生子代。
4.对子代的染色体进行变异。
5.重复2,3,4步骤,直到新种群的产生。
结束循环。
接下来,我们将详细地剖析遗传算法过程的每一个细节。
编制袋鼠的染色体----基因的编码方式
通过前一章的学习,读者已经了解到人类染色体的编码符号集,由4种碱基的两种配合组成。
共有4种情况,相当于2bit的信息量。
这是人类基因的编码方式,那么我们使用遗传算法的时候编码又该如何处理呢?
受到人类染色体结构的启发,我们可以设想一下,假
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 轻松 理解 遗传 算法 教材