sun1993 发表于 2007-9-23 15:46

用复合形做优化结果不对,不知错哪里了

按照书上介绍的复合形算法写的小程序,运行倒是通过了
可结果却不敢恭维, 不知错哪里了, 请大家帮忙看一下,
非常非常感谢!
自己觉得算法本身可能有问题

clear;format long;a=4;b=9;
V=zeros(4,2);r=rand(4,2);Y=zeros(4,1);
for i=1:4
    V(i,:)=a+r(i,:).*(b-a);
end
for i=1:4
    Z=V(i,:);Y(i)=feval(@f,Z);%f=x.^2-7*x+y.^2-4*y-x.*y
end
=min(Y);=max(Y);
cnt=0;
F=sum((Y-Y(l)).^2);e=0.0001;u=2.5;
while F<e
    S=zeros(1,2);
    for i=1:4
      S=S+V(i,:);
    end
    M=(S-V(h,:))/3;yM=feval(@f,M);
    R=2*M-V(h,:);
    while (R(1)<4|R(1)>9)|(R(2)<4|R(2)>9)
         R=(R+M)/2;
    end
    yR=feval(@f,R);
    if yR<Y(l)
      E=u*M-(1-u)*V(h,:);
      while (E(1)<4|E(1)>9)|(E(2)<4|E(2)>9)
               E=(E+M)/2;
      end
      yE=feval(@f,E);
      if yE<yR
            V(h,:)=E;Y(h)=yE;
      else
            V(h,:)=R;Y(h)=yR;
      end
    else
      if yR>Y(l)&yR<Y(h)
            V(h,:)=R;Y(h)=yR;
      else
            if yR>Y(h)
                N=0.5*M-0.5*V(h,:);
            else
                N=1.5*M+0.5*V(h,:);
            end
            while (N(1)<4|N(1)>9)|(N(2)<4|N(2)>9)
                   N=(N+M)/2;
            end
                yN=feval(@f,N)
                if yN<Y(h)
                  V(h,:)=N;Y(h)=yN;
                else
                  for i=1:4
                        V(i,:)=(V(i,:)+V(l,:))/2;
                         Z=V(i,:);Y(i)=feval(@f,Z);
                  end
                end            
      end
    end
    =min(Y);=max(Y);
    F=sum((Y-Y(l)).^2);
    cnt=cnt+1;
end
    x=V(l,:)

虽然MATLAB自带了优化工具箱,但实际优化的目标函数不是显函数,
所以只能自己动手编, 郁闷啊现在

[ 本帖最后由 花如月 于 2007-9-23 20:44 编辑 ]

rocwoods 发表于 2007-9-24 00:22

http://www.simwe.com/forum/viewthread.php?tid=791513
http://www.simwe.com/forum/viewthread.php?tid=797984
上面两个帖子可以参考下。

[ 本帖最后由 rocwoods 于 2007-9-24 00:25 编辑 ]

sun1993 发表于 2007-9-24 09:17

谢谢 :handshake :@)
页: [1]
查看完整版本: 用复合形做优化结果不对,不知错哪里了