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则表示范
    围中包含边界。

  • 相关阅读:
    【HDOJ】2774 Shuffle
    【POJ】2170 Lattice Animals
    【POJ】1084 Square Destroyer
    【POJ】3523 The Morning after Halloween
    【POJ】3134 Power Calculus
    【Latex】如何在Latex中插入伪代码 —— clrscode3e
    【HDOJ】4801 Pocket Cube 的几种解法和优化
    【HDOJ】4080 Stammering Aliens
    【HDOJ】1800 Flying to the Mars
    SQL语法
  • 原文地址:https://www.cnblogs.com/fengyanlover/p/4784445.html
Copyright © 2011-2022 走看看