MATLAB 求解遗传算法

[复制链接]
查看11 | 回复5 | 2010-8-11 22:04:37 | 显示全部楼层 |阅读模式
figure(1);
fplot('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)
trace=zeros(2, MAXGEN);
%寻优结果的初始值
FieldD=[20;-1;2;1;0;1;1];
%区域描述器(Build field descriptor)
Chrom=crtbp(NIND,PRECI)
%初始种群
gen=0;
%代计数器
variable=bs2rv(Chrom, FieldD);
%计算初始种群的十进制转换
ObjV=variable.*sin(10*pi*variable)+2.0;
%计算目标函数值
while gen<MAXGEN
FitnV=ranking(-ObjV);
%分配适应度值(Assign fitness values)

SelCh=select('sus', Chrom, FitnV, GGAP);
%选择
SelCh=recombin('xovsp', SelCh, 0.7);
%重组
SelCh=mut(SelCh);
%变异
variable=bs2rv(SelCh, FieldD);
%子代个体的十进制转换
ObjVSel=variable.*sin(10*pi*variable)+2.0;
%计算子代的目标函数值
[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, 'bo');
trace(1, gen)=max(ObjV);
%遗传算法性能跟踪
trace(2, gen)=sum(ObjV)/length(ObjV);
end
variable=bs2rv(Chrom, FieldD);
%最优个体的十进制转换
hold on, grid;
plot(variable,ObjV,'b*');
figure(2);
plot(trace(1,:));
hold on;
plot(trace(2,:),'-.');grid
legend('解的变化','种群均值的变化')
为什么在MATLAB 6.5运行不了?

回复

使用道具 举报

千问 | 2010-8-11 22:04:37 | 显示全部楼层
在MATLAB 6.5自身没有遗传算法工具箱,像bs2rv,crtbp这些函数都不存在,所以运行不了,你需要自己安装一个遗传算法工具箱,才能运行
回复

使用道具 举报

千问 | 2010-8-11 22:04:37 | 显示全部楼层
http://www.ilovematlab.cn/thread-27905-1-1.html可以下载遗传算法工具箱;http://www.ilovematlab.cn/thread-33117-1-1.html里面有说明如何使用。
回复

使用道具 举报

千问 | 2010-8-11 22:04:37 | 显示全部楼层
下载一个Sheffield大学Matlab遗传算法工具箱试试吧,不过最好下一个MATLAB7.0吧。安装:1、解压gatbx-origin.zip,得到DOC和SRC文件夹;2、拷贝SRC到Matlab安装目录下的toolbox文件夹中,并将SRC更名为genetic;3、打开toolbox\local\目录下的pathdef.m文件,在适当
回复

使用道具 举报

千问 | 2010-8-11 22:04:37 | 显示全部楼层
现在用MATLAB7.0比较多,换个版本吧楼主。
回复

使用道具 举报

千问 | 2010-8-11 22:04:37 | 显示全部楼层
我在MATLAB7.0可以运行哦,肯定是版本问题的啦!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行