对遗传算法理解

来源:互联网 发布:mac删除windows后内存 编辑:程序博客网 时间:2024/06/02 19:43

        第一篇博客好紧张,希望自己能坚持下去。

        最近看了一篇论文用遗传算法解决出行目的的识别问题,于是了解了一下遗传算法的基本原理,觉得自己找到的资料都是零零散散的,有的好理解有的不好理解,有的全面有的不全面,希望能比较全面又通俗的来描述这个算法,如果有人看到这篇觉得有帮助我也会很高兴,同时我的理解有错误的地方也希望能有人指正。


        遗传算法是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。(以上概念来自百度百科。)

        一个种群里面有好的基因有坏的基因,基因组成染色体,染色体之间通过交换基因来产生新的染色体,染色体自身也可以通过基因突变产生新的染色体。在环境的影响下,逐渐地坏的基因会被淘汰掉,留下好的基因,好的染色体通过交换基因产生新染色体的时候新的染色体是好的或者更好地几率是非常大的,虽然不排除可能会出现不如父染色体的子染色体的情况,但在“优胜劣汰”的规则下,差的也会被淘汰的,留下的是越来越好的。这样一直不断地进化,种群就会越来越适应环境。

        下面说说这个生物进化论是怎么表现在遗传算法上面的。假设一个问题的解是由2个整数a、b组成,a和b都是1到100之间的整数,那么一组解(a1,b1)就是一条染色体要表达的内容,染色体上的基因是什么?对于问题可能的解,会先进行编码,常用的编码方式是二进制编码,编码完染色体就是由0和1组成的了,0和1就是基因。种群是什么?基本遗传算法的种群规模是自己设定的,不宜太小也不宜太大,根据不同的实际情况设置。a和b的组合有100×100种情况,假如我们自己设定种群的规模大小为10的话,那就随机从这100×100个可能的解中选出10个,那这10个可能解就组成了初始种群。

        要怎样评价一个可能解是不是好的解呢?就需要适应度评价了,由适应度评价函数来给出一个值来评价解的好坏。每一个种群中的个体都有一个适应度值,接下来要做的就是选择合适的个体让它遗传下去,选择的方式常用的就是“轮盘赌法”了。和掷飞镖一样,轮盘上代表不同候选解的扇形大小不一样,理论上适应度值高的扇形面积越大,当投掷飞镖时,面积越大的扇形越有可能被投掷中。种群中有10个个体,那么就投掷10次,每一次投掷得到的结果就是选择的结果,最后得到的10个个体中有重复的个体的可能性很大,有些适应值太低的就被淘汰了,被适应值高的重复个体替换了。这一步结果就增加了优秀基因的数量,减少了差的基因的数量。

        交叉和变异的目的是提高种群的生物多样性,通过交换基因或是基因的变异有可能出现更好的个体。交叉的方法比较常用的就是单点交叉,比如一个个体的染色体编码是110111,另一个个体的染色体编码是001110,在1到5中选取一个随机数假如是4,那么就从第4位将两个染色体分开分别是1101  11和0011  10,然后将后面的部分交换得到两个新的染色体分别为110110和001111。变异是指某一位上的基因发生变化,例如染色体编码是110110,在1到6中选取一个随机数,假如是3,那么就将第三位“0”替换掉,因为是二进制编码,所以将“0”替换为“1”,然后染色体就变成了111110。交叉和变异并不是针对于种群中的全部个体的,有一个比例的存在,如果交叉率为60%,那么种群中只有百分之六十的个体要进行交叉这个工作,一般来说交叉率是在60%到95%,变异率在0.001%到0.01%。

        结束条件一般有两种,一是规定一个循环的次数,到次数之后自动停止,二是最优解在数代都没有过变化,可以认为那就是最优解。

        整个算法是这样一个过程

        



0 0
原创粉丝点击