开心果 发表于 2009-2-28 14:59:57

为什么每次运行的时候都不稳定呢

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;
为什么我运行的时候每次都不稳定!大家帮个忙!谢谢~

babysoul 发表于 2009-3-1 13:15:14

首先,你给出的代码不全,例如函数rep,crtbp等等
其次,你的子函数的定义不对
function ff1=f(x)
按照document的标准形式
function = funname(in1, in2, ...)
应该是 f = ff1(x)
很怀疑你的程序能运行起来,更不要提是否收敛的问题
页: [1]
查看完整版本: 为什么每次运行的时候都不稳定呢