QQ登录

只需要一步,快速开始

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

同一个程序用'interior-point'和'active-set‘算法得不同结果

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

11

主题

9

听众

148

积分

升级  24%

  • TA的每日心情
    奋斗
    2019-10-22 13:59
  • 签到天数: 36 天

    [LV.5]常住居民I

    自我介绍
    erv
    跳转到指定楼层
    1#
    发表于 2014-8-11 17:40 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    本帖最后由 wujianjack2 于 2014-8-11 21:19 编辑

    用函数fmincon进行优化,调用不同算法(用'interior-point'和'active-set‘)得到不同结果?不知道为什么,请指点一下,先谢谢了。
    目标函数:                             sum((x(i))^2)          i=1,......48

    非线性等式约束(即相邻两点距离为lx):
    ((X(i+1,1)+x(i*m2+1))-(X(i,1)+x((i-1)*m2+1)))^2+((X(i+1,2)+x(i*m2+2))-(X(i,2)+x((i-1)*m2+2)))^2+((X(i+1,3)+x(i*m2+3))-(X(i,3)+x((i-1)*m2+3)))^2-lx^2
    其中X为已知的16*3矩阵,lx=2e-5

    线性等式约束:  X(1,1)+x(1)=5e-6;  X(1,2)+x(2)=0; X(1,3)+x(3)=5e-5; 目的是想使第一点X(1,:)调整后为[5e-6 0 5e-5]

    程序如下:
    clear all;clc;
    format long e   %因所给量很小,为避免舍入误差太大,用long e

    X=[
          5.000000807112509e-006    4.438188823382536e-012    4.999999999999996e-005
          5.000019466734432e-006    2.000041484956790e-005    5.000000000002813e-005
          5.000005381785101e-006    4.000035630116146e-005    4.999999999986301e-005
          5.000002199111159e-006    6.000030338908418e-005    5.000000003855406e-005
          5.000001310800677e-006    8.000028270773177e-005    4.999999999985877e-005
          5.000001139999288e-006    1.000002859376575e-004    5.000000000002505e-005
          5.000001105374056e-006    1.200002691391569e-004    4.999999999996041e-005
          5.000001422126761e-006    1.400002717169680e-004    5.000000001477024e-005
          5.000002175749727e-006    1.600002906163810e-004    4.999999999994554e-005
          5.000002819890397e-006    1.800002762363458e-004    5.000000000002112e-005
          5.000003503360227e-006    2.000002586221355e-004    4.999999999999951e-005
          5.000004206050277e-006    2.200002365369250e-004    4.999999999999058e-005
          5.000004822397571e-006    2.400002100393004e-004    4.999999999983640e-005
          5.000004457864783e-006    2.600001628445900e-004    5.000000004171483e-005
          5.000004410493534e-006    2.800001298186233e-004    4.999999999984020e-005
          5.000004786826385e-006    3.000001055148235e-004    4.999999999999983e-005
    ];
    lx=2e-5;
    m1=size(X,1);m2=size(X,2);             %m1,m2分别为杆件各节点坐标矩阵的行数、列数
    %-------------数据传送到平台
    assignin('base','Xz',X);
    assignin('base','m1z',m1);
    assignin('base','m2z',m2);
    assignin('base','lxz',lx);

    %-------------程序主体
    x0=zeros(1,m1*m2);                     %x的初始值
    x0(1)=5e-6-X(1,1);x0(2)=-X(1,2);x0(3)=5e-5-X(1,3);    %想令X的第一行(第一点)的值在分别用x1, x2, x3调整后值为[5e-6 0 5e-5],即线性约束


    options=optimset('LargeScale','off','display','off','Algorithm','active-set','TolX',1e-13); %  采用不同算法
    %options=optimset('LargeScale','off','display','off','Algorithm','interior-point','TolX',1e-13); % 屏蔽上一句
    [x,fval]=fmincon(@myfun,x0,[],[],[],[],[],[],@mycon,options);

    %%%将得到的x(i)值构成16*3的矩阵xd
    xd=zeros(m1,m2);
    for i=1:m1
         for j=1:m2
             xd(i,j)=x((i-1)*m2+j);
         end
    end

    xd,fval     %用'interior-point'得到的xd除第一行(X(1,:)+xd(1,:)值为[5e-6 0 5e-5]为想要调整的值)外,全为初值0(好像没调整),且fval=2.034895063404301e-023
    %用'active-set'xd除第一行外,值全部为负值,但X(1,:)+xd(1,:)不是想要调整的值,且fval=3.644862515945357e-015

    调用子函数分别为:
    function f=myfun(x)
    f=sum(x.^2);

    function [c,ceq]=mycon(x)
    %----------从平台引入数据
    X=evalin('base','Xz');
    m1=evalin('base','m1z');
    m2=evalin('base','m2z');
    lx=evalin('base','lxz');

    ceq(1)=((X(1,1)+x(1))-5e-6)^2+(X(1,2)+x(2))^2+((X(1,3)+x(3))-5e-5)^2-lx^2; %%第一行为固定值[5e-6 0 5e-5]
    for i=2:m1-1
         if m2==3
             ceq(i)=((X(i+1,1)+x(i*m2+1))-(X(i,1)+x((i-1)*m2+1)))^2+...
                 ((X(i+1,2)+x(i*m2+2))-(X(i,2)+x((i-1)*m2+2)))^2+...
                 ((X(i+1,3)+x(i*m2+3))-(X(i,3)+x((i-1)*m2+3)))^2-lx^2;
          
         end
    end
    c=[];
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信

    124

    主题

    68

    听众

    1万

    积分

  • TA的每日心情
    擦汗
    2021-10-28 10:42
  • 签到天数: 624 天

    [LV.9]以坛为家II

    网络挑战赛参赛者

    自我介绍

    社区QQ达人 新人进步奖 元老勋章 发帖功臣 风雨历程奖

    群组2015SAS数据分析大赛

    群组2013电工杯A题讨论群组

    群组2013年第二期美赛论文

    群组2014年地区赛数学建模

    群组2014年美赛冲刺培训

    回复

    使用道具 举报

    21

    主题

    97

    听众

    3110

    积分

  • TA的每日心情
    奋斗
    2014-3-2 00:26
  • 签到天数: 243 天

    [LV.8]以坛为家I

       如果都是Local Optima的话那就很有可能,fmincon是在Optimization Toolbox里面,而Global Optimization Toolbox的GlobalSearch函数用到fmincon为求解引擎时得到全局最优的可能性会大一点。
       当然,其实我也是在瞎说.................

    点评

    guohf  没明白,我不是做优化的,只是编程时,需调整点的位置,才临时在别人的优化程序上改的。想问下fmincon是做全局还是局域优化的? 另外,我又在matlab2013上运算了两个算法,两算法得到同样的结果(和用'interior-poi  详情 回复 发表于 2014-8-12 10:54
    有什么好说的
    回复

    使用道具 举报

    guohf        

    11

    主题

    9

    听众

    148

    积分

    升级  24%

  • TA的每日心情
    奋斗
    2019-10-22 13:59
  • 签到天数: 36 天

    [LV.5]常住居民I

    自我介绍
    erv
    本帖最后由 guohf 于 2014-8-12 10:56 编辑
    wujianjack2 发表于 2014-8-11 21:18
    如果都是Local Optima的话那就很有可能,fmincon是在Optimization Toolbox里面,而Global Optimization  ...

    没明白,我不是做优化的,只是编程时,需调整点的位置,才临时在别人的优化程序上改的。想问下fmincon是做全局还是局域优化的?是那种优化要根据什么看??谢谢
    另外,我又在matlab2013上运算了两个算法,两算法得到同样的结果(和用'interior-point'算的结果一样)。可我用matlab2008上换用其他X矩阵,得到的两算法结果也是不一样的,fval值的量级active-set是-15,'interior-point'是-23,有人说是精度问题,但精度也不能差这么多啊???
      收起(3)
    • wujianjack2 wujianjack2 :fmincon是局部优化,MATLAB工具箱里面的函数均不能保证得到全局最优,只是Global Optimization Toolbox里面的函数得到全局解的可能性比较大。COIN-OR有一款免费开源软件,IPOPT(Interior-Point-OPTimizer),使用内点算法求解非线性规划,其也说明只是被设计为寻找局部最优解,一般来说要证明是全局最优的话可能需要Branch-and-Cut技术,分解为一个个凸规划来求解。Active-Set有效集方法也是局部寻优算法。局部寻优一般与初始点的设置有较大关系,如果你觉得结果不满意,可以尝试Global Optimization Toolbox或者用其它专业软件包求解。
           当然,本人见解也是非常有限的,也许是瞎说。
      2014-08-12 12:33 回复
    • guohf guohf :回复 wujianjack2 :谢谢你的详细讲解,了解了不少,但优化的进一步操作,对我来说就困难了,象你说的\"Branch-and-Cut技术\",也是第一次看到,去做就更难了,哈哈
      2014-08-15 08:50 回复
    • wujianjack2 wujianjack2 :
      2014-08-15 11:37 回复
    • 我也说一句

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

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

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

    蒙公网安备 15010502000194号

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

    GMT+8, 2025-5-23 03:27 , Processed in 0.639087 second(s), 70 queries .

    回顶部