当前位置:   article > 正文

元启发式算法之遗传算法与旅行商问题(TSP)_元启发基因算法

元启发基因算法

启发式算法简介

“元启发式算法是相对于最优化算法提出来的,一个问题的最优化算法可以求得该问题的最优解,而元启发式算法是一个基于直观或经验构造的算法,它可以在可接受的花费(指计算时间和空间)下给出问题的一个可行解,并且该可行解与最优解的偏离程度不一定可以事先预计。元启发式算法包括禁忌搜索算法、模拟退火算法、遗传算法、蚁群优化算法、粒子群优化算法、人工鱼群算法、人工蜂群算法、人工神经网络算法等。”--------------------------------------------------------百度百科

大家看到这段话的时候,可能对于元启发式算法的概念还是两眼一抹黑。让我用下面的这个经典问题说明元启发式算法的意义。

NP-hard问题:旅行商最短路径问题

P(Polynomial )问题指的是可在多项式时间内解决的判定问题。而所有的非确定性多项式时间可解的判定问题构成NP(Non-deterministic Polynomial )类问题。显然所有的P问题都是NP问题:既然已经有了能在多项式时间内完成的解法,自然也可以在多项式时间内去验证该问题的解。那么反过来,是不是所有的NP问题也是P问题呢?也即NP=P?这正是我们当今世上的数学七大难题之一的NP完全问题。本文只是在此引入这个概念,不会针对这个问题多做讨论。下面要介绍的旅行商问题(Travelling Salesman Problem) ,是一类NP-hard问题:TSP问题不存在任何一种可以在多项式时间内解决的算法。目前针对该问题的解法可归纳为两大类:

  • 暴力搜索
  • 近似算法
    在这里插入图片描述
    对于TSP问题:假设图中所有节点代表城市,连线代表城市间的道路,为销售员寻找到一条从起点开始经过所有城市最后回到原点的最短路径。
    暴力搜索是一种直接求解的方法,我们只需要穷举所有的路线可能,必定能够将解精确到最优。然后当城市数目较多,路网结构复杂时,这样的方法(O(n!))显然是不经济也不现实的。这时候,能在伪多项式时间内得出近似最优解的算法就派上用场了。前面提到,元启发式算法是相对于最优化算法提出来的。TSP正是一类基于现有的最优化算法很难求解,需要使用像元启发式算法这种在可接受的时间或空间花费下能够给出问题的一个次优解的场景。下文开始切入主题:使用元启发式算法中的遗传算法来求出TSP问题的近似解。

遗传算法

在这里插入图片描述遗传算法(Genetic Algorithm)适用于大规模的组合优化问题(选址问题、排班问题、管理调度、路线优化)等,以及复杂函数求最值、参数优化等,其由John Holland教授于1975年首次提出的,是进化算法的一种。大家都知道,进化的核心是“适者生存”。生物界的物种间本来就存在着个体差异,那些在与环境交互中,有利于物种生存与繁衍的性状基因会在该种群中逐渐蔓延扩散;其中部分基因会发生变异,逐渐形成新的物种,这样的突变性也为生命适应不同的外界环境提供了无限的可能。

重温高中生物

以下内容与图片均总结自人教版高中生物教科书2:《遗传与进化》
在这里插入图片描述
有性生殖的生物在减数分裂形成配子的过程中会进行遗传物质的复制,而碱基互补配对原则会保证DNA复制的准确性,使子代与亲代的遗传信息保持一致。那么为什么还会出现子代与亲代有不同性状的情况呢。
因为:

  • 基因突变(变异)
    人教版的生物教科书上对于基因突变的定义是:DNA分子中发生碱基对的替换、增添和缺失,而引起的基因结构的改变,叫做基因突变。可能是造物主的玩笑,在DNA的复制过程中,还真是偶有类似抄作业抄错句子的情况发生。当然除了其自发产生的错误,也有许多外来的物理(辐射)、化学(亚硝酸)或生物(病毒)因素可能引起基因突变,在此文中也不多赘述。
    在这里插入图片描述

  • 基因重组(交叉)
    在这里插入图片描述在减数分裂前期,一条来自父方一条来自母方的染色体会两两配对形成四分体,其中的非姐妹染色单体之间常常会发生缠绕并交换一部分片段。因此子代的基因片段并不是与亲代百分百一致的,这也正是基因重组的由来。
    正是以上这两者的共同作用才有了今天这个充满生物多样性的繁华世界。

算法实现

根据上面的生物知识,我们了解到遗传算法的核心在于其遗传信息的复制保存以及变异。那么我们首先需要想一种方法来使用代码表征DNA。常用的方式是使用0-1编码来表示那些碱基对。有了这种电脑能理解的遗传物质后,我们需要做的就是取一部分父代的0-1编码与一部分母代的0-1编码组成我们的子代。至于当中涉及到的交叉以及变异也只需简单地把部分0与1的值互换即可。在子代产生后,我们还需要加一个关键的步骤就大功告成。那就是设置用来模仿自然选择(环境压力)的适应度函数。我们把那些不太符合目标需求的子代淘汰,这样几代、几十代的演化过后,最终形成近似我们想要的生物群落。
那么想要用遗传算法解决TSP也很简单。假如有10个城市,我们可以分别标记为0-9号,那么种群中某个个体DNA的形式可以是:
3-2-5-1-6-9-4-8-7-0来代表其先后经过的城市。
适应度函数可以用这些城市之间的距离之和来表示,每次我们都优先选取总距离较短的子体即可。
代码以后再补上来吧

有趣的应用

北京奥运会鸟巢的结构就是用遗传算法迭代演化出来的。
在这里插入图片描述还可以用形状各异的不同颜色的小三角形来迭代出我们想要的图形。
在这里插入图片描述

总结

遗传算法真的是一种很美的算法。其巧妙地利用了自然界中生物进化现象,在使每一子代朝着目标随机迭代的同时,还保留了突变的可能以跳出局部最优解。简朴的思想,让初学者也能很快地明白它的美妙之处;看上去暴力的迭代过程,却往往能给使用者带来惊喜。我们知道,多数自然过程都是熵增的,然而人类凭借不断的进化与学习得以慢慢抵抗这个趋势,为混乱的世界带来秩序。如果说DNA是人类的源代码,蛋白质则将我们编译过后的样子展现给了这个多姿多彩的世界。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/53078?site
推荐阅读
相关标签
  

闽ICP备14008679号