本文要点:

  • 演化算法;
  • 拼接交叉;
  • 重复基因;
  • 改组突变;
  • 扰动突变。

演化算法有许多,并且大多数算法都利用演化算子,例如适应度函数、选择、精英、交叉和突变。根据你选择的演化算法,这些演化算子的实现会有所不同。

  • 遗传算法(Genetic Algorithm,GA);
  • 遗传编程(Genetic Programming,GP);
  • 基于人的遗传算法(Human Based Genetic Algorithm,HBGA);
  • 粒子群优化(Particle Swarm Optimization,PSO);
  • 蚁群优化(Ant Colony Optimization,ACO)。

    这些算法具有许多共性:每个算法都是基于种群的,它们都处理潜在解的种群,必须计分。也就是说,在这些算法中一定会有计分函数。
    一些算法使用竞争种群,如遗传编程、遗传算法和基于人的遗传算法使用竞争种群。因此,它们将利用精英、交叉和突变。配置设置决定你使用这些算法的程度。此外,种群规模通常是固定的。常用的是:
  • 种群规模:1 000;
  • 精英计数:3;(我们将始终把前3个个体复制到下一代)
  • 交叉百分比:80%;(80%是来自两个选定亲本的参数的组合)
  • 突变百分比:20%。(20%是只有一个亲本的副本,带有少量随机的参数变化)

解编码

大多数演化算法要求潜在解是定长数组,每个解必须具有与其他解相同的数组长度。尽管看起来限制很大,但遗传算法遵循该准则。使用演化算法最具挑战性的方面之一,是将解表示为固定长度的数组。
确定数组中的数据性质至关重要,比如是数值还是分类类型。
如果要使用可变长结构作为解,那么就必须设计自己的交叉和突变算子。

交叉

在演化算法中,交叉允许有性繁殖。
大多数演化算法都允许任何个体与其他任何个体进行交叉,因为你所演化的解没有性别。换言之,交叉中不存在父本和母本。因此,不必选择雄性和雌性进行交叉。
尽管大多数交叉实现都有两个亲本对象,但这种设置并不是严格的要求。在David Snell(2013)的文章Genetic Algorithms—Useful, Fun and Easy中,我第一次看到使用两个以上亲本的算法。

拼接交叉

数值的解数组和分类值的解数组都使用拼接交叉。它的工作方式是取两个亲本并生两个孩子 [1]。根据两个剪切点拆分亲本对象,这个拆分为每个亲本对象生成3个子数组,随后将它们拼接在一起以生成两个孩子。每个孩子从一个亲本那里得到一个子数组,从另一个亲本那里得到两个子数组。

sub slice_crossover(parent1,parent2,cut_length):offspring1 = alloc(len(parent1))offspring2 = alloc(len(parent1))cutpoint1 = int(random_uniform(len(parent1)-cut_length))cutpoint2 = cutpoint1+cut_lengthfor i from 0 to len(parent1)-1:if (i>=cutpoint1) and (i<cutpoint2):offspring1[i] = parent2[i]offspring2[i] = parent1[i]for i from 0 to len(parent1)-1:if (i<cutpoint1) or (i>=cutpoint2):offspring1[i]=parent1[i]offspring2[i]=parent2[i]return [offspring1,offspring2]

无重复拼接交叉

执行交叉操作时不允许在孩子中有任何重复数据,这可能很重要。但是,这个考虑不适用于改组突变算子。因为改组突变算子用于单个亲本,所以该算子不会引入任何原来不存在的重复。

sub find_unused(source,used):for x in source:used[x] = 1return xreturn -1
sub slice_crossover_nr(parent1,parent2,cut_length):offspring1 = alloc(len(parent1))offspring2 = alloc(len(parent1))used1 = {}used2 = {}cutpoint1 = int(random_uniform(len(parent1)-cut_length))cutpoint2 = cutpoint1+cut_lengthfor i from 0 to len(parent1)-1:if(i>=cutpoint1) and (i<cutpoint2):offspring1[i] = parent2[i]offspring2[i] = parent1[i]used[offspring1[i]]=1used[offspring2[i]]=1for i from 0 to len(parent1)-1:if(i<cutpoint1) or (i>=cutpoint2):offspring1[i] = find_unused(parent1,used1)offspring2[i] = find_unused(parent2,used2)return [offspring1,offspring2]

其他突变和交叉策略

对于具有不同长度的解数组,突变往往是较容易的操作。由于突变是无性的,因此你不必担心如何管理两个不同长度的解。要实现突变,你只需要设计突变算子,使其可以处理可变长度的数组。
在处理不同的解数组长度时,交叉变得更加复杂。在大小为10的数组与大小为10 000的另一种解之间进行交叉时,要产生可行的后代数组可能非常困难。生物学也有这个问题,例如,在鲸和浮游生物之间繁殖可能的后代也是困难的。
NEAT、HyperNEAT和HyperNEAT ES都是可变长度模型的示例,它们仍然可以执行交叉操作。NEAT变体使用物种形成来完成交叉。此外,它们采用一个创新表来允许在不同长度的解数组的公共部分之间进行映射。遗传编程利用树来编码解,最终,剪切和嫁接树的一些部分,使交叉得以完成 。

突变

在演化算法中,突变是无性繁殖,也就是说,突变是仅基于一个亲本的特征来创造一个孩子的方式。
突变使潜在解可以在下一代中产生一个稍微优化的孩子。由于潜在解可能已经是最优的,所以它只能从亲本那里得到一点优化。这些对孩子的改变都是突变,它们通常是随机的。这不同于自然界,即现有生物发生突变的地方。对于演化的生物,突变只是繁殖的一种形式。
交叉和突变都是演化算法的重要组成部分。交叉重组了最优解的特征,但是,交叉不能带来新的特征。突变是将全新特征引入潜在解的过程。交叉和突变一起使用,可以发现新特征,然后将其制作成新的解。

改组突变

改组突变既可用于分类值的解数组,也可用于数值的解数组。尽管改组突变具有足够的灵活性,可以用于任何一种求解数组类型,但很少用于数值的解数组,因为改组突变只是改变解数组的顺序,而不会更改数组中的实际值。

sub shuffle_mutate(parent,flips):offspring = clone(parent)for i from 1 to flips:index1 = int(random_uniform(0,len(parent)-1))index2 = -1while index2 ==-1 or index1 == index2: index2 = int(random_uniform(0,len(parent)-1))temp = offspring[index]offspring[index1]=offspring[index2]offspring[index2]=temp
return offspring    

我们只需选择两个元素并将它们互换即可。但是,我们必须确保两个索引不相同。如果我们不执行这种检查,则孩子常常会是亲本的精确复制。因为复制不是突变的目的,所以应避免交换相同的索引。

扰动突变

扰动突变是通过随机增加或减少数组中的每个数值来实现的。扰动突变与数值的解数组能很好地兼容,但与分类值的解数组完全不兼容。
比如【1.0,2.0,3.0,4.0】可能会变成【1.0421,2.0213,3.2231,4.0923】为每个数字添加了随机数量的噪声,因为来自亲本的基本序列仍然很明显。每个数字以相对较小的随机量增加或减少.

sub perturb_mutate(parent,perturb_amount):child = clone(parent)for i from 0 to len(parent)-1:value = parent[i]delta = value*random_uniform(-perturb_amount,perturb_amount)child[i] = child[i]_deltareturn child

首先,将亲本复制到孩子。然后,将孩子中的每个元素突变一个量,即用当前值乘以一个随机百分比,该百分比在−perturb_amount~perturb_amount的范围。确保考虑到数组的当前值,以免应用不成比例的值,如太大或太小。
扰动突变有许多不同的实现。其他一些变化包括:

  • 扰动使用一个范围作为训练设置,该范围等于带有标准差的正态分布;
  • 提供扰动每个元素的概率,而不是扰动每个元素;
  • 随机选择一个数组元素并仅扰动该元素。

为什么需要精英

精英是一种配置设置,用于指定应将种群中多少个获得最佳分数的成员直接传递给下一代。精英可防止最佳分数倒退。

尽管世代#100进行了所有有性和无性的生殖,但没有任何一个孩子的得分能超过个体#2的得分。新的种群最高得分是74分。如果从一开始就将个体#2复制到下一代,那么可以防止这种不良的结果,精英就是进行这种复制的动作。

【人工智能算法】受大自然启发的算法之交叉和突变相关推荐

  1. 人工智能算法:卷1基础算法+卷2受大自然启发的算法+卷3深度学习和神经网络电子书

    ISBN:9787115005786 包装:平装 字数:538000 页数:598 版次:7 开本:16开 用纸:胶版纸 正文语种:中文 人工智能算法:卷1基础算法+卷2受大自然启发的算法+卷3深度学 ...

  2. 【人工智能算法】受大自然启发的算法之种群、计分和选择

    本文重点: 种群 精英 计分 选择 选择算法的可伸缩性 理解种群 种群即居住在一个地方的一群特定种类的人或动物.在机器人工智能中,种群是解决问题的一组潜在方法,这些潜在解属于同一种类,因为他们解决相同 ...

  3. 有这样一套AI算法入门书,学习算法不再难

    本系列图书将向读者介绍人工智能领域的各种热门主题.由于人工智能是一个庞大而繁杂的领域,并且其涵盖的内容与日俱增,任何一本书都只可能专注于特定领域,因此本书也无意成为一本巨细靡遗的人工智能教程. 本系列 ...

  4. 寻路机器人单片机程序示例_人工智能: 自动寻路算法实现(D、D*算法)(示例代码)...

    博客转载自:https://blog.csdn.net/kongbu0622/article/details/1871520 据 Drew 所知最短路经算法现在重要的应用有计算机网络路由算法,机器人探 ...

  5. AI:人工智能概念之机器学习中常用算法的思维导图集合(非常经典、建议收藏)之详细攻略

    AI:人工智能概念之机器学习中常用算法的思维导图集合(非常经典.建议收藏)之详细攻略 目录 机器学习算法的思维导图集合 1.ML算法思维图 2.ML算法思维导图 相关文章:ML/DL:关于算法模型的选 ...

  6. a算法TSP旅行商java_A*算法实现旅行商问题(人工智能报告,付代码)

    一. 问题描述 "旅行商问题"常被称为"旅行推销员问题",是指一名推销员要拜访多个地点时,如何找到在拜访每个地点一次后再回到起点的最短路径.规则虽然简单,但在地 ...

  7. 中国人工智能学会通讯——AI时代的若干伦理问题及策略 1.1人工智能时代正在加速到来,算法决策开始兴起...

    很荣幸今天有这个机会跟大家分享我自己对人工智能伦理的一些观察和思考.我今天分享的主题是"人工智能伦理:问题与策略". 1.1人工智能时代正在加速到来,算法决策开始兴起 我们看到,第 ...

  8. 人工智能工程师学习路线/自然语言处理算法工程师

    人工智能工程师学习路线/自然语言处理算法工程师学习路径 人工智能工程师学习路线自然语言处理算法工程师学习路径 1入门级别 1 数据结构 2 算法重点 3python 2进阶阶段 1 机器学习算法 2深 ...

  9. 算法开启的人工智能时代!阿里聚安全算法挑战赛公开报名!

    2017年01月16日 11:28  2180 这一年你有没有遇到过语音识别,图文识别.人脸识别安全,机器人服务员.无人机驾驶等等.在机器学习或者人工智能领域,人们首先会考虑算法的学习方式.在 Alp ...

最新文章

  1. Vue.js子组件向父组件通信
  2. 对英文文档中的单词与词组进行频率统计
  3. 同样的代码,conda无法运行,命令行却可以运行
  4. tomcat配置与优化
  5. 制作 docker 镜像
  6. python中random库中shuffle_[宜配屋]听图阁 - 详解Python中打乱列表顺序random.shuffle()的使用方法...
  7. 微信公众号开发系列教程一(调试环境部署续:vs远程调试)
  8. 设计模式之禅之设计模式-状态模式
  9. 【2019杭电多校第一场1009=HDU6586】String(贪心+序列自动机)
  10. 深度学习入门之猫vs狗(超简单)
  11. mysql 5.7版本下载安装
  12. 国际域名转出与ICANN投诉流程(完结篇)
  13. ALLEGRO 任意形状铜皮倒圆角
  14. 电子邮箱怎么填写正确格式?企业邮箱开通格式填写技巧
  15. 微信小程序用户隐私保护指引设置怎么填?
  16. Ol3中Map事件全解析
  17. kotlin 开发android,Kotlin安卓开发环境搭建
  18. 对交换机与路由器的认知
  19. CM和CMTS的概念和信令交互过程
  20. 投影——Drop Shadow

热门文章

  1. 双向板受力特点_单向板与双向板的受力特点
  2. 爬虫之爬取豆瓣排行榜
  3. 雅虎市值_雅虎! 挖掘其内在的吉普赛人
  4. 常用排序之快速排序法
  5. C和C++易出现的低级错误
  6. 中国近日研制成功世界第一台永磁悬浮旋转机械
  7. 计算机专业术语教案,计算机组成原理教案.doc
  8. 【北京迅为】i.MX6ULL终结者内核-Logo 修改使用文档生成 PPM 文件
  9. destoon 自定义新模块模块(手机模块)
  10. 跨账本资产原子互换协议