使用gatbx遗传算法工具箱下载以及使用实例(附详细注释)

标签:
it教育文化 |
演示该程序时候必须先下载安装gatbx遗传算法工具箱附下载地址http://pan.baidu.com/s/1kVAkqCv
matlab自带的个人觉得过于复杂,还有一个第三方开发的貌似gaod没用过http://www/uc/myshow/blog/misc/gif/E___6721EN00SIGG.gif。
fplot('-xre.^2+4*xre-4',[-6,8]);
%画出函数曲线,默认矩阵相乘,不是矩阵乘标点如xre.^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(2, MAXGEN);
%创建放置优值的矩阵2行25列
FieldD=[20;-6;8;1;0;1;1];
%区域描述器(Build field descriptor)
Chrom=crtbp(NIND, PRECI);
%初始种群是用二进制表示的
gen=0;
%代计数器
xre=bs2rv(Chrom, FieldD);
%计算初始种群的十进制转换
ObjV=-xre.^2+4*xre-4;
%计算目标函数值
while genFitnV=ranking(-ObjV);
%分配适应度值(Assign fitness
values)ranking函数的功能就是目标值越小的分配值越大,本例求解最大值,应该要是他的适应度值更大,故必须使得ranking内的数越小,这样分配的适应度值才能大
SelCh=select('rws', Chrom, FitnV, GGAP);
%选择使用RSW方式,也可以sus
SelCh=recombin('xovsp', SelCh, 0.7);
%重组
选用方式xovsp
SelCh=mut(SelCh);
%变异
,选择交叉变异重组均是对染色体(一串二进制符号10等)进行的操作
xre=bs2rv(SelCh, FieldD);
%子代个体的十进制转换(把染色体变为实值,当成输入)
ObjVSel=-xre.^2+4*xre-4;
%计算子代的目标函数值(对应染色体的表现型)
[Chrom ObjV]=reins(Chrom, SelCh, 1, 1, ObjV, ObjVSel);
%重插入子代的新种群
xre=bs2rv(Chrom, FieldD);
gen=gen+1;
%代计数器增加
%输出最优解及其序号,并在目标函数图像中标出,Y为最优解,I为种群的序号
[Y, I]=max(ObjV);hold on;
%输出最优解及其序号,并在目标函数图像中标出,Y为最优解,I为种群的序号
plot(xre(I), Y, 'bo');
trace(1, gen)=max(ObjV);
%遗传算法性能跟踪,把当代的最优值放入trace矩阵的第一行第目前代数列
trace(2, gen)=sum(ObjV)/length(ObjV);
%把当代种群目标函数的均值,放入trace矩阵的第二行第目前代数列
end
xre=bs2rv(Chrom, FieldD);
%最优个体的十进制转换
hold on, grid;
%grid 打开网格
plot(xre,ObjV,'b*');
figure(2);
plot(trace(1,:));
%把trace矩阵的第一行画出来(记录的是每一代的最优值)
hold on;
plot(trace(2,:),'-.');
grid%把trace矩阵的第一行画出来(记录的是每一代的最优值)
legend ('解的变化','种群均值的变
化')%把trace矩阵的第2行画出来(记录的是每一代种群目标函数均值
运行