zoukankan      html  css  js  c++  java
  • 初遇Sheffield遗传算法工具箱

    安装参考      http://www.cnblogs.com/kissrat/archive/2008/10/15/1311563.html

    安装:
    1、解压gatbx-origin.zip,得到DOC和SRC文件夹;
    2、拷贝SRC到Matlab安装目录下的toolbox文件夹中,并将SRC更名为gatbx;
    3、打开toolboxlocal目录下的pathdef.m文件,在适当位置添加以下两行代码:  (也可addpath)

    Code in pathdef.mmatlabroot,' oolboxgatbx;',... matlabroot,' oolboxgatbxTEST_FNS;',...

    这样子就表示安装好了吧,哈哈。。

    >> v=ver('gatbx')
    
    v = 
    
            Name: 'Genetic Algorithm Toolbox'
         Version: '1.2'
         Release: ''
            Date: '15-Apr-94'
        Licenses: {'unknown'}

    然而,事不尽人意,正准备好好研究下它的内置函数时,,

    % 创建初始种群
    clc;clear;
    Nind=60;   %种群个体数
    Lind=30;   %个体长度
    [Chrom,Lind,BaseV]=CRTBP(Nind,Lind);   %创建随机二进制矩阵

    却报错了,错误如下。。。。

    Cannot find an exact (case-sensitive)
    match for 'CRTBP.m'
    
    The closest match is E:my programming
    softwarematlabmatlab
    2012a	oolboxgatbxCRTBP.M
    
    To change the file extension, cd to the
    file's folder, type:
       movefile CRTBP.M CRTBP.m_bad;
       movefile CRTBP.m_bad CRTBP.m
    and then cd back.
    
    
    Error in sheffield (line 10)
    [Chrom,Lind,BaseV]=CRTBP(Nind,Lind);
    %创建随机二进制矩阵 

    上网找了一个解决方法。。

    http://www.ilovematlab.cn/thread-277326-1-1.html

    但,仍然出错,,继续找解决方法

    http://cn.mathworks.com/matlabcentral/answers/89490-cannot-find-an-exact-case-sensitive-match

    http://cn.mathworks.com/help/matlab/matlab_env/toolbox-path-caching-in-the-matlab-program.html

    (⊙o⊙)嗯,原来清空路径缓存就可以啦,开心!(英语还是蛮有用的,以后要好好学,O(∩_∩)O哈哈~)

    好啦,弄了一上午,终于可以开启我的遗传算法之旅了!

    之前,遗传算法都是自己一点点摸索一点点写的,但是,很不幸,解决问题的效果不好。这就是在打击我的自信心嘛,(⊙o⊙)…所以,决定换个思路,,

    这几天整理知识,看了《Matlab智能算法30个案例分析》这本书,嗯,为了更好的解决问题,还是学学著名的Sheffield遗传算法工具箱啦。。

    这篇博文整理得还不错    http://www.cnblogs.com/zhengnanlee/p/3439649.html

    1.创建种群

      crtbase:创建基向量

      crtbp:创建任意离散随机种群

      crtrp:创建实质初始种群

    2.适应度计算

      ranking:基于排序的适应度分配

      scaling:比率适应度计算

    3.选择函数

      rws:轮盘选择

      sus:随机遍历采样

      select:高级选择例程

    4.交叉算子

      recdis:离散重组

      recint:中间重组

      recline:线性重组

      recmut:具有变异特征的线性重组

      xovdp:两点交叉算子

      xovdprs:减少代理的两点交

      xovmp:通常多点交叉

      xovsh:洗牌交叉

      xovshrs:减少代理的洗牌交叉

      xovsp:单点交叉

      xovsprs:减少代理的单点交叉

      recombin:高级重组算子

    5.变异算子

      mut:离散变异

      mutate:高级变异函数

      mutbga:实值变异

    6.重插入

      reins:一致随机和基于适应度的重插入

    7.子种群的支持

      migrate:在子种群间交换个体

    8.实用函数

      bs2rv:二进制串到实值的转换

      rep:矩阵的复制

    遇到了一个区域描述器的概念,有点棘手。。

      某一元函数优化

    FieldD=[PRECI;lb;ub;1;0;1;1];                      %区域描述器

          某二元函数优化

    FieldD=[PRECI PRECI;lbx lby;ubx uby;1 1;0 0;1 1;1 1];                      %区域描述器
    X=bs2rv(Chrom,FieldD); 

    区域描述器行数必须为7

        len;  (num)
        lb;  (num)
        ub;  (num)
        code;  (0=binary     | 1=gray)
        scale;  (0=arithmetic | 1=logarithmic)
        lbin;  (0=excluded   | 1=included)
        ubin];  (0=excluded   | 1=included)

     len是包含在Chrom中的每个子串的长度,注意sum(len)=length(Chrom);

     lb、ub是行向量,分别指明每个变量使用的上界和下界;

     code是二进制行向量,指明子串是怎样编码的,code(i)=1为标准二进制编码,code(i)=0则为格雷编码

     scale是二进制行向量,指明每个子串是否使用对数或算术刻度,scale(i)=0为算术刻度,scale(i)=1则为对数刻度;

     lbin、ubin是二进制行向量,指明表示范围中是否包含每个边界,选择lbin=0或ubin=0,表示从范围中去掉边界;lbin=1或ubin=1则表示范
    围中包含边界。

  • 相关阅读:
    mysql数据库的test类型
    jvm虚拟机分享课笔记
    内存模型中没有gc的是哪个
    jvm内存模型中-栈,方法区,程序计数器是线程安全的
    Random.nextInt()替换Math.random()
    异常抛出注意点
    缓存好文章
    java 实现serialVersionUID
    什么叫反向代理什么叫正向代理
    mysql count与sum的区别
  • 原文地址:https://www.cnblogs.com/fengyanlover/p/4784445.html
Copyright © 2011-2022 走看看