• lingo记录


    视频链接

    lingo 零基础学习系列教程 初识LINGO_哔哩哔哩_bilibili

    1.x1>1与x1>=1等价,不存在严格大于

    2.求解线性规划,二次规划,部分非线性规划

    二次规划定义如下 

    3.利用lingo,可以建立简单模型/基于集合的模型

    4.集合的表示和运用是lingo的重点

    5.lingo可以求出线性规划的解,发现无界解、无可行解,对于多重解只能给出一个解,无法提示该解释该解是多重解的一个。

    6.简单模型,两部分:目标函数和约束条件

    目标函数:min/max=表达式,不要写z

    约束条件:变量的非负约束是默认约束,如果某些变量是负数约束,要显式写出来

    注:乘号*不能省略;目标函数和约束条件的顺序没有要求

     不写默认约束

     不区分大小写

    ctrl +滚轮向上,字号变大

     注释以!开头

    重点:基于集合的专业模型

    三部分组成集合的专业模型

    第一部分:集合定义部分

    第二部分:数据定义部分

    第三部分:目标函数与约束条件定义部分

    !注释;

    model:

    sets:

    endsets

    data:

    enddata

    end

    线性规划的三种形式

    模型的一般形式:写到论文上的形式

    向量形式--》矩阵形式

     

     

     约束条件多,变量多

    集合的运用表示

     

     

     

     

     

     

     

     

     

     

     

     错误示例:

     正确:

     

     

     

     

     

     

     非线性规划采用全局求解器

     

     数学函数

     

     

     

     

     

     

     

     

     

     

     

     

     原始集合

     

     

     

     

     

     

     此处集合有顺序

     

    1. model:
    2. sets:
    3. item/1..10/:weight,profit,x;
    4. endsets
    5. data:
    6. weight=6 3 4 5 1 2 3 5 4 2;
    7. profit=540 200 180 350 60 150 280 450 320 120;
    8. enddata
    9. max=@sum(item(i):profit(i)*x(i));
    10. @sum(item(i):weight(i)*x(i))<=30;
    11. @for(item(i):@bin(x(i)));
    12. end

     

    起始只能从1开始

     

     

    集合元素放到数据段中赋值

     

     

    集合遍历函数

     

     

     

     

     练习

     

    1. model:
    2. sets:
    3. item:weight,profit,x;
    4. endsets
    5. data:
    6. item weight profit=
    7. 1 6 540
    8. 2 3 200
    9. 3 4 180
    10. 4 5 350
    11. 5 1 60
    12. 6 2 150
    13. 7 3 280
    14. 8 5 450
    15. 9 4 320
    16. 10 2 120
    17. ;
    18. enddata
    19. max=@sum(item(i):profit(i)*x(i));
    20. @sum(item(i):weight(i)*x(i))<=30;
    21. @for(item(i):@bin(x(i)));
    22. totalw=@sum(item:weight);
    23. totalp=@sum(item:profit);
    24. sigma_x=@sum(item:x);
    25. sigma_w=@sum(item:weight*x);
    26. p=@prod(item:weight);
    27. max_w=@max(item:weight);
    28. min_w=@min(item:weight);
    29. max_p=@max(item:profit);
    30. min_p=@min(item:profit);
    31. end

     

    1. model:
    2. sets:
    3. A/1..10/:x;
    4. endsets
    5. @for(A(i)|i#le#5:x(i)=i^2);
    6. @for(A(i)|i#gt#5:x(i)=@sqrt(i));
    7. end

     

    1. model:
    2. sets:
    3. A/1..10/:x;
    4. endsets
    5. @for(A(i)|i#le#5:x(i)=i^2);
    6. @for(A(i)|i#gt#5:x(i)=@sqrt(i));
    7. p = @prod(A(i)|i#le#5:x(i));
    8. s = @sum(A(i)|i#gt#5:x(i)^2);
    9. end

     

     逻辑表达式,不能用大于小于号,要用逻辑符号表示,逻辑表达式仅用于集合遍历和操作函数

     

     

     ​​​​​​​

     

     ​​​​​​​

     

    lingo可以直接接收来自txt、excel的复制的数据

     

     

     

     右键,定义名称

     

     定义名称的数据是单个数据、向量、矩阵,分别选中即可,右键选择定义名称

     

     另一种

     以上是读取

    下面包括写

     读和写的数据块都要在excel中事先定义好

  • 相关阅读:
    查找算法【哈希表】 - 简介
    【Algorithm】逆元
    uniapp制作安卓原生插件踩坑
    30天刷题训练(一)
    Vue 组件封装
    做个清醒的程序员之拒绝工作
    面试被吊打!正确打开Redis分布式锁的七种方案,涨见识了
    Power Apps-库组件样式调整
    sed命令
    javaScript编译器,Babel详解!
  • 原文地址:https://blog.csdn.net/weixin_54010759/article/details/126438803