白话遗传算法(以长颈鹿的进化为例)

首先来看看遗传算法的本质,遗传算法是模拟生物进化的一种全局优化搜索算法,是一种数值求解方法。说几个大家熟悉的搜索的算法吧:
1. 枚举遍历(这也可以算吧- -)
2. 二分查找法(在有序数组中查找某一特定元素的搜索算法)
3. DFS(深度优先搜索,沿着树的深度遍历树的节点)
4. Dijkstra算法(用广度优先搜索解决非负权有向图的单源最短路径问题,算法最终得到一个最短路径树)
5. 等等等等
怎么样?搜索算法咱们也是见的不少了,这个遗传算法又是怎么回事呢?我们先看一下遗传算法的“官话”:

遗传算法将问题的可行解作为种群,每个种群是由一定数目的个体组成,每个个体都由多个基因编码的组合即染色体表示。将种群中个个体进行配对,产生下一代,根据一种评价函数衡量一个个体的最优程度,即适应度。适应度高的个体更有希望生存下来,参与种群的繁衍,进行交叉变异操作

是不是很晕呢
这里写图片描述
让我们以长颈鹿进化的例子来对应一下上述名词。

基本概念

例子:长颈鹿种群的进化算法。目的是为了进化出一个长脖子的种群,每个种群是由一些个体(一些鹿)组成,每只长颈鹿个体都由染色体表示,每个染色体是由多个基因编码的组合表示。
这里写图片描述
种群中的个体进行交配,产生下一代,根据脖子的长度衡量一头长颈鹿吃饱饭的程度,脖子太短吃不到树叶子,脖子太长会抬不起头,只有脖子长度适中才能吃的最饱。这个根据脖子的长短而决定的吃饱饭的程度就叫适应度函数。即适应度值是由脖子长度决定的函数值。

脖子长的个体更有希望生存下来,参与种群的繁衍,进行交配、变异。

算法的流程

遗传算法的流程是这样的:

使用遗传算法搜索最优解,首先要找出要求解的问题,在对可行方案进行编码操作,产生初始种群,找出评价函数,最后进行选择交叉变异

我们再做进一步的解释:
问题:找到更容易吃饱的长颈鹿。
可行方案:例如一头脖子长度刚刚适合的一头鹿。将它编码就是把决定脖子长度的基因表达即染色体信息写成2进制(也可以是其他进制,我们先用最简单的)。我们可以这样编码,一头64cm长脖子的长颈鹿,编码为:100000(64的二进制)
初始种群:上帝之手制造20头一样的初始小鹿,初始染色体100000,也就是脖子64cm长
评价函数:假设评价函数是这样的:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值