为什么每次运行的时候都不稳定呢
function ff1=f(x)ff1=x*;
function ff2=f(x)
ff2=x*;
function ff3=f(x)
ff3=x*;
function ff3=f(x)
ff3=x*;
function gg2=f(x)
gg2=79532000-x*;
function gg3=f(x)
gg3=x*-30600000;
function gg4=f(x)
gg4=x*-9180000;
function gg5=f(x)
gg5=x*-118290000;
(上面是我的M文件)
nind=120; %个体数目
maxgen=500; %最大遗传代数
nvar=7; %变量个数
preci=20; %变量的二进制位数
ggap=0.9; %代沟
r1=400000000; %惩罚因子
mubiaomatrix=;
yueshumatrix=;
trace1=[];trace2=[];trace3=[];trace4=[];%性能跟踪
optim=zeros(1,8);
%建立区域描述器
fieldd=,);rep(,);rep(,)];
fieldd(2,4)=8640;
chrom=crtbp(nind,nvar*preci); %初始种群
gen=1;
while gen<=maxgen
=size(chrom);
v=bs2rv(chrom,fieldd); %初始种群十进制转换
m=fix(nind/3);
objv1=ff1(v(1:m,:)); %分组后第一目标函数值
mm=;
rr=zeros(nind,1);
rr1=zeros(m,1);
for i=1:m
cc1=size(find(mm(i,:)<0),2);
rr1(i,1)=cc1*r1;
end
objv1=objv1+rr1;
fitnv1=ranking(-objv1); %分配适应度值
selch1=select('sus',chrom(1:m,:),fitnv1,ggap);%选择
objv2=ff2(v(m+1:2*m,:)); %分组后第二目标函数值
rr2=zeros(m,1);
for i=m+1:2*m
cc2=size(find(mm(i,:)<0),2);
rr2(i-m,1)=cc2*r1;
end
objv2=objv2+rr2;
fitnv2=ranking(-objv2); %分配适应度值
selch2=select('sus',chrom(m+1:2*m,:),fitnv2,ggap);%选择
objv3=ff3(v(2*m+1:nind,:)); %分组后第三目标函数值
rr3=zeros(nind-2*m,1);
for i=2*m+1:nind
cc3=size(find(mm(i,:)<0),2);
rr3(i-2*m,1)=cc3*r1;
end
objv3=objv3+rr3;
fitnv3=ranking(-objv3); %分配适应度值
selch3=select('sus',chrom(2*m+1:nind,:),fitnv3,ggap);%选择
for j=1:nind
cc=size(find(mm(j,:)<0),2);
rr(j,1)=cc*r1;
end
selch=; %合并
selch=recombin('xovsp',selch,0.7);%重组
chrom=mut(selch); %变异
hang=size(chrom,1)
trace1(gen,1)=min(ff1(v)+rr);
trace1(gen,2)=sum(ff1(v)+rr)/length(ff1(v));
trace2(gen,1)=min(ff2(v)+rr);
trace2(gen,2)=sum(ff2(v)+rr)/length(ff2(v));
trace3(gen,1)=min(ff3(v)+rr);
trace3(gen,2)=sum(ff3(v)+rr)/length(ff3(v));
trace4(gen,1)=min(ff1(v)+ff2(v)+ff3(v)+rr);
trace4(gen,2)=sum(ff1(v)+rr)/length(ff1(v))+sum(ff2(v)+rr)/length(ff2(v))+sum(ff3(v)+rr)/length(ff3(v));
=min(ff1(v)+ff2(v)+ff3(v)+rr);
if gen==1
optim(1,1:7)=v(I,:);
optim(1,8)=Y;
else
if trace4(gen,1)<optim(1,8)
optim(1,1:7)=v(I,:);
optim(1,8)=Y;
end
end
gen=gen+1;
end
figure(1);clf;
plot(trace1(:,1));hold on;plot(trace1(:,2),'-.');
plot(trace1(:,1),'.');plot(trace1(:,2),'.');grid;
legend('解的变化','种群均值的变化')
xlabel('迭代次数');ylabel('第一目标函数值');
figure(2);clf;
plot(trace2(:,1));hold on;
plot(trace2(:,2),'-.');
plot(trace2(:,1),'.');
plot(trace2(:,2),'.');
grid;
legend('解的变化','种群均值的变化')
xlabel('迭代次数');ylabel('第二目标函数值');
figure(3);clf;
plot(trace3(:,1));hold on;
plot(trace3(:,2),'-.');
plot(trace3(:,1),'.');
plot(trace3(:,2),'.');
grid;
legend('解的变化','种群均值的变化')
xlabel('迭代次数');ylabel('第三目标函数值');
figure(4);clf;
plot(trace4(:,1));hold on;
plot(trace4(:,2),'-.');
plot(trace4(:,1),'.');
plot(trace4(:,2),'.');
grid;
legend('解的变化','种群均值的变化')
xlabel('迭代次数');ylabel('目标函数值之和');
figure(5);clf;plot(ff1(v));hold on;
plot(ff2(v));hold on;
plot(ff3(v),'r-.');grid;
为什么我运行的时候每次都不稳定!大家帮个忙!谢谢~ 首先,你给出的代码不全,例如函数rep,crtbp等等
其次,你的子函数的定义不对
function ff1=f(x)
按照document的标准形式
function = funname(in1, in2, ...)
应该是 f = ff1(x)
很怀疑你的程序能运行起来,更不要提是否收敛的问题
页:
[1]