QQ登录

只需要一步,快速开始

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

Lingo超经典案例大全

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

3503

主题

537

听众

5989

积分

  • TA的每日心情
    开心
    2017-2-7 15:12
  • 签到天数: 691 天

    [LV.9]以坛为家II

    社区QQ达人 元老勋章 发帖功臣 新人进步奖 优秀斑竹奖 金点子奖 原创写作奖 最具活力勋章 助人为乐奖 风雨历程奖

    群组2013年国赛赛前培训

    群组2014年地区赛数学建模

    群组数学中国第二期SAS培训

    群组物联网工程师考试

    群组2013年美赛优秀论文解

    跳转到指定楼层
    1#
    发表于 2016-7-4 16:11 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta
    LINGO是Linear Interactive and General Optimizer的缩写,即“交互式的线性和通用优化求解器”。Lingo超强的优化计算能力在很多方面(线性规划、非线性规划、线性整数规划、非线性整数规划、非线性混合规划、二次规划等)比matlab、maple等强得多,Lingo编程简洁明了,数学模型不用做大的改动(或者不用改动)便可以直接采用Lingo语言编程,十分直观。

    Lingo模型由4个段构成:
    (1)集合段(sets  endsets);(2)数据段(data  enddata);
    ( 3 )初始段(init endinit);(4)目标与约束段。
    Lingo的五大优点:
    1. 对大规模数学规划,LINGO语言所建模型较简洁,语句不多;
    2. 模型易于扩展,因为@FOR、@SUM等语句并没有指定循环或求和的上下限,如果在集合定义部分增加集合成员的个数,则循环或求和自然扩展,不需要改动目标函数和约束条件;
    3. 数据初始化部分与其它部分语句分开,对同一模型用不同数据来计算时,只需改动数据部分即可,其它语句不变;
    4. “集合”是LINGO有特色的概念,它把实际问题中的事物与数学变量及常量联系起来,是实际问题到数学量的抽象,它比C语言中的数组用途更为广泛。
    5. 使用了集合以及@FOR、@SUM等集合操作函数以后可以用简洁的语句表达出常见的规划模型中的目标函数和约束条件,即使模型有大量决策变量和大量数据,组成模型的语句并不随之增加.

    一、求解线性整数规划、非线性整数规划问题:
               1.线性整数归家:
    QQ图片20160704155631.png

    model:
    max=x1+x2;
    x1+9/14*x2<=51/14;
    -2*x1+x2<=1/3;
    @gin(x1);@gin(x2);
    end
    求得x1=3,x2=1,最大值为4.运用matlab求时可以发现有两组解:x1=3,x2=1和x1=2,x2=2。通过验证也可知这两组解均满足。Lingo的一个缺陷是:每次只能输出最优解中的一个(有时不只一个)。那么,怎样求得其他解呢?一个办法是将求得的解作为约束条件,约束x1不等于3,x2不等于1,再求解。如下:
    model:
    max=x1+x2;
    x1+9/14*x2<=51/14;
    -2*x1+x2<=1/3;
    @gin(x1);@gin(x2);
    @abs(x1-3)>0.001;
    @abs(x2-1)>0.001;
    end
    求得x1=2,x2=2.若再次排除这组解,发现Lingo解不出第三组解了,这时我们可以断定:此优化模型有两组解:
    x1=3,x2=1和x1=2,x2=2.
    求解模型时需注意:lingo中,默认变量均为非负:输出的解可能是最优解中的一组,要判断、检验是否还有其他他解
    (根据具体问题的解的情况或排除已知最优解的约束条件法)

         2.非线性整数规划:
        QQ图片20160704161113.png
    model:
    sets:
    row/1..4/:b;
    col/1..5/:c1,c2,x;
    link(row,col):a;
    endsets
    data:
    c1=1,1,3,4,2;
    c2=-8,-2,-3,-1,-2;
    a=1 1 1 1 1
    1 2 2 1 6
    2 1 6 0 0
    0 0 1 1 5;
    b=400,800,200,200;
    enddata     
    max=@sum(col:c1*x^2+c2*x);
    @for(row(i)sum(col(j):a(i,j)*x(j))
    @for(colgin(x));
    @for(colbnd(0,x,99));
    End
    求得:x1=50,x2=99,x3=0,x4=99,x5=20.最大值为51568。
    这里,我们看不出是否还有其他解,需要将已知的最优解排除掉。
    利用1的方法分别可得到其他解:
    x1=48,x2=98,x3=1,x4=98,x5=19.最大值为50330。
    x1=45,x2=97,x3=2,x4=97,x5=18.最大值为49037。
    x1=43,x2=96,x3=3,x4=96,x5=17.最大值为47859。
    x1=40,x2=95,x3=4,x4=95,x5=16.最大值为46636。
    ......
    发现x1,x2,x4,x5均单调减少,x3单调增加。最大值越来越小。可以简单判断第一组为最优的。当然,能够一一检验最好。



    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-9-22 21:09 , Processed in 0.332078 second(s), 58 queries .

    回顶部