文章目录

  • 一、简介
  • 二、算法流程
  • 三、参数
  • 四、代码
  • 五、参考资料

一、简介

遗传算法(Genetic Algorithm, GA)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。

遗传算法以一种群体中的所有个体为对象,并利用随机化技术指导对一个被编码的参数空间进行高效搜索。其中,选择、交叉和变异构成了遗传算法的遗传操作;参数编码、初始群体的设定、适应度函数的设计、遗传操作设计、控制参数设定五个要素组成了遗传算法的核心内容。

二、算法流程

遗传算法和自然选择的过程类似,在种群里面进行繁衍,产生的下一代加入种群,并根据一定的条件淘汰掉部分个体,保持种群个数一定,然后继续下一个循环,当循环次数达到界限或者种群中出现满足要求的个体,停止循环。

遗传算法的过程如下:

我们以数据集的特征选择为例,讲一下里面的一些专有名词。

  • 参数编码:一般二进制编码用的稍微多一些,0表示特征没有被选择,1表示特征被选择,一个解决方案会形成一个1∗n1*n1∗n的数组,其中n是数据集的特征数;

  • 适应度函数(fitness function):用于评价当前个体(特征选择的方案)对环境的适应度(性能),用于在繁殖之后淘汰掉部分个体;

  • 选择操作:从种群中选择用于繁衍的双亲,选择的方法是轮盘赌(Roulette Wheel Selection)或者轮盘赌的变体。

  • 交叉(crossover)操作:类似于染色体交换基因,如果使用二进制编码,会有三种操作模式:(1)单点交叉(single):比如用于繁衍的双亲是A和B,并且数据集有20个特征,那么在数组里随机选择一个断点,A的前半段和B的后半段组成下一代C,A的后半段和B的前半段组成下一代D;(2)多点交叉:和单点交叉类似,多个断点;(3)均匀交叉(也称一致交叉,uniform):两个配对个体的每个基因座上的基因都以相同的交叉概率进行交换,从而形成两个新个体;

  • 变异(mutation)操作:以特征选择为例,20个特征会形成一个1∗n1*n1∗n的数组,部分1的突变为0,部分0的突变为1;

百度百科对轮盘赌(Roulette Wheel Selection)的解释比较清晰,示例如下:

若产生随机数为0.81,则6号个体被选中。

之前给同学讲这个算法的时候,讲了一个故事辅助理解。羊群共有30只羊(初始化个体数pop_size),40只羊交配产生20只羊(40*0.5,cross−rate∗pop−sizecross_-rate*pop_-sizecross−​rate∗pop−​size),新产生的20只羊,每个都有可能突变(突变率),最后的60只羊根据适者生存,保留40只,重复这个过程就能选出40只适应能力特别强的羊。

三、参数

遗传算法里面一般有以下参数:

  • 迭代次数:算法结束的标准;
  • 初始种群个体个数:有多少个方案可供选择。如果太多,算法运行时间比较长;太少不一定能选出最好的结果;
  • 交叉率:用于确定下一代的个数,cross−rate∗pop−size=num−new−solutioncross_-rate*pop_-size=num_-new_-solutioncross−​rate∗pop−​size=num−​new−​solution;
  • 突变率:主要是确定下一代个体是否产生突变,一般随机产生一个0-1之间的数和突变率比较,决定是否突变;

总结:遗传算法好坏初始种群的选择有很大关系,不一定能够找到最佳方案。

四、代码

代码可以看这篇博客遗传算法详解 附python代码实现

这篇博客在产生后代后,筛选种群并不是完全按照适应度大小选择的,为了陷入局部最优,按照“适应度越高,被选择的机会越高,而适应度低的,被选择的机会就低”的原则进行了折中处理:

def select(pop, fitness):    # nature selection wrt pop's fitnessidx = np.random.choice(np.arange(POP_SIZE), size=POP_SIZE, replace=True,p=(fitness)/(fitness.sum()) )return pop[idx]

这个对我的启发比较大。

五、参考资料

【算法】超详细的遗传算法(Genetic Algorithm)解析
百度百科–Roulette Wheel Selection
百度百科–遗传算法
利用 Python 实现 遗传算法(GeneticAlgorithm)

Genetic Algorithm遗传算法整理相关推荐

  1. 遗传算法matlab_智能算法之Genetic Algorithm遗传算法

    智能算法之Genetic Algorithm遗传算法 前言:本文主要围绕 Matlab 的实现展开,Java版本以及Python版本参考文章最后的源码地址,MatLab和python实现大致相同,Ja ...

  2. Genetic Algorithm遗传算法,两个代码实现例子

    通过了解遗传算法的概念,应用和代码实现,来充分理解和学习遗传算法.本文文末包含两个不同的通俗易懂的例子,分别使用java和python实现. 什么是遗传算法? 可参考这篇文章:link 应用:List ...

  3. 【AI】Genetic Algorithm 遗传算法

    GA遗传算法 遗传算法概述 基因互换 基因突变 基因突变机率 遗传算法宏观步骤 适应度 fitness 遗传算法简单案例 复杂遗传算法python求解 遗传算法是一种基于自然选择的搜索算法,可用于解决 ...

  4. [ML] Genetic Algorithm 理论概述

    Genetic Algorithm 遗传算法: 遗传算法受到达尔文自然选择理论的启发,以遗传/变异/择优的策略进行机器学习进程. 核心算法逻辑: # Copyright:CMPUT 296, Univ ...

  5. R语言基于遗传算法(Genetic Algorithm)进行特征筛选(feature selection)

    R语言基于遗传算法(Genetic Algorithm)进行特征筛选(feature selection) 特征选择的目的 1.简化模型,使模型更易于理解:去除不相关的特征会降低学习任务的难度.并且可 ...

  6. 遗传算法 python包_遗传算法 (Genetic Algorithm)

    遗传算法( Genetic Algorithm )又叫基因进化算法,或进化算法.属于启发式搜索算法一种,这个算法比较有趣,并且弄明白后很简单,写个 100-200 行代码就可以实现.在某些场合下简单有 ...

  7. 【深度学习入门到精通系列】遗传算法 (Genetic Algorithm)

    文章目录 1 遗传算法概述 2 遗传算法 2.1 找一个好的fitness方程 2.2 DNA 编码 2.3 代码实现 3 配对句子 4 旅行商问题 5 Microbial Genetic Algor ...

  8. 【控制】遗传算法(GA,Genetic Algorithm)及 Matlab 实现

    文章目录 基本框架 编码 适应度函数 初始群体选取 Ref. 遗传算法(Genetic Algorithm,GA)最早是由美国的 John holland于20世纪70年代提出,该算法是根据大自然中生 ...

  9. 算法高级(4)-遗传算法(Genetic Algorithm)简介

    01 什么是遗传算法? 1.1 遗传算法的科学定义 遗传算法(Genetic Algorithm, GA)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过 ...

最新文章

  1. Redis 日志篇:无畏宕机实现高可用的杀手锏
  2. java语言程序设计考点_计算机二级考试Java语言程序设计考点:关键字
  3. python怎样入门_python怎么入门啊?
  4. Taro+react开发(78):taro生命周期render
  5. fifo算法模拟_我是怎样学习算法的?(V1.0)
  6. 在docker容器中安装ifconfig、ping等工具
  7. flex的三个属性grow、shrink、basis
  8. ROC曲线和AUC 原理与实现——Python实战
  9. The word 'localhost' is not correctly spelled 这个问题怎么解决
  10. 使用treeNMS管理及监控Redis
  11. 搜狗输入法精简_搜狗输入法10.10去图标精简版+9.4.21小米定制版
  12. 报表类-金蝶K3一次查询所有供应商采购价格
  13. 【CCAI大咖秀】李德毅院士:机器人产业需做好交互认知
  14. emui11如何升级鸿蒙os教程,鸿蒙OS2.0系统怎么降级到EMUI11
  15. Atcoder Beginner Contest 174(ABC174) 题解
  16. python中文文本分析_python简单的分析文本
  17. 51单片机(十六)AD/DA
  18. 我辞退了一位简历造假的程序员
  19. std::move的理解和使用
  20. Oracle10046事件和10053事件实例演示

热门文章

  1. Stanford公开课《Programming Methodology》里面的Karel机器人的配置方法
  2. Win10系统电脑开机黑屏只有鼠标的解决方法
  3. ISO体系认证,AAA信用,荣誉证书,商标版权
  4. chatgpt赋能python:Python行太长如何处理?
  5. 一名程序猿的习惯养成记录手帐(九)
  6. 5个能让你快速变强的自学网站,每天学习一点点,进步很明显
  7. 解决程序员加班难题:项目研发管理项目5大关键
  8. Comic Books: Digital Inking and Refinement 漫画书:数字绘画与细化 Lynda课程中文字幕
  9. 字节跳动(抖音),软件测试四面,面试题总结!走过路过不要错过
  10. 开学在即,一家人的健康码行程码拼图怎么拼