`
russelltao
  • 浏览: 157472 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

对遗传算法的解读

 
阅读更多

当无法穷举遍历出所有的解集时,智能算法就登场了。

好像术语太多了,举个例子吧。六度空间理论说,你和任何一个陌生人,只要通过六个人就可以认识。比如,你认识A,A认识B,B认识C,等等,最多中间通过六个朋友,你就可以找到那位陌生人。这个神奇的理论是Stanley Milgram在1967年提出的,现在我们讨论如何实现它。假定我们掌握了所有的人际关系网络,现在突然想看看,自己能通过最少几个人,可以认识到奥巴马呢?已经可以想见,这几乎无法穷举,人口基数太大了,而且每个人的社会关系都有至少几百人,整个关系网想穷举不可能,即使能穷举出所有的网络关系,那么在这段时间内还不断的有人死亡有人出生呢。但只有找出所有的社会关系,才能知道"最少"通过几个人可以认识到奥巴马,可是其实我们想知道的只是,如何能在几小时或者几天内,以尽量少的中间人数量找到这条关系路径。需要的是时效的平衡,智能算法就是用于解决类似的问题。

复杂的问题,海量的数据,或者对求解时间上的限制,常常会使人们不得不选择一种智能算法去求解近似最优解,像模拟退火、神经网络、蚁群算法、粒子群算法、遗传算法等。简单的了解了下这几种常见的求近似最优解的智能算法后,我对遗传算法最感兴趣,回顾下最近对它的一些学习和理解。

顾名思义,遗传算法的灵感来自于达尔文的进化论。物竞天择,适者生存,遗传算法就是基于这个思想来设计的,所以,它一定是通过模拟一个种群的进化往下进行,这样,遗传算法的关注点就不是个体了,最关心的就是种族的进化方向。抽象来说,就是在部分解空间中,不断进化取得更加优秀的解空间,从而找到近似最优解。

可能不太好理解,还是用上面的例子来说明吧。现在还是要找到你和奥巴马之间的最近关系网络,首先都认识到,获得所有你到奥巴马的关系网络是不现实的,偶尔知道一个,比如通过一千个中间人才能认识到。甚至获取一个这样的关系一下也想不到,没关系,那我们也找出一个“不完整的”解空间吧作为种族的第一代吧。比如你认识的所有人,或者你所在学校或者公司对美国有好友的人,或者奥巴马的所有中国朋友,第一代种族当然越有用,经过N代后的进化越优。在第一代向后进化时,我们使之向好的方向进化下去,最终可能会有许多你需要的关系网络,你从中找出最好的即可。

说到这里,就涉及到了,什么才是好的进化方向呢?怎么解读“物竞天择,适者生存”?首先是“天择”,天就是算法设计者了,你要选择出某一代解空间里,最接近最优解的那部分。所以,对每个个体进行评价,根据评价结果来排名是必不可少的。每个个体怎样成长不需要关注,但是一个好的评价函数会直接影响算法的效率。比如继续上面这个例子,如果把你的所有好友中随机取出100个,按照谁最可能认识奥巴马来设计一个评价函数,比如,有海外经历的、有博士学位以上的、有从政经历的返回较高分,分别评价每位好友后排名。那么这个解空间里,了解了每个个体的适应度,你才能继续选择。

再看“物竞”,就是每个个体之间,如何进化出下一代。比如,每双父母会有一个儿子,那么这个儿子所有的染色体中,一部分来自于父亲,其余的来自于母亲,应用到算法中就是,对于这一代中没有淘汰的解中间,随机抽取两个解,把每个解的染色体中任何组合后产生一个儿子。又有些抽像了,再举上面的例子,我们先看有完整解空间的情况。抽出两个解,你->A->B->C->奥巴马,你->E->B->G->F->奥巴马,那么交叉后,可能得到的下一代为:你->E->B->C->奥巴马。如果还没有得到完整的解空间,比如你的两个适应度最高的好友A,B,他们的各自好友中,取出有交集或者最有可能有交集的一位最为下一代。这一步叫做交叉选择,对特定问题,好的交叉方法很重要,如果想设计更加通用的遗传算法,则可能希望把解空间的个体分解为染色体越发的简单,交叉也是如此。

只是交叉选择还会存在风险,因为你的评价函数未必是没有偏差的。完全有可能你认识解空间中一个解要被淘汰了,或者两个解中取下一代时,按照正常的交叉选择会导致,更有可能的最优解没有被进化到。比如,你的关系网络里有一个朋友的乡下二大爷,曾经救过奥巴马老婆一命,正常的评价函数里,直接把二大爷淘汰了,无论如何进化这条二大爷->奥巴马老婆->奥巴马的关系网络都见不到了。这样,变异就出现了。变异就是,未必按照目前考虑完善的进化法则进行,就像蚁群算法中,总有几个蚂蚁并不按照当前已知的最优路线行进,它们是探险者。所以,在交叉选择时,就要有变异,甚至直接把相对适应度低的关系拿上来进化。

最后看“适者生存”,如果你有了上面的解空间适应度排名,以及如何交叉选择,如何变异,那么你就可以决定,排名前多少名的解有资格进行交叉选择,排名最靠后的多少解,直接淘汰,可以不按照适应度和交叉函数产生多少个变异解,以及可以直接从上代解中间保留下多少排名最靠前的解。这些是经验数据,因为一个解空间,或者一个种族不能过大,过大的话运算量太大,时效性上不可接受,比如现有的PC机二十年计算出来时小奥却已经驾鹤了那就没有任何价值了。所以限制了解空间的大小后,比如,每代只考虑100个关系,从排名前80的关系中去产生交叉选择后代等等。

进化到什么时候结束呢?可以设定为最多计算一周时间,或者最多进化100万代,或者找到最少通过四个人就认识奥巴马了就停止。这样完整的遗传算法就呈现在大家眼前了。遗传算法的好处就是关注点在解空间上,对解的个体特征不必太关注,通用性高。并且在没有得到所需要的满足自己的解时,任何时刻都可以得到比初始时更好的解。到问题的规模无法控制时,这个特性太重要了。而且遗传算法利于并行求解,这也是个非常重要的特性,对分布式计算很有意义。其实,单CPU计算机都是串行执行命令,它的运算速度远大于毫秒级的人脑,但是人脑的并行计算却在很多场合中更有效,人工神经网络这个算法也由此产生,能够并行运算确实是很重要的。

现在还有多种群竞争遗传算法,就是初始解空间不只一个,产生后代时每个种群互相影响。具体问题具体分析吧。

总之,遗传算法就是由初始解空间,适应度的评价,选择哪些个体,如何交叉选择,如何变异,如何停止算法的执行这些要素组成。很多复杂问题都能被它解决。最近我玩QQ七雄争霸,对里面的战略战用python+tkinter简单的模拟了下,用遗传算法计算出较好的阵形。比如,骑兵的特点是攻击力强,血少,移动快,弓箭手射程远,攻击力低,枪兵射程近,血厚,等等。在兵力固定时,通过遗传算法不断的进化,只是通过变幻阵形往往得出相同的战场规则下,结果非常优秀的阵形。比如,我选择80%的种子产生50%的子孙,40%的阵形直接保存,10%的阵形变异,同等兵力时,可以只死一半兵全灭敌人。

分享到:
评论

相关推荐

    matlab遗传算法优化神经网络

    #### 题目解读:MATLAB中遗传算法优化神经网络的应用 在机器学习领域,神经网络作为一种强大的工具被广泛应用于各种预测、分类和识别任务中。然而,神经网络的权重初始化和参数优化是其性能的关键因素之一,不当的...

    数学建模多种遗传算法优化论文与代码

    在数学建模领域,遗传算法(Genetic Algorithms, GA)是一种广泛应用的全局优化技术,源自生物进化论中的自然选择和遗传原理。这种算法通过模拟种群的进化过程,寻找问题的最优解。本资料包“数学建模多种遗传算法...

    三个遗传算法matlab程序实例_matlab_遗传算法_

    以下是对标题和描述中提到的三个遗传算法MATLAB程序实例的详细解读。 首先,遗传算法的基本流程包括初始化种群、适应度函数计算、选择操作、交叉操作和变异操作,这些步骤在每个迭代过程中循环执行,直到满足停止...

    Geatpy进化算法遗传算法.pdf

    根据提供的文件内容,以下是对文档知识点的详细解读: ### 进化算法概述 进化算法(Evolutionary Algorithm, EA)是一类模拟自然界生物进化过程的随机搜索算法。该算法能有效处理高度复杂和非线性的优化问题,如NP...

    MATLAB的遗传算法报告

    【MATLAB遗传算法报告】 本报告主要探讨了如何利用MATLAB中的遗传算法(Genetic Algorithm,GA)解决函数最大值的优化问题。遗传算法是一种基于自然选择和遗传机制的全局优化方法,它模拟生物进化过程,通过选择、...

    遗传算法.rar_算法解读与代码

    本资料“遗传算法.rar”涵盖了算法的解读和实现代码,是学习和理解遗传算法的宝贵资源。 遗传算法的核心思想来源于达尔文的自然选择理论,通过模拟种群的进化过程,包括选择、交叉和变异等操作,来逐步接近最优解。...

    遗传算法路径规划MATLAB代码.zip_matlab_matlab popinit_规划遗传算法_路径规划仿真

    遗传算法是一种基于生物进化原理的优化方法,常用于解决复杂问题的全局寻优,如路径规划问题。在MATLAB环境中,遗传算法可以被灵活地应用和实现。本压缩包提供的"遗传算法路径规划MATLAB代码"是针对路径规划问题的一...

    物流中心选址遗传算法

    下面将详细介绍遗传算法的基本原理、在本案例中的应用以及代码解读。 ### 遗传算法基础 遗传算法(Genetic Algorithm, GA)是一种模拟自然界生物进化过程的搜索优化算法。它通过编码、选择、交叉和变异等操作来...

    基于遗传算法的任务分配与调度

    - **杂交算子(K./.L)**:对标准遗传算法中的交叉算子进行了改进,增强了解之间的多样性。 - **内部杂交算子(K*.L)**:专门设计用于在单一调度内部进行任务交换,有助于局部优化。 - **迁移算子(MNO=P(Q=NR))**:...

    sssd.rar_visual c_电力系统_遗传算法 电_遗传算法 电力_遗传算法电力

    通过对源代码的解读,我们可以深入理解如何将遗传算法的原理与电力系统的实际问题相结合,实现优化求解。具体细节可能涉及电力系统的数学模型、适应度函数设计、遗传算子的实现策略等。 总结,遗传算法在电力系统中...

    遗传算法解决TSP问题源代码

    根据提供的文件信息,我们可以深入探讨遗传算法在解决旅行商问题(Traveling Salesman Problem, TSP)中的应用。下面将详细介绍遗传算法的基本概念、TSP问题的定义以及如何利用遗传算法来解决这类问题。 ### 遗传...

    遗传算法c++源程序

    同时,对于初学者,这是一个很好的实践平台,可以加深对遗传算法的理解和C++编程技巧的掌握。 总之,遗传算法利用了生物进化的基本原理,通过C++编程实现,为解决复杂优化问题提供了有力工具。理解并掌握遗传算法的...

    浮点数编码的遗传算法及其应用

    ### 浮点数编码的遗传算法及其应用 #### 摘要解读与核心知识点提炼 本文探讨了一种针对多极值函数全局优化问题的遗传算法(Genetic Algorithm, GA),该算法采用十进制浮点数编码技术。通过综合设计选择、交叉与...

    遗传算法的FPGA硬件实现.pdf

    通过硬件化实现遗传算法的这些研究成果,为算法在实时性和高速度系统中的应用奠定了基础,特别适用于对时间要求高的场合,如实时控制系统、在线优化问题等。 文档提到的关键词“现场可编程门阵列(FPGA)”、“流水...

    基于python实现的遗传算法.rar

    以下是对这个压缩包文件内容的详细解读。 首先,让我们了解遗传算法的基本原理。遗传算法受到生物进化论的启发,包括选择、交叉和突变等基本操作。在算法中,一组解(个体)被看作种群,每个解由一组参数(基因)...

    免疫遗传算法

    ### 免疫遗传算法知识点详解 #### 一、免疫遗传算法概述 ...综上所述,免疫遗传算法是一种有效的优化工具,通过对算法原理的理解和实际代码的分析,我们可以更好地掌握其使用方法并应用于实际问题中。

    遗传算法Matlab源代码

    根据提供的文件信息,本文将对“遗传算法Matlab源代码”进行详细解析,重点解读遗传算法的基本原理、Matlab实现中的关键参数设置及其在优化问题中的应用。 ### 遗传算法简介 遗传算法(Genetic Algorithm, GA)是...

    遗传算法求解背包问题

    ### 遗传算法求解背包问题:深入解析与实现 #### 一、背包问题概述与挑战 背包问题,特别是0-1背包问题,属于典型的组合优化问题,被归类于NP完全问题,这意味着在多项式时间内找到精确解是极其困难的。然而,通过...

Global site tag (gtag.js) - Google Analytics