用复合形做优化结果不对,不知错哪里了
按照书上介绍的复合形算法写的小程序,运行倒是通过了可结果却不敢恭维, 不知错哪里了, 请大家帮忙看一下,
非常非常感谢!
自己觉得算法本身可能有问题
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 编辑 ] http://www.simwe.com/forum/viewthread.php?tid=791513
http://www.simwe.com/forum/viewthread.php?tid=797984
上面两个帖子可以参考下。
[ 本帖最后由 rocwoods 于 2007-9-24 00:25 编辑 ] 谢谢 :handshake :@)
页:
[1]