zoukankan      html  css  js  c++  java
  • 遗传算法

      遗传算法:是一个群体优化算法,也就是从多个初始解开始进行优化,每个解成为一个染色体,个染色体之间通过竞争,合作,单独变异,不断进化。

      优化时候先要见时机问题转换到遗传空间,就是把实际问题的解用染色体表示,称为编码,反过程为解码,因为优化后要进行评价,所以要返回问题空间,故要进行解码。SGA采用二进制编码,染色体就是二进制位串,每一位可称为一个基因;解码时候应将染色体解码到问题可行域内部。

      遗传算法模拟“适者生存,优胜劣汰”的进化机制,染色体适应生存环境的能力用适应度函数衡量。对于优化问题,适应度蛤属由目标函数变换而来。一般遗传算法求解最大值问题,如果是最小值的问题,则通过取倒数或者加负号处理。SGA要求适应度函数>0,对于<0的问题,要通过加一个足够大的正数来jiejue.zheyang,适应度函数值打的染色体生存能力强。

      遗传算法有三个进化算子:选择(复制),交叉,和变异

        SGA中,选择采用轮盘赌方法,将染色体分布在一个圆盘上,没个染色体占据一定的扇形区域,扇形区域的面积大小和染色体的适应度大小成正比。如果轮盘中心装一个可以转动的指针的话,旋转指针,指针停下来时候会只想某一个区域,则该区域对应的染色体被选中。显然氏硬度高的染色体由于所占的扇形区域大,一次被选中的几率高,可能被选中多次,而是硬度底的被选中的几率低,从而被淘汰。

      算法实现时候,采用随机数方法,先将没个染色体的适应度除以所有染色体适应度的和,再累加,使得他们根据适应度的大小分布于0-1之间,氏硬度大的站的区域大,然后随机生成一个0-1之间的随机数,随机数落到那个区域,对应的染色体就被选中。重复操作,选出群体规模规定的数目的染色体。这个操作就是优胜劣汰,适者生存,但没有产生新个体。

      交叉模拟有性繁殖,有俩个染色体共同作用产生后代,SGA采用单点交叉。由于SGA为二进制编码,所以染色体为二进制位串,随机生成一个小于位串长度的随机整数,交换俩个染色体改点后的那部分位串。参与交叉的染色体是轮盘赌选出来的个体,并且还要根据选择概率来确定是否进行交叉(生成0-1之间的随机数,看随机数是否小于规定的交叉概率),否则直接进入变异操做。这个操作是产生新个体的主要方法,不过基因都来自父辈个体。

      变异采用为点便宜,对于二进制位串,0变1,1变0局势变异。采用概率确定变异位,对每一位生成一个0-1之间的随机数,看是否小于规定的变异概率,小于的变异,否则保持原状。这个操作能够使个体不同与父辈儿具有自己独立的特征基因,主要用于跳出局部极值。

      遗传算法认为生物由低级到高级进化,后代的比前一代的强,但实际操作中可能出现退化现象,所以采用最佳个体保留法,也就是曾经出现的最好个体,一定要保证生存下来,使得后代至少不差于前一代。大致有俩种类型,一种是把出现的最优个体单独保存,最后输出,不印象,原来的进化过程;一种是将最有个体保存如子群,也进行选择交叉,变异,这样能春分利用模式,蛋爷可能导致过早收敛。

      由于是基本遗传算法,所以优化能力一般,解决简单问题上可,高位,复杂问题就需要进行改进了。

  • 相关阅读:
    练习三
    练习四
    练习二
    软件生命周期
    练习一 第六题
    练习一 第五题
    练习一 第四题
    练习一 第三题
    练习一 第二题
    AngularJs模块
  • 原文地址:https://www.cnblogs.com/yjds/p/8727720.html
Copyright © 2011-2022 走看看