在线时间 6 小时 最后登录 2015-9-23 注册时间 2015-9-1 听众数 10 收听数 0 能力 0 分 体力 17 点 威望 0 点 阅读权限 20 积分 9 相册 0 日志 0 记录 0 帖子 8 主题 2 精华 0 分享 0 好友 4
升级 4.21%
TA的每日心情 奋斗 2015-9-5 22:08
签到天数: 1 天
[LV.1]初来乍到
自我介绍 运筹学与控制论
我们知道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
zan