QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1117|回复: 0
打印 上一主题 下一主题

求最小最大优化,MATLAB与LINGO得到的解不同

[复制链接]
字体大小: 正常 放大
junma01        

2

主题

10

听众

9

积分

升级  4.21%

  • TA的每日心情
    奋斗
    2015-9-5 22:08
  • 签到天数: 1 天

    [LV.1]初来乍到

    自我介绍
    运筹学与控制论
    跳转到指定楼层
    1#
    发表于 2015-9-1 20:50 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    我们知道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
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2024-5-29 03:57 , Processed in 0.384240 second(s), 50 queries .

    回顶部