数学建模社区-数学中国

标题: 求最小最大优化,MATLAB与LINGO得到的解不同 [打印本页]

作者: junma01    时间: 2015-9-1 20:50
标题: 求最小最大优化,MATLAB与LINGO得到的解不同
我们知道MATLAB中有fminimax求最小最大优化函数,而LINGO中有min=@Smax()求优化模块。本人要优化的函数经过分析只有一个极小点,那么局部最优就是全局最优。这样以来,用MATLAB和LINGO求得的结果该一致才对呀?可是我做出的结果却不一致。具体代码分别如下,请教大神帮分析其中的原因!
MATLAB代码:
function optical
clc;clear all;
A=[-1.2 0.7 -1.1;0.5 -0.8 -1.4;2.8 0.8 0.7];b=[12 -3 1]';
s=[0 0.1011 0.3700 0.5495 0 0]';
y1=[114.5626,0.1260,-0.7482,1.000,0,0]';
y2=[-59.5062,0.0869,0.5866,0,1,0]';
y3=[8.2231,-0.0701,-0.0042,0,0,1]';
x=[0.9080 0.2629 0.3263]';
%x=[0.1375 -0.9225 0.3606]';
  k0=[1000,80,-1110]; [k,fval,maxfval,exitflag,output]=fminimax(@fun3,k0)

function f=fun3(k)
    z=s+k(1)*y1+k(2)*y2+k(3)*y3;
f(1)=norm(A*x+b*z(2),2);
f(2)=norm(A*(A*x+b*z(2))+b*z(3),2);
f(3)=norm(A*(A*(A*x+b*z(2))+b*z(3))+b*z(4),2);
f(4)=norm(A*(A*(A*(A*x+b*z(2))+b*z(3))+b*z(4))+b*z(5),2);
f(5)=norm(A*(A*(A*(A*(A*x+b*z(2))+b*z(3))+b*z(4))+b*z(5))+b*z(6),2);
end
end


LINGO代码:
model:
sets:
object /1..5/: f;
input /1..6/: z;
tejie /1..6 /:s;
ji1 /1..6/:y1;
ji2 /1..6/:y2;
ji3 /1..6/:y3;
A1 /a1..a3/;
A2 /a4..a6/;
Assign(A1,A2):A;
state0 /1..3/:x0;
state1 /1..3/:x;
state2 /1..3/:m;
state3 /1..3/:u;
state4 /1..3/:w;
state5 /1..3/:v;
C /1..3/:b;
endsets
data:
s=0,0.1011,0.3700,0.5495,0,0;
y1=114.5626,0.1260,-0.7482,1.000,0,0;
y2=-59.5062,0.0869,0.5866,0,1,0;
y3=8.2231,-0.0701,-0.0042,0,0,1;
A=-1.2 0.7 -1.1
  0.5 -0.8 -1.4
   2.8 0.8 0.7;
b=12 -3 1;
x0=0.9080 0.2629 0.3263;                                                
!x0=0.1375 -0.9225 0.3606;                           
enddata
init:
k1,k2,k3=10,-1,1;
endinit
!z(I)=s(I)+k1*y1(I)+k2*y2(I)+k3*y3(I);
@for(input(I): z(I)=s(I)+k1*y1(I)+k2*y2(I)+k3*y3(I));
calc:
x(1)=(A(1,j)*x0(j)+b(1)*z(2));x(2)=(A(2,j)*x0(j)+b(2)*z(2));x(3)=(A(3,j)*x0(j)+b(3)*z(2));
m(1)=(A(1,j)*x(j)+b(1)*z(3));m(2)=(A(2,j)*x(j)+b(2)*z(3));m(3)=(A(3,j)*x(j)+b(3)*z(3));
u(1)=(A(1,j)*m(j)+b(1)*z(4));u(2)=(A(2,j)*m(j)+b(2)*z(4));u(3)=(A(3,j)*m(j)+b(3)*z(4));
w(1)=(A(1,j)*u(j)+b(1)*z(5));w(2)=(A(2,j)*u(j)+b(2)*z(5));w(3)=(A(3,j)*u(j)+b(3)*z(5));
v(1)=(A(1,j)*w(j)+b(1)*z(6));v(2)=(A(2,j)*w(j)+b(2)*z(6));v(3)=(A(3,j)*w(j)+b(3)*z(6));
endcalc
f(1)=((x(1))^2+(x(2))^2+(x(3))^2)^0.5;
f(2)=((m(1))^2+(m(2))^2+(m(3))^2)^0.5;
f(3)=((u(1))^2+(u(2))^2+(u(3))^2)^0.5;
f(4)=((w(1))^2+(w(2))^2+(w(3))^2)^0.5;
f(5)=((v(1))^2+(v(2))^2+(v(3))^2)^0.5;
min=@smax(f(1),f(2),f(3),f(4),f(5));
@free(k1);@free(k2);@free(k3);
end









欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5