automl-演化算法

参考文献


快速搜索

多目标

  • Dpp-net: Device-aware progressive search for pareto-optimal neural architectures—多目标,进化算法,基于层次的搜索空间
  • Efficient Multi-objective Neural Architecture Search via Lamarckian Evolution | [ICLR 2019]
  • NSGA-Net: Neural Architecture Search using Multi-Objective Genetic Algorithm
    –又名:《a multi-objective genetic algorithm for neural architecture search》
    论文笔记:NSGA-Net: Neural Architecture Search using Multi-Objective Genetic Algorithm
    源码地址
  • Multi-objective reinforced evolution in mobile neural architecture search(2019)—强化于进化学习结合,多目标,NSGA-II算法

进化/演化算法简介

基本概念

选择

在进化算法中存在两个阶段的选择。

  • 抽样:第一次是参与进化操作的个体的选择,常被称为“抽样”。这个阶段的选择可以是基于个体适应度的、也可以是完全随机地选择交配个体。一旦个体被选中,那么它们就会参与交叉、变异等进化操作。未被选中的个体不会参与到进化操作中。

  • 重插入:第二次是常被称为“重插入”或“环境选择”的选择,它是指在个体经过交叉、变异等进化操作所形成的子代(或称“育种个体”)后用某种方法来保留到下一代从而形成新一代种群的过程。

  • 但很多时候这两次选择之中的某一次经常会在算法描述中被省略掉,这并不意味着只有一次选择,本质上依旧是存在两次选择(参考:geatpy 第一章:概述)
    在这里插入图片描述
    左图是经典的遗传算法流程图,可以看到它里面只出现了一次选择。实际上,它在重组和变异得到育种个体之后,无条件地代替了父代个体而形成新一代种群,这本质上也是一次选择,只是在选择中把父代所有个体都淘汰掉了。
    这种做法也有一定的弊端:收敛速度较慢。因此有不少加入了“精英保留”的改进型遗传算法,比如把育种种群的绝大部分个体(小于全部)代替父代中等数量的非最优个体而得到新一代种群;另外还有把父代个体和育种个体合并,在统一的、相同的环境下进行择优选择一半个体得到新一代种群;差分进化里面的一种经典做法是按照个体的索引顺序,每个育种个体只与其相同位置上的父代个体进行优胜劣汰保留其中一个,从而得到新一代种群。

分类

进化算法包括遗传算法、遗传规划/编程、进化策略等。
1、遗传算法 Genetic Algorithm,GA

2、进化规划 Evolutionary Programming,EP (ps:不知与遗传规划有何区别?)

3、遗传规划 Genetic Programming,GP

4、进化策略 Evolution Strategy, ES

5、差分进化算法

6、多种群协同进化

7、免疫算法(免疫遗传算法)

8、粒子群算法.
粒子群优化算法(Particle Swarm Optimization)
本人的另一篇博客:automl-演化算法-粒子群算法

9、鱼群算法

虽然这些概念的内涵有一定的差别,它们有各自不同的侧重点,各自有不同的生物进化背景,各自强调了生物进化过程中的不同特性,但本质上都基于进化思想的,都能产生鲁棒性较强的计算机算法,适应面较广,因此又称它们为进化算法或进化计算。

遗传算法和遗传编程有什么不同?

https://cloud.tencent.com/developer/ask/117391
遗传编程和遗传算法非常相似。它们都被用来通过比较潜在候选人群体中的每个候选人在多代人中的适应度来演变问题的答案。

每一代人都可以通过随机改变(突变)或交换其他候选人的部分(交叉)来找到新候选人。最不“适合”的候选人被从人口中移除。

1、结构差异
它们之间的主要区别是算法/程序的表示。

  • 遗传算法被表示为动作和值的编码列表,通常是一个字符串。例如:
1+x*3-5*6  #这里将其看作一个字符串,而不是一个运算

必须为此编码编写解析器,即将字符串映射到实际的意义,例如将其转换为函数。由此产生的功能可能如下所示:

function(x) { return 1 * x * 3 - 5 * 6; }

解析器还需要知道如何处理无效状态,因为变异和交叉操作不关心算法的语义,会产生无效编码,例如可以产生下列字符串:1+/3-2*。需要决定处理这些无效状态的方法。

  • 遗传程序被表示为行动和值,通常是一个嵌套的数据结构的树结构。下面是一个例子,用一棵树来说明:
   -
   /     \
  *       *
 / \     / \
1   *   5   6
   / \
  x   3

解析器也必须为此编码编写,但遗传编程通常不会产生无效状态,因为变异和交叉操作在树的结构中起作用。

2、实际差异

  • 遗传算法
    本质上有一个固定的长度,这意味着所产生的功能有限的复杂性
    通常会产生无效状态,因此需要以非破坏性方式处理这些状态
    通常依赖于运算符优先级(例如,在我们的例子中,乘法发生在减法之前),这可以被看作是一种限制

  • 遗传程序
    本质上具有可变长度,这意味着它们更加灵活,但往往复杂度增加
    很少产生无效状态,通常可以丢弃这些状态
    使用显式结构来完全避免运算符的优先级

遗传算法 差分进化算法 粒子群优化算法区别

https://blog.csdn.net/try_again_later/article/details/79086117?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

资源

学习资源

莫烦python 神经进化
NEAT-Python NEAT算法的python库

遗传算法库

- Pyvolution: 非常模块化且非常可扩展的进化算法框架,具有完整的文档, Apache License 2.0
- Pyevolve
- PyRobot: 开源的演化算法(GA + GP)模块
- PonyGEa 是GE的一个小型,单一源文件实现,具有交互式图形演示应用程序, GNU GPL v3
- inspyred: 生物启发式计算,包括进化计算,群体智能和神经网络, GNU GPL v3
- DRP: 定向Ruby编程,遗传算法和语法进化库, GNU GPL
- gplearn :遗传规划方面的一个通用包,支持自定义适应度函数
链接:https://www.zhihu.com/question/49098839/answer/406902825
发布了180 篇原创文章 · 获赞 309 · 访问量 27万+

猜你喜欢

转载自blog.csdn.net/xys430381_1/article/details/103619870