遗传算法 一个模拟自然进化过程的启发式搜索算法

2023-05-16

关键字:遗传算法

遗传算法(Genetic Algorithm)是一种模拟自然界“自然选择”和“自然遗传”的启发式搜索算法,通过模拟自然进化过程搜索最优解的方法。

直到1989年,实现了具有单变量函数的简单遗传算法(Simple Genetic Algorithm,SGA)程序,后续有许多学者对遗传算法提出建议或改良,如精英保留策略遗传算法、改良遗传算法、混合遗传算法等,但他们都是基于SGA的。

本篇也是以SGA为基础的,SGA处理流程如下:

简单遗传算法SGA的处理流程图

遗传算法的理论基础是达尔文的“进化论”,在遗传算法模型中,将问题的解答巧妙的编码在一串数值或符号中(即所谓的染色体),模拟染色体中的一段基因,经过长时间的进化过程,历经选择、交叉和变异3个遗传算子,不断产生新基因,同时淘汰不良基因,最终进化成最优秀的染色体,并满足进化的终止条件,得到问题的最优解。

实现遗传算法时,必须先将要求问题解的质量定义为适应度函数。适应度函数计算的数值代表该系统的性能指针,也就是该物种对于生存环境的适应程度,简称为适应度值,适应度值越高,表示系统性能越好,被选取的概率也越大。

最常见的进化的终止条件有两种:得到大于或等于预期的目的适应值,或达到预先定义好的演化代数,也就是说,适应度函数的设计是遗传演算过程是否可以正常执行的关键。

如果适应度函数选择不当,有可能会收敛于局部,而不能达到“真正的全局”最优解。除此之外,由于遗传算法具有不确定的变异因素,可能也会出现无法收敛的情况。这时,可以根据指定的演化函数,或发现搜索结果停滞不前,或已经达到某种饱和现象,设置终止条件。

1.编码

在遗传算法中,将染色体称为个体,常见的基因编码方式有二进制编码、浮点数编码和字符编码3种。

1)二进制编码:用二进制表示参数空间,优点:易实现

2)浮点数编码:直接将参数值当成染色体的基因,省去了编码和译码的动作,缺点:无法默认搜索的精确度,不适合处理不连续的变量空间

3)字符编码:直接用字符代表基因的方式

2.种群

根据SGA处理流程可知,遗传演算开始前,需要先产生初代种群(由一堆随机产生的染色体组成的),由于一个染色体代表一个问题解,因而初代种群也代表初始解的集合。

那一个种群应该包括多少染色体呢?这个要视问题复杂度来定,一般来说,越复杂的问题需要越大的种群规模来解决。

3.选择

选择机制类似于“无性繁殖”,根据每个染色体的适应度值大小来决定该染色体被选择的概率,适应度越高,被选择概率就大(自然选择),一旦染色体被选择,就会进行“自我复制”,并且被放置在称为配对库的暂存区中。

实现选择机制的两种常用方法是竞争选择法和轮盘赌选择法。

1)竞争选择法

从种群中选出两个染色体进行适应度值的比较,最后留下适应度较高的染色体作为父代,重复进行这个步骤,直到选出所有的父代为止。

2)轮盘赌选择法

按照适应度值的大小决定每一个槽的面积大小,可以使用下面公式来表示:

被选中的概率 P(i)= f(i)/( f(1) + f(2) + … + f(S))

其中 f(i):适应度值;S:染色体总个数;

轮盘赌选择法

也就是说个体被选中的概率与其适应度函数值成正比。

接下来我们来看一个简单的轮盘赌算法:

/**
 * 按设定的概率随机选中一个染色体,P(i)表示第i个染色体被选中的概率
 */
int RAN() {
    m =0;
    r =Random(0,1); // r为0至1的随机数
    for(i=1;i<=S; i++) {
        /** 
         * 产生的随机数在m~m+P[i]间则认为选中了i,i被选中的概率是P[i]
         */
        m = m + P[i];
        if(r<=m) return i;
    }
}

4.交叉

第二个遗传算子叫做交叉。

交叉

作用:希望通过父代之间进行基因交换的动作后,产生具有较高适应度的子代。

交叉运算的流程示意图

位于配对库中的染色体是经过选择运算的结果,在交叉流程开始时,会先从配对库中任意取出两个染色体,并将它们作为父代。但是并非所有父代都会进行交叉(取决于交叉概率),实现程序时,可以将交叉概率设置为0.8~1的数值,接着再取一个随机实数,如果该随机实数小于交叉概率,就进行交叉运算。

交叉概率的大小会影响搜索最优解的速度,太高的交叉概率有可能流失优良的染色体,反之又会造成进化停滞,故一般把交叉概率设置在0.8~1为宜。

5.变异

最后一个遗传算子叫做变异。

变异

是否进行变异取决于变异概率,当随机实数小于变异概率时就会引发突变运算,也就是会将染色体中的某个位,由原来的0置换成1,或是由原来的1置换成0。可以置换某个固定位置的位,也可以由随机数来决定位置。

使用这种随机漫步的方式,突变运算将使遗传算法脱离布局最优解的窘境,得到全局最优解。根据文献研究显示,建议将变异概率设置为0.001左右。

6.演化迭代

经过选择、交叉、变异3个遗传算子后,即可产生新的子代,继续下一个循环的进化,目前常用的取代方式有:
1)整群取代:全部用新产生的染色体取代旧种群的染色体;
2)精英保留策略:保留旧种群中适应度值最高的前几名,用新产生的染色体取代其余的染色体。

7.基本遗传算法伪代码

/**
 * 基本遗传算法伪代码
 *  Pj:交叉发生的概率
 *  Pb:变异发生的概率
 *  M:种群规模
 *  G:终止进化的代数
 *  T:进化产生的任何一个个体的适应度函数超过T,则可以终止进化过程
 */
初始化Pb,Pj,M,G,T等参数,随机产生第一代种群Pop
do{ 
    计算种群Pop中每一个体的适应度f(i),初始化空种群newPop
    do{
        根据适应度以 轮盘赌算法 从种群Pop中选出2个个体
        if ( random ( 0 , 1 ) < Pj ){
            对2个个体按交叉概率Pj执行交叉操作
        }
        if ( random ( 0 , 1 ) < Pb ){
            对2个个体按变异概率Pb执行变异操作
        }
        将2个新个体加入种群newPop中
    } until ( M个子代被创建 )
    用newPop取代Pop
} until ( 任何染色体得分超过T, 或繁殖代数超过G )

到这里相信大家对遗传算法已经有了一定的了解了。

需要学习的知识:
1.深入学习遗传算法
2.对遗传算法的应用

参看文献:http://blog.csdn.net/smartbetter/article/details/52194663

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

遗传算法 一个模拟自然进化过程的启发式搜索算法 的相关文章

  • 遗传算法 一个模拟自然进化过程的启发式搜索算法

    关键字 xff1a 遗传算法 遗传算法 xff08 Genetic Algorithm xff09 是一种模拟自然界 自然选择 和 自然遗传 的启发式搜索算法 xff0c 通过模拟自然进化过程搜索最优解的方法 直到1989年 xff0c 实
  • 遗传算法最通俗的讲解案例

    遗传算法 遗传算法求全局最优解或者近似优解 遗传算法GA可以用到数据挖掘领域 由于缺少一些详细的例子 导致难以理解 以下是一个大牛的遗传算法的详细例子 通过这个例子 我们可以详细而且直观的加深对遗传算法的理解 遗传算法的有趣应用很多 诸如寻
  • 遗传算法的matlab实现

    遗传算法 Genetic Algorithm GA 是20世纪70年代初兴起的一门新兴学科 遗传算法的基本思想来源于达尔文的进化论和孟德尔的遗传学说 它通过模拟生物进化的过程来求解问题 生物中的基因对应优化问题中的变量组合 一个解则代表了一
  • 经典遗传算法及MATLAB实例

    经典遗传算法及简单实例 MATLAB 1 遗传算法简单介绍 1 1 理论基础 1 2 算法要点 1 1 编码 1 2 适应度函数 1 3 基本流程 2 代码实例 MATLAB 2 1 代码汇总 2 1 初始化种群 2 2 计算适应度 2 3
  • 遗传算法的概念和python实现

    遗传算法是一个非常经典的智能算法 主要用于解决优化问题 本文主要简单介绍一些原理 同时给出一个基于python实现的 用于解决实数内优化问题的模板 本文参考 原理 遗传算法入门详解 知乎 简单介绍 遗传算法就是借鉴生物学中的遗传 首先生成若
  • 遗传算法简介

    遗传算法简介1 美国Michigan大学的Holland教授及其学生收到生物模拟技术的启发 创造出了一种基于生物遗传和进化机制的适合与复杂系统优化的自适应概率优化技术 遗传算法 1967年 Holland的学生Bagley在其博士论文中首次
  • 基于量子遗传算法的函数寻优算法(matlab实现)

    8 1 理论基础 8 1 1 量子遗传算法概述 量子遗传算法 quantum genetic algorithm QGA 是量子计算与遗传算法相结合的产物 是一种新发展起来的概率进化算法 遗传算法是处理复杂优化问题的一种方法 其基本思想是模
  • 遗传算法(一) 遗传算法的基本原理

    遗传算法 一 遗传算法的基本原理 1 概述 遗传算法 Genetic Algorithm GA 起源于对生物系统所进行的计算机模拟研究 它是模仿自然界生物进化机制发展起来的随机全局搜索和优化方法 借鉴了达尔文的进化论和孟德尔的遗传学说 其本
  • 多目标优化问题和遗传算法学习笔记

    多目标优化问题和遗传算法学习笔记 多目标优化问题和遗传算法学习笔记 本人最近研究多目标优化问题以及NSGA2算法 下面把学习笔记分享给大家 希望可以帮助到一些和我一样的初学者们 名词 Nondominated sorting 非支配排序 N
  • 遗传算法求解TSP及其变式

    刚刚接触遗传算法 主要学习的是以下几位老师的文章 抱拳 链接附上 https blog csdn net u010451580 article details 51178225 https blog csdn net wangqiuyun
  • 用遗传算法求解TSP问题

    原文链接 http blog 5long me 2015 genetic algorithm on tsp 遗传算法简介 关于遗传算法 首先看一段维基百科的解释 遗传算法是模仿自然界生物进化机制发展起来的随机全局搜索和优化方法 它借鉴了达尔
  • 基于遗传算法的多目标优化算法(matlab实现)

    1 理论基础 1 1 多目标优化及Pareto最优解 多目标优化问题可以描述如下 其中 f x 为待优化的目标函数 x为待优化的变量 Ib和ub分别为变量x的下限和上限约束 Aeq x beq为变量x的线性等式约束 A x b为变量x的线性
  • Matlab遗传算法用于旅行商问题优化TSP

    Matlab遗传算法用于旅行商问题优化 要求 第一步 参数编码和初始群体设定 第二步 计算路径长度的函数设计 第三步 计算选择算子 第四步 计算交叉算子 第五步 计算变异算子 结果及分析 MATLAB总代码 要求 利用遗传算法求旅行商问题的
  • 睿智的智能优化算法3——利用遗传算法实现字符串配对

    睿智的智能优化算法3 利用遗传算法实现字符串配对 字符串配对 求解过程 1 编码方式 2 计算适应度 3 自然选择 4 基因突变 5 个体杂交 实现代码 GITHUB下载连接 好久都没有用过遗传算法了 觉得需要重新复习一下 而且考虑到遗传算
  • 基于遗传算法二维下料问题/矩形件排样/matlab程序

    基于遗传算法的二维板材切割下料优化问题 matlab程序 关键词 遗传算法 二维板材切割 matlab 引言 二维板材切割问题在实际的工程中有很多的应用 该问题基本等同于矩形件优化排样 具体是指将若干尺寸不相同的矩形零件在给定的矩形板材上以
  • 一种基于遗传算法与神经网络算法(GA-BP)的新冠肺炎模型预测-含Matlab代码

    目录 一 引言 二 新冠肺炎模型构建 三 遗传算法反向传播 GA BP 神经网络设计 3 1 GA BP 神经网络构建 3 2 BP神经网络训练 3 3 基于遗传算法的新冠感染人数峰值预测 四 结论 五 Matlab代码获取 一 引言 针对
  • 睿智的智能优化算法2——遗传算法的python实现

    睿智的智能优化算法2 遗传算法的python实现 什么是遗传算法 求解过程 整体代码分解 1 编码解码部分 2 求取适应度部分 3 自然选择部分 4 组合交叉 5 基因突变 实现代码 GITHUB下载连接 睿智的智能优化算法小课堂再次开课啦
  • 量子遗传算法原理与MATLAB仿真程序

    写在前面 1 其实这些智能算法的思想都差不多 只不过是各自搜寻方式 编码方式 种群更新方式等不一样而已 量子遗传算法是在遗传算法的基础上使用了一种新的编码方式 2 直接看前面介绍可能会觉得较难 先浏览概念任何根据案例走一遍就明白了 3 遗传
  • 进化计算-遗传算法之史上最全选择策略

    获取更多资讯 赶快关注上面的公众号吧 文章目录 第十九章 遗传算法 史上最全选择策略 19 1 轮盘赌选择 Roulette wheel selection 19 2 锦标赛选择 Tournament selection 19 3 截断选择
  • 10分钟搞懂遗传算法

    大自然有种神奇的力量 它能够将优良的基因保留下来 从而进化出更加强大 更加适合生存的基因 遗传算法便基于达尔文的进化论 模拟了自然选择 物竞天择 适者生存 通过N代的遗传 变异 交叉 复制 进化出问题的最优解 遗传算法看似神奇 但实现思路却

随机推荐

  • 面试题:使用promise实现并发请求限制(最优解)

    问题 xff1a 有 8 个图片资源的 url xff0c 已经存储在数组 urls 中 xff0c 而且已经有一个函数 function loadImg xff0c 输入一个 url 链接 xff0c 返回一个 Promise xff0c
  • PHP关于VC11,VC9,VC6以及Thread Safe和Non Thread Safe版本选择的问题

    从PHP5 2 10版本开始 xff08 现在有PHP5 2 10和5 3两个版本 xff09 xff0c 有None Thread Safe与Thread Safe两种版本的可供选择 xff0c 这两种版本有何不同 xff0c 作为使用者
  • apache下载安装配置

    最近从apache官网上下载了apache最新版本的压缩包httpd 2 4 18 x64 vc11 r3 zip xff0c 解压以后用cmd命令安装了好长时间都没有安装上 xff0c 在网上找各种解决方法 xff0c 都不靠谱 xff0
  • ubuntun无法安装 libsdl2-dev

    sudo apt get install libsdl2 dev Reading package lists Done Building dependency tree Reading state information Done Some
  • PHPCrawler抓取酷狗精选集歌单

    一 PHPCrawler的介绍与安装 先了解一下什么是抓取 xff1f 抓取就是网络爬虫 xff0c 也就是人们常说的网络蜘蛛 xff08 spider xff09 是搜索引擎的一个重要组成部分 xff0c 按照一定的逻辑和算法抓取和下载互
  • 跨站脚本攻击XSS

    跨站脚本攻击 Cross Site Script为了区别于CSS简称为XSS 指的是恶意攻击者往Web页面里插入恶意html代码 xff0c 当用户浏览该页之时 xff0c 嵌入其中Web里面的html代码会被执行 xff0c 从而达到恶意
  • RedHat系统下安装yum

    一 前言 因为RedHat系统下的软件更新是RedHat公司的一项服务 xff0c 必须用钱买的rhel系统 xff0c 并且注册了RedHat的用户才能使用yum xff0c 要想免费使用yum xff0c 必须卸载原来的yum xff0
  • js实现图片放大镜效果

    一 HTML文件 lt DOCTYPE html PUBLIC 34 W3C DTD XHTML 1 0 Transitional EN 34 34 http www w3 org TR xhtml1 DTD xhtml1 transiti
  • PHP获取文件的修改时间、访问时间和inode 修改时间

    filemtime string filename 返回文件上次被修改的时间 xff0c 出错时返回 FALSE 时间以 Unix 时间戳的方式返回 xff0c 可用于 date 例如 xff1a a 61 filemtime 34 log
  • PHP设计模式之单例模式

    最近开始学习设计模式 xff0c 由于一开始没有系统的学习 xff0c 导致学的知识七零八落的 xff0c 得好好整理一下了 单例模式 xff08 职责模式 xff09 xff1a 简单的说 xff0c 一个对象 xff08 在学习设计模式
  • 创业资金来源

    创业资金的获得一般有以下几个途径 xff1a 一 自有资金 这个主要是自身的存款 xff0c 一般工作几年的人或多或少都有点存款 xff0c 这一部分的钱是自己创业的基本基金 二 股权融资 股权融资 xff0c 是指创业者或中小企业让出企业
  • Cannot modify header information解决办法

    如果在执行php程序时看到这条警告 Warning Cannot modify header information headers already sent by 可以尝试以下几种解决方法 Use exit statement 用exit
  • 中国距离VR市场成熟还要多久?

    VR xff08 Virtual Reality的缩写 xff0c 中文翻译 虚拟现实 xff09 概念早在80年代初就被提出来的 xff0c 其具体是指借助计算机及最新传感器技术创造的一种崭新的人机交互手段 中国VR产业仍在摸索阶段 亟缺
  • URL重写规则

    今天给大家详细讲解一下RewriteCond指令与RewriteRule 指令的格式 Rewirte主要的功能就是实现URL的跳转和隐藏真实地址 xff0c 基于Perl语言的正则表达式规范 帮助我们实现拟静态 xff0c 拟目录 xff0
  • 二值信号量与互斥锁区别

    互斥锁和二值信号量在使用上非常相似 xff0c 但是互斥锁解决了优先级翻转的问题 以军长 师长 团长为案例 xff0c 讲解mutex与signal区别 xff0c 以下是时序图 参考 xff1a https www cnblogs com
  • redisson-spring-boot-starter

    redisson spring boot starter spring boot 配置 spring redis redisson config classpath redisson beta yml 或者 spring redis red
  • URL中"#" "?" "&"号的作用

    10年9月 xff0c twitter改版 一个显著变化 xff0c 就是URL加入了 符号 比如 xff0c 改版前的用户主页网址为http twitter com username 改版后 xff0c 就变成了http twitter
  • STAR法则的简历应用

    STAR法则 即为Situation Task Action Result的缩写 xff0c 具体含义是 Situation 事情是在什么情况下发生 Task 你是如何明确你的任务的 Action 针对这样的情况分析 xff0c 你采用了什
  • BI商业智能

    关键字 xff1a 商务智能 xff0c 数据仓库 xff0c ETL BI xff08 Business Intelligence即商务智能 xff09 xff0c 百度百科用的解释是 xff0c 它是一套完整的解决方案 xff0c 用来
  • 遗传算法 一个模拟自然进化过程的启发式搜索算法

    关键字 xff1a 遗传算法 遗传算法 xff08 Genetic Algorithm xff09 是一种模拟自然界 自然选择 和 自然遗传 的启发式搜索算法 xff0c 通过模拟自然进化过程搜索最优解的方法 直到1989年 xff0c 实