遗传算法 GA

引言

编程中很多算法都是基于一些严谨的理论来作为基础,从而进行编程实现,解决问题。但我认为遗传算法是比较特殊的一种。首先,它是基于生物进化理论来的,理论虽然已被证明,但总归觉得有一些概率,可以说是运气在里面。其实,往往使用遗传算法去解决问题时,和常规的直面问题,制定严谨的执行步骤去解决问题不同,遗传算法总是将问题往这个模型上靠,制定简单的进化规则,然后运行起来后,它就按照这些既定的简单理论开始自己进化,从而得到一个往往不是最优解的答案,但往往用它来解决一些问题,你总归是会得到一个可用的答案。

什么是遗传算法

如果要讲遗传算法(Genetic Algorithm),那要从生物进化理论来讲。一个种群,起初是由一定规模的生物个体组成,在自然界竞争中优胜劣汰,从而一代一代进化下来,能够成功进化到下一代的种群,肯定有一个帮它克服大自然,良好地适应于恶劣环境的特点。比如,人类进化过程中,刚开始都不会直立行走,但某一些第一个尝试直立行走的祖先当中,他们解放了双手,进行了更有效的生产劳动,从而得到了更多的生产资源,存活了下来,而那些未能尝试学习直立行走的部分,要么被淘汰,要么没有进化,种群没能良好的适应环境。而这群尝试直立行走的种群,得到了更多的生存机会,进一步进化过程中,那些强壮的个体,某一方面能力出众的个体,适应环境更好,得到了更多繁衍生息后代的机会,就这样一代一代进化成我们现在的样子。如果假设我们现在的状态为最佳状态(当然不是),第一批猴子为人类初始状态,那么人类进化的过程可以看作是人类进化过程中的一个解决方案,按照这条路走,总归会达到现在的样子,当然可能有更多更好的方法,但至少这种方法可以达到现在状态。
   我们知道,人类的特性控制是由基因控制的,每一个性状都是一对基因的体现,基因也在不段的繁衍中,进行着各种杂交和突变,这才给了一些良好基因生存的机会,那些被证明杂交过程中留下来的基因,大多是更能适应环境的基因,而突变也给了基因一些闪亮的机会,并且最终突显出来。
   根据上面的描述,不难看出,遗传过程中的几个重要步骤:

  • 一个种群
  • 种群中进行繁衍的亲本
  • 基因杂交
  • 基因突变

那这些与我们的编程算法有什么关系呢?
很多种实际问题,其实它们的解可以类比为基因的排序,比如一个机器人去走迷宫,从入口找到出口,那么它的街轨迹,就是找到出口的解,即类似于,上下左右,四个方向,左->上->左->右->下,这个问题的解就是类似于这样的一个序列,我们可以把它看作是一个染色体,每一步可以看作是一对基因,如果我们随机给出一个种群,种群中每个个体都是一套染色体,每个染色体就包含这样一个基因序列,即给出一组随机的基因序列,那我们怎么去解决这个问题呢:

  • 先生产出一个群体,里面个体的基因序列随机;
  • 让每个基因组(即机器人走迷宫的步骤),去尝试走迷宫,看看它能走
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值