Lingo · 深度入门手册
分类:专业软件 | 难度:★☆☆ 入门 | 编号:
lingo
一、这是什么(一句话用途)
专门求解线性/整数/非线性规划的语言化建模软件,写约束像写数学。
二、核心定位
用 @SUM/@MAX 等集合语言描述模型,软件自动调用求解器(单纯形/分支定界)出最优。
三、核心原理剖析
Lingo 的精髓是"建模语言(Algebraic Modeling Language)"——它把运筹优化从"手写矩阵"提升到"用集合与下标写数学"的层面。用户只需声明集合(SETS)、定义变量与参数的维度关系,再用 @SUM/@FOR/@MAX 等运算符写出目标与约束,Lingo 在后台自动把这些高层描述展开成标准的矩阵形式(约束系数矩阵 、右端项 ),再调用内置求解器求解。这种"声明式"的好处是模型可读、易改、易扩展(加一个约束只加一行),特别适合建模竞赛里那些变量成百上千、约束结构规则的运输/排产/网络优化题。
四、底层机制与推导
Lingo 把集合模型编译为线性规划标准型后,调用单纯形/内点法(线性)或分支定界(整数)。以集合 WH/1..3/ 与变量 x(i) 为例,@SUM(WH(i): a(i)*x(i)) 被展开为 ,@FOR(WH(i): x(i)<=10) 展开为 。
整数规划部分:Lingo 用分支定界,先解 LP 松弛上界,对分数变量 分支 与 。对 0-1 变量用 @BIN(x)(即 ),连续变量用 @GIN(x)(整数)。求解状态在 Reports 窗口给出,Reduced Cost(缩减成本)表示某非基变量单位增加目标的变化,对偶价格(Dual Price)表示对应约束右端项单位松弛带来的目标改进——二者就是线性规划对偶理论里的影子价格 。
五、上手步骤
- 建模型文件(.lg4)
- 用 SETS 定义集合
- 写目标 @OBJECTIVE
- 写约束 @FOR/@SUM
- 求解看 Reports 窗口
六、关键命令 / 语法 / 界面要点
MODEL:
SETS: WH/1..3/:a,x; ENDSETS
MAX=@SUM(WH(i):a(i)*x(i));
@FOR(WH(i): x(i)<=10);
END
七、最小可跑示例
生产两种产品、受工时约束、最大化利润——用 @SUM 写目标、@FOR 写约束即可求解。
八、学习资源 / 去哪学
Lingo 官方(有教育版限制变量数);内置帮助与示例模型;适合国赛/美赛运筹题。
九、常见坑(避坑清单)
- 集合下标从 1 开始
- 变量默认连续,整数要 @GIN/@BIN
- 教育版变量数受限
- 单位/量纲要统一
十、怎么算用好了
Solver Status 看求解状态(Feasible/Optimal);看 Reduced Cost / 对偶价格判断资源价值。
十一、能跑哪些建模算法
专攻:线性规划、整数规划、网络优化、运输问题。
本手册由「工具入门手册生成器」自动产出(深度版),与算法深度手册同套体系。
实战案例
LINGO 线性规划实战
场景:工厂生产计划,3 种产品共享 4 类资源,求最大利润。
任务:用 LINGO 建模并求解该线性规划。
完整代码(lingo)
MODEL:
! 目标:最大化利润;
MAX = 40*X1 + 50*X2 + 60*X3;
! 资源约束;
2*X1 + 3*X2 + 4*X3 <= 100; ! 原料A;
X1 + 2*X2 + 3*X3 <= 80; ! 原料B;
3*X1 + X2 + 2*X3 <= 90; ! 工时;
X1 >= 0; X2 >= 0; X3 >= 0;
END
运行效果
Global optimal solution found.
Objective value: 1900.000
X1 = 10.00000
X2 = 20.00000
X3 = 10.00000
最大利润 = 1900(生产衬衫10/裤子20/外套10件)