您的位置:首页 > 编程语言 > MATLAB

matlab遗传算法gatbx工具箱介绍及安装说明

2018-02-15 23:00 561 查看
一. 遗传算法简介:    
    遗传算法是以自然选择和遗传理论为基础,将生物进化过程中适者生存规则与群体内部染色体的随机信息交换机制相结合的高效全局寻优搜索算法。
    这样解释对于广大的初学者而言是既神秘又高大上的。实际上,我们可以这样理解:遗传算法可以解决传统的目标优化问题,但是,它摒弃了传统的搜索方式(如遍历搜索、枚举搜索等等),取而代之地采用一种基于搜索目标的“进化”搜索,即模拟了生物变异的随机性、遗传性,使得每一代的“搜索”跟前一代相比,既可能有共性(遗传),又可能有新的特征(变异)。遗传算法的搜索是“一代一代”地进行的,经过一定次数的搜索后,可以得出接近于搜索目标的结果(自然选择)。
二. 遗传算法matlab工具箱:
    遗传算法十分强大,但想很好地驾驭它,除了在深入研究其原理的阶段外,平常的使用中我们应该使用框架去实现。这里matlab本身自带一个遗传算法工具箱,但其影响性和简易性不及Sheffield大学推出的Gatbx遗传算法工具箱。

    工具箱的主要函数及功能简介如下:

 函数功能
创建种群crtbase
创建基向量
crtbp
创建任意离散随机种群
crtrp
创建实值初始种群
适应度计算ranking
常用的基于秩的适应度计算
scaling
比率适应度计算
选择函数reins
一致随机和基于适应度的重插入
rws
轮盘选择
select
高级选择例程
sus
随机遍历采样
变异算子mut
离散变异
mutate
高级变异函数
mutbga
实值变异
交叉算子recdis
离散重组
recint
中间重组
reclin
线性重组
recmut
具有变异特征的线性重组
recombin
高级重组算子
xovdp
两点交叉算子
xovdprs
减少代理的两点交叉
xovmp
通常多点交叉
xovsh
洗牌交叉
xovshrs
减少代理的洗牌交叉
xovsp
单点交叉
xovsprs
减少代理的单点交叉
子种群的支持migrate
在子种群间交换个体
实用函数bs2rv
二进制串到实值的转换
rep
矩阵的复制
    gatbx工具箱的较为详细的用法可以参考《matlab遗传算法工具箱及应用》一书。下面先来介绍如何安装该工具箱:
    gatbx工具箱下载链接:http://download.csdn.net/download/qq_33353186/10252240
    安装步骤:把gatbx.rar解压至matlab安装目录下的toolbox文件夹里。运行matlab,在设置路径里添加该gatbx工具箱即可。





测试代码:
%% matlab_gatbx_test.m
%遗传算法求f(x)=x*sin(10*pi*x)+2.0,在[-1,2]上的最大值
figure(1);
fplot(@(variable)variable.*sin(10*pi*variable)+2.0,[-1,2]);   %画出函数曲线
%定义遗传算法参数
NIND=40;        %个体数目(Number of individuals)
MAXGEN=25;      %最大遗传代数(Maximum number of generations)
PRECI=20;       %变量的二进制位数(Precision of variables)
GGAP=0.9;       %代沟(Generation gap)说明子代与父代的重复率为0.1
trace=zeros(MAXGEN,2);                        %寻优结果的初始值
FieldD=[20;-1;2;1;0;1;1];                      %区域描述器(Build field descriptor),第2、3行为自变量的下界和上界
Chrom=crtbp(NIND, PRECI);                      %定义初始种群
gen=0;                                         %代计数器
variable=bs2rv(Chrom, FieldD);                 %计算初始种群的十进制转换
ObjV=shang(variable);        %计算目标函数值
while gen<MAXGEN %进化MAXGEN代
   FitnV=ranking(-ObjV);                                  %分配适应度值(Assign fitness values)ranking函数的功能就是目标值越小的分配值越大,
                                                          %本例求解最大值,应该要是他的适应度值更大,故必须使得ranking内的数越小,这样分配的适应度值才能大
   SelCh=select('sus', Chrom, FitnV, GGAP);               %选择,使用sus方式,也可以改用rws方式
   SelCh=recombin('xovsp', SelCh, 0.7);                   %重组,选用xovsp方式
   SelCh=mut(SelCh);                                      %变异
   variable=bs2rv(SelCh, FieldD);                         %子代个体的十进制转换,把染色体变为十进制
   ObjVSel=shang(variable);             %计算子代的目标函数值
   [Chrom ObjV]=reins(Chrom, SelCh, 1, 1, ObjV, ObjVSel); %重插入子代的新种群
   variable=bs2rv(Chrom, FieldD);                         %子代个体的十进制转换,转为十进制
   gen=gen+1;                                             %代计数器增加
   %输出最优解及其序号,并在目标函数图像中标出,Y为最优解,I为种群的序号
   [Y, I]=max(ObjV);hold on;
   plot(variable(I), Y, 'ro');
   trace(gen,1)=max(ObjV);                                %遗传算法性能跟踪,把当代的最优值放入trace矩阵的第一行第目前代数列
   trace(gen,2)=sum(ObjV)/length(ObjV);                   %把当代种群目标函数的均值,放入trace矩阵的第二行第目前代数列
end
variable=bs2rv(Chrom, FieldD);                            %最优个体的十进制转换,转回十进制,以便输出
hold on;
grid on;
plot(variable,ObjV,'b*');
figure(2);
plot(trace(:,1)); %把trace矩阵的第一列画出来(记录的是每一代的最优值)
hold on;
plot(trace(:,2),'-.');grid %把trace矩阵的第2列画出来(记录的是每一代种群目标函数均值)
legend('解的变化','种群均值的变化')

function z=shang(x) % 目标函数的核心部分(即缺省了优化目标的纯函数)
    z=x.*sin(10*pi*x)+2.0;

end
%运行结果:





gatbx工具箱(直接可用版)下载链接:http://download.csdn.net/download/qq_33353186/10252240
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息