安装参考 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)
这样子就表示安装好了吧,哈哈。。
>> 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则表示范
围中包含边界。