• 遗传算法介绍(内含实例)
  • 现代生物遗传学中描述的生物进化理论:
    遗传物质的主要载体是染色体(chromsome),染色体主要由DNA和蛋白质组成。其中DNA为最主要的遗传物质。
    基因(gene)是有遗传效应的片断,它存储着遗传信息,可以准确地复制,也能发生突变,并可通过控制蛋白质的合成而控制生物的状态.生物自身通过对基因的复制(reproduction)和交叉(crossover,即基因分离,基因组合和基因连锁互换)的操作时其性状的遗传得到选择和控制。生物的遗传特性,使生物界的物种能保持相对的稳定;生物的变异特性,使生物个体产生新的性状,以至于形成了新的物种(量变积累为质变),推动了生物的进化和发展。

    遗传学算法和遗传学中的基础术语比较

    染色体(chromosome)    数据,数组,序列
    基因(gene) 单个元素,位
    等位基因(allele) 数据值,属性,值
    基因座(locus)  位置,iterator位置
    表现型(phenotype)  参数集,解码结构,候选解
    遗传隐匿(epistasis)  非线性

    染色体又可以叫做基因型个体(individuals),一定数量的个体组成了群体(population),群体中个体的数量叫做群体大小。各个个体对环境的适应程度叫做适应度(fitness)

    遗传算法的准备工作: 
    1)数据转换操作,包括表现型到基因型的转换和基因型到表现型的转换。前者是把求解空间中的参数转化成遗传空间中的染色体或者个体(encoding),后者是它的逆操作(decoding)
    2)确定适应度计算函数,可以将个体值经过该函数转换为该个体的适应度,该适应度的高低要能充分反映该个体对于解得优秀程度。非常重要的过程!

    遗传算法的基本步骤
    遗传算法是具有"生成+检测"(generate-and-test)的迭代过程的搜索算法。
    基本过程为:
    1)编码,创建初始集团
    2)集团中个体适应度计算
    3)评估适应度
    4)根据适应度选择个体
    5)被选择个体进行交叉繁殖,
    6)在繁殖的过程中引入变异机制
    7)繁殖出新的集团,回到第二步

    一个简单的遗传算法的例子:求 [0,31]范围内的y=(x-10)^2的最小值
    1)编码算法选择为"将x转化为2进制的串",串的长度为5位。(等位基因的值为0 or 1)
    2)计算适应度的方法是:先将个体串进行解码,转化为int型的x值,然后使用y=(x-10)^2作为其适应度计算合适(由于是最小值,所以结果越小,适应度也越好)
    3)正式开始,先设置群体大小为4,然后初始化群体 => (在[0,31]范围内随机选取4个整数就可以,编码)
    4)计算适应度Fi(由于是最小值,可以选取一个大的基准线1000,Fi = 1000 - (x-10)^2)
    5)计算每个个体的选择概率.选择概率要能够反映个体的优秀程度.这里用一个很简单的方法来确定选择概率
    P=Fi / TOTAL(Fi).
    6)选择.
    根据所有个体的选择概率进行淘汰选择.这里使用的是一个赌轮的方式进行淘汰选择.先按照每个个体的选择概率创建一个赌轮,然后选取4次,每次先产生一个0-1的随机小数,然后判断该随机数落在那个段内就选取相对应的个体.这个过程中,选取概率P高的个体将可能被多次选择,而概率低的就可能被淘汰.

    下面是一个简单的赌轮的例子
       13%               35%                    15%                 37%        
    ----------|----------------------------|------------|-*-------------------------|
       个体1              个体2                  个体3    ^0.67    个体4
    随机数为0.67落在了个体4的端内.本次选择了个体4.

    被选中的个体将进入配对库(mating pool,配对集团)准备开始繁殖.
    7)简单交叉
    先对配对库中的个体进行随机配对.然后在配对的2个个体中设置交叉点,交换2个个体的信息后产生下一代.
    比如( | 代表简单串的交叉位置)
     ( 0110|1, 1100|0 ) --交叉--> (01100,11001)
     ( 01|000, 11|011 ) --交叉--> (01011,11000)
    2个父代的个体在交叉后繁殖出了下一代的同样数量的个体.
    复杂的交叉在交叉的位置,交叉的方法,双亲的数量上都可以选择.其目的都在于尽可能的培育出更优秀的后

    8)变异
    变异操作时按照基因座来的.比如说没计算2万个基因座就发生一个变异(我们现在的每个个体有5个基因座.也就是说要进化1000代后才会在其中的某个基因座发生一次变异.)变异的结果是基因座上的等位基因发生了变化.我们这里的例子就是把0变成1或则1变成0.
    至此,我们已经产生了一个新的(下一代)集团.然后回到第4步,周而复始,生生不息下去:)

    伪代码实例(适合爱看代码的朋友~):

    //Init population
    foreach individual in population
    {
         individual = Encode(Random(0,31));
    }

    while (App.IsRun)

         //计算个体适应度
         int TotalF = 0;
         foreach individual in population
         {
          individual.F = 1000 - (Decode(individual)-10)^2;
          TotalF += individual.F;
         }

    //------选择过程,计算个体选择概率-----------
         foreach individual in population
         {
              individual.P = individual.F / TotalF;
         }
         //选择
         for(int i=0;i<4;i++)
         {
              //SelectIndividual(float p)是根据随机数落在段落计算选取哪个个体的函数
              MatingPool[i] = population[SelectIndividual(Random(0,1))];
         }
         //-------简单交叉---------------------------
         //由于只有4个个体,配对2次
         for(int i=0;i<2;i++)
         {
              MatingPool.Parents[i].Mother = MatingPool.RandomPop();
              MatingPool.Parents[i].Father = MatingPool.RandomPop();
            }

    //交叉后创建新的集团
         population.Clean();
         foreach Parent in MatingPool.Parents
         {
              //注意在copy 双亲的染色体时在某个基因座上发生的变异未表现.
              child1 = Parent.Mother.DivHeader + Parent.Father.DivEnd;
              child2 = Parent.Father.DivHeader + Parent.Mother.DivEnd;
              population.push(child1);
              population.push(child2);
         }

    小结:
    遗传算法中最重要的过程就是选择和交叉。
    选择要能够合理的反映"适者生存"的自然法则,而交叉必须将由利的基因尽量遗传给下一代(这个算法很关键!)
    还有就是编码的过程要能够使编码后的染色体能充分反映个体的特征并且能够方便计算。

    这篇文章是原来学习的一些回忆的整理,因为最近要实用了.不正确的地方还希望大家多多指出~

遗传算法介绍(内含实例)相关推荐

  1. css滑动门技术的应用,css 滑动门技术的介绍及实例分享

    css 滑动门技术的介绍及实例分享 发布时间:2009-10-15 12:48:01   作者:佚名   我要评论 可以这样说css滑动门技术是被刺激出来的,因为很多人认为css并不能做出漂亮的网页, ...

  2. [转载] python中pass的使用_Python pass详细介绍及实例代码

    参考链接: Python pass语句 Python pass详细介绍及实例代码 Python pass的用法: 空语句 do nothing 保证格式完整 保证语义完整 以if语句为例,在c或c++ ...

  3. 设计模式(四)行为型模式介绍及实例(上)

    文章目录 一.模板模式 1.1 模板模式定义 1.2 模板模式特点 1.3 模板模式主要角色 1.4 模板模式实现方式 1.5 模板模式应用场景 二.策略模式 2.1 策略模式定义 2.2 策略模式主 ...

  4. bs4主要知识点介绍及实例解析---利用bs4爬取伯乐在线(分别存储在数据库和xls表中)

    bs4主要知识点介绍及实例讲解 bs4 是第三方解析html数据的包 from bs4 import BeautifulSoup lxml 解析读取html的第三方解释器,解析速度快,底层通过c实现 ...

  5. 西门子S7-200SMART介绍及实例编程

    西门子S7-200SMART介绍及实例编程 (何工_2018年9月5号) 概述:SIMATIC S7-200 SMART 是西门子公司经过大量市场调研,为中国客户量身定制的一款高性价比小型 PLC 产 ...

  6. 遗传算法介绍并附上Matlab代码

    摘自http://www.cnblogs.com/hxsyl/p/5240905.html 该文中后面的代码是我在学校里面编写的,当时应该是可以用的,里面的图确实是我画出来的,但是我现在不确定是否正确 ...

  7. 2021-03-08 C语言strcasecmp函数和strncasecmp函数介绍和实例测试

    C语言strcasecmp函数和strncasecmp函数介绍和实例测试 一. strcasecmp()用来比较参数s1和s2字符串,比较时会自动忽略大小写的差异.若参数s1和s2字符串相同则返回0. ...

  8. Elasticsearch:Elasticsearch SQL介绍及实例 (一)

    Elasticsearch 是一个全文搜索引擎,具有你期望的所有优点,例如相关性评分,词干,同义词等. 而且,由于它是具有水平可扩展的分布式文档存储,因此它可以处理数十亿行数据,而不会费劲.针对 El ...

  9. 设计模式(三)结构型模式介绍及实例

    文章目录 一.适配器模式 1.1 适配器模式定义 1.2 适配器模式主要角色 1.3 适配器模式特点 1.4 适配器模式实现方式 1.4.1 类适配器模式 1.4.2 对象适配器模式 1.5 适配器模 ...

最新文章

  1. 数据分析Python:sklearn数据预处理中fit(),transform()与fit_transform()的区别
  2. SAP UI5应用Opportunity S5 formatter issue
  3. raii_Java中的RAII
  4. mysql gtid binlog_MySQL之-四步实现BinLog Replication升级为GTIDs Replication的代码实例
  5. 【计算机组成原理】虚拟存储器和Cache的比较
  6. 编译的 Ruby 2.3.0 缺少 openssl 支持的解决方法 (已解决)
  7. php上传图片大小判断,jQuery实现判断上传图片类型和大小的方法示例
  8. linux重启ipv6_Linux关闭、开启、配置IPv6
  9. 检查服务产生的core文件并做短信处理(shell)
  10. 亚马逊测评自养号IP重要性
  11. 起点事件折射出网络文学产业化困境
  12. Scala历史版本在哪里??
  13. 涉密台式计算机密码可以输入几次,涉密打印机、扫描仪等与涉密计算机之间不采用无线方式连接 - 作业在线问答...
  14. springboot项目部署到Linux服务器
  15. html怎么把图片设成圆弧边,ps里怎么把边缘做成弧形
  16. 网易2017笔试题-日记的颜色
  17. 谁说MAC原生无法玩游戏---START-腾讯云游戏-开启MAC,低配WIN以及TV玩网游新时代
  18. Google Earth Engine(GEE)——基于Landsat的高级植被指数 (AVI)、裸土指数 (BSI) 和冠层阴影指数 (SSI) 的计算
  19. 干货分享 | 50大产业链全景图高清完整版
  20. 【ENVI IDL技术殿堂使用不了的解决办法】

热门文章

  1. 动态刷新listview中的数据
  2. SNIPER: Efficient Multi-Scale Training
  3. IDEA(或Android Studio)推送(push)代码报错 unable to read askpass response from ‘C:\Users\Urasaki\AppData\Loc
  4. Nginx配置文件中文详解
  5. Java中 支持多继承吗?
  6. jdk11手动安装jre
  7. 常用SQL语句大全实例总结-基础篇
  8. python导入scipy库、sympy库遇到的问题及解决方式
  9. performance性能监控
  10. L1-040 最佳情侣身高差 (10分)