遗传算法简单理解.docx
- 文档编号:14542833
- 上传时间:2023-04-23
- 格式:DOCX
- 页数:9
- 大小:79.75KB
遗传算法简单理解.docx
《遗传算法简单理解.docx》由会员分享,可在线阅读,更多相关《遗传算法简单理解.docx(9页珍藏版)》请在冰豆网上搜索。
遗传算法简单理解
遗传算法简单理解
作者:
日期:
遗传算法(GeneticAlgorithm)又叫基因进化算法,或进化算法。
属于启发式搜索算法一种,这个算法比较有趣,并且弄明白后很简单,写个100-200行代码就可以实现。
在某些场
合下简单有效。
本文就花一些篇幅,尽量白话方式讲解一下。
首先说一下问题。
在我们学校数据结构这门功课的时候,时常会有一些比较经典的
问题(而且比较复杂问题)作为学习素材,如八皇后,背包问题,染色问题等等。
上面列出
的几个问题都可以通过遗传算法去解决。
本文列举的问题是TSP(TravelingSalesmanProblem)
类的问题。
TSP问题实际上是”哈密顿回路问题”中的”哈密顿最短回路问题”如下图,就是要把下面8个城市不重复的全部走一遍。
有点像小时候玩的画笔画游戏,一笔到底不能重复。
TSP不光是要求全部走一遍,并且是要求路径最短。
就是有可能全部走一遍有很多走法,要
找出其中总路程最短的走法。
和这个问题有点相似的是欧拉回路(下图)问题,它不是要求把每个点都走一遍,而是要求把每个边都不重复走一遍(点可以重复),当然欧拉回路不是本算法研究的范畴。
本文会从TSP引申出下面系列问题
1、TSP问题:
要求每个点都遍历到,而且要求每个点只被遍历一次,并且总路程最短。
2、最短路径问题:
要求从城市1到城市8,找一条最短路径。
3、遍历m个点,要求找出其距离最短的路线。
(如果m=N总数,其实就是问题1了,所以问题1可以看成是问题3的特例)。
遗传算法的理论是根据达尔文进化论而设计出来的算法:
人类是朝着好的方向(最优解)
进化,进化过程中,会自动选择优良基因,淘汰劣等基因。
在上面tsp问题中,一个城市节点可以看成是一个基因,一个最优解就是一条路径,包含
若干个点。
就类似一条染色体有若干基因组成一样。
所以求最短路径问题,可以抽象成求最
优染色体的问题。
遗传算法很简单,没有什么分支判断,只有两个大循环,流程大概如下
流程中有几个关键元素:
4/10
r-jo
NO
YES
YES
找出最优解
5/10
打分,是优秀,还是一般,还是很差的畸形儿。
用这个函数进行量化。
在
按照盍异规则进行变异运
B
tsp中,路径
合*替换老的population*谱疔新一
saa
1、适度值评估函数。
这个函数是算法的关键,就是对这个繁衍出来的后代进行评估
刃巳仃解用L半倍哲或fitness.fuctionffirU会.迅灵卞鞋中星优解_
j
1
从可行解中按嚴择规则
选出2个人」昨为交証更象
i
越短,分数越高。
函数可以可以这样fitness=1/total_distanee.或者fitness=
MAX_DISTANCE-total_distanee.不同的计算方法会影响算法的收敛速度,直接影响结
果和性能。
2、选择运算规则:
又称选择算子。
对应着达尔文理论中适者生存,也有地方叫着精英
主义原则,意思就是只有优秀的人才有更大的几率存活下来,拥有交配权。
有权利拥有更多后代,传承下自己血脉基因。
和现实中很相像,皇帝权臣遗留下来的子孙后代比较多。
选择方法比较多。
最常见的是roundrobinselection算法,即轮盘赌算法,这个算法
比较简单有效。
选择算法目前已有的有10来种之多。
各种不同业务可以按需选择。
轮盘赌逸燥方弦
选择公式如下
/-I
1.〃选择运算---轮盘赌,此算法要求不能有负数.
2.int32_tGenetie:
:
Selection(Genome&selGenome)
3.{
4.〃生成一个随机浮点数
//本算法在轮盘赌算法上加上了选择概率,提高最大可行解入围概率
5.
doubleftmp=(((random())%100001)/(100000+0.0000001));
6.
if(ftmp>0.9)
7.
{
8.
GetBestGenome(selGenome);
9.
returnESUCCESS;
10.
}
11.
//生成一个【0,m_dTotalFitness】之间的随机浮点数
12.
doubledRange=(((random()+random())%100001)/(100000+0.0000001))*m_dTotalFitness;
13.
doubledCursor=0.0;
14.
size_ti=0;
15.
16.
for(i=0;i 17. { 18. dCursor+=m_vGenome[i].dFitness; 19. 20. if(dCursor>dRange) 21. { 22. break; 23. } 24. } 25. 26. selGenome=m_vGenome[i]; 27. 28. returnESUCCESS; 29. } 3、 交叉运算规则: 又称交配规则,交叉算子。 对应遗传学中的精子和卵子产生的受精 卵含有精子的部分基因,也含有卵子的部分基因的现象。 就像孩子有点像父亲,又有点像母亲的规律。 交叉运算算法更多。 作者可以天马行空的自己去想象。 只要达到交叉结果中含有父母的基因就可以。 最常见的是k-opt交换。 其中k可以是1,2,3…等等。 简 称单点交换,两点交换,3点交换等等: 单点交换 BBffl遊E个琢为交更点 其中修复重复基因根据业务需要看是否需要。 两点交换 4、变异运算规则: 又叫变异算子。 在人类遗传进化过程中。 会发生一些基因突变。 这些突变有可能是好的突变,有可能是坏的突变。 像癌细胞就是坏的突变。 爱因斯坦的大脑估计是好的突变。 突变方法也是可以天马行空的自己去发挥创造。 这里讨论一下,为什么要有突变这道流程呢。 从人类进化角度来说。 人类基因有数十万种,在远古交流比较少的年代。 都是部落内部通婚,但是整个部落内部居民可能都缺少某种好的基因,这样无论他们怎么交配,都不会产生好的基因,那么他们需要引入好的基因,于是和其他部落通婚。 引入其他自己没有的基因,其实对于这个种群来说这就是一次基因变异。 如果是好的变异,那么这个后代就很优秀,结果就是会产生更多子孙,把这个好的变异基因传承下去,如果不是好的变异基因,自然而然会在前面选择算子下淘汰,就是现实生活中的所谓的年幼夭折,痴呆无后,或先天畸形被淘汰,不会传承下去。 从计算机算法角度看: 所有的启发式算法无外乎2种手段结合。 局域搜索和全域搜索。 局域搜索是在邻域范围内找出最优解。 对应的是选择算子和交叉算子。 在自己部落里面 找最优秀的人。 如果只有局域搜索的话,就容易陷入局域最优解。 算法结果肯定是要找出全域最优解。 这就要求跳出局域搜索。 我们称之为创新”。 创新就是一次打破常规的突破一一就是我们的“变异”算子。 这里拿最短路径路径举例子,求点1到点8之间的最短路径,初始解是1——2——3——6——8 补集4-5-7} 内变异: 所谓内变异就是在自己内部发生变异。 严格来说其实不是一种变异。 但是它又是一种比较有效的手段。 1&3 2 8 外变异: 外变异是引入创新,突破传统的质的飞跃,也是启发算法中所谓的全域搜索。 F面是充当前基因中引入外部基因(当前集合的补集)。 5 8 结尾: 遗传算法除了上述这些几个主要算子之外,还有一些细节。 如交叉概率pc,变异 概率pm,这些虽然都是辅助手段,但是有时候对整个算法结果和性能带来截然不同的效果。 这也是启发式算法的一个缺点。 参数需要不停的在实践中摸索,没有万能的推荐参数。 还有细心的读者可能发现几个疑问,就是最短路径中变异或交叉结果可能产生无效解,如 前面最短路径1――6――3――2――8.其中1和6之间根本没有通路。 碰到这种情况,可以抛弃这条非法解,重新生成一条随机新解(其实这也是一次变异创新)。 或者自己修复 成可行解。 反正框框在那里。 具体手段可以自己天马行空发挥。 另一个比较实际的问题是: 在最短路径中并不知道染色体长度是多少,不错。 大部分人还 是用定长染色体去解决问题,这样性能低下。 算法不直观。 这时候可以使用变长染色体来解 决。 其实我建议不管何种情况,都设计变长染色体模式。 因为定长也是变长的一种特例。 使 用变长可以解决任何问题。 不管是tsp还是最短路径问题。 还有一个编解码问题,就是把现实问题转换成基因,这些问题都比较容易解决,最简单的 就是直接用数组下标表示。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 遗传 算法 简单 理解