马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
由于毕设需要,本人刚开始新学MATLAB,但是有个问题百思不得其解,明明是按照书上的代码打的,但是每次运行都不成功,跪求高手指点,好心人帮帮忙吧,万分感谢!!
书上的代码如下:
function [eval]=targetalloc(chrom) %目标函数
[m,n]=size(chrom);
%射击有利程度估计值
p=[.87 .52 .11 .78 .72 .69 .94 .72 .36 .28 .27 .74 .24 .78 .45;
.87 .52 .11 .78 .72 .69 .94 .72 .36 .28 .27 .74 .24 .78 .45;
.87 .52 .11 .78 .72 .69 .94 .72 .36 .28 .27 .74 .24 .78 .45;
.87 .52 .11 .78 .72 .69 .94 .72 .36 .28 .27 .74 .24 .78 .45;
.87 .52 .11 .78 .72 .69 .94 .72 .36 .28 .27 .74 .24 .78 .45;
.87 .52 .11 .78 .72 .69 .94 .72 .36 .28 .27 .74 .24 .78 .45;
.62 .87 .70 .22 .80 .42 .43 .90 .13 .95 .18 .19 .12 .61 .35;
.48 .20 .42 .16 .43 .58 .69 .03 .34 .72 .15 .24 .29 .30 .75];
%威胁程度评估值
w=[.47 .97 .76 .62 .48 .77 .33 .74 .54 .65 .43 .35 .63 .66 .57];
for i=1:m
for j=1:n
chrom(i,j)=p(chrom(i,j),j);
end
end
eval=chrom*w';
%定义遗传算法参数
NIND=40; %个体数目(Number of individuals)
MAXGEN=400; %最大遗传代数(Maximum number of generations)
GGAP=0.9; %代沟(Generation gap)
trace=zeros(MAXGEN,2); %遗传算法性能跟踪初始值
BaseV=crtbase(15,8);
Chrom=crtbp(NIND, BaseV)+ones(NIND,15); %初始种群
gen=0;
ObjV=targetalloc(Chrom); %计算初始种群函数值
while gen<MAXGEN
FitnV=ranking(-ObjV); %分配适应度值(Assign fitness values)
SelCh=select('sus',Chrom,FitnV,GGAP); %选择
SelCh=recombin('xovsp',SelCh,0.7); %重组
f=rep([1;8],[1,15]);
SelCh=mutbga(SelCh, f);SelCh=fix(SelCh); %变异
ObjVSel=targetalloc(SelCh); %计算子代目标函数值
[Chrom ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel); %重插入
gen=gen+1;
trace(gen,1)=max(ObjV); %遗传算法性能跟踪
trace(gen,2)=sum(ObjV)/length(ObjV);
end
[Y, I]=max(ObjV);Chrom(I,:),Y %最优解及其目标函数值
plot(trace(:,1),'-.');hold on;
plot(trace(:,2));grid
legend('解的变化','种群均值的变化')
每次运行都会提示:
Error in ==> C:\遗传算法工具箱\《Matlab遗传算法工具箱及应用》源码\《Matlab遗传算法工具箱及应用》源码\GATBX\gatbx-example\GATBX\YJ2.M
On line 2 ==> [m,n]=size(chrom); |