MCM520 ← 资料站首页 Lingo · 深度入门手册 打开交互阅读器 →

Lingo · 深度入门手册

分类:专业软件 | 难度:★☆☆ 入门 | 编号:lingo

一、这是什么(一句话用途)

专门求解线性/整数/非线性规划的语言化建模软件,写约束像写数学。

二、核心定位

用 @SUM/@MAX 等集合语言描述模型,软件自动调用求解器(单纯形/分支定界)出最优。

三、核心原理剖析

Lingo 的精髓是"建模语言(Algebraic Modeling Language)"——它把运筹优化从"手写矩阵"提升到"用集合与下标写数学"的层面。用户只需声明集合(SETS)、定义变量与参数的维度关系,再用 @SUM/@FOR/@MAX 等运算符写出目标与约束,Lingo 在后台自动把这些高层描述展开成标准的矩阵形式(约束系数矩阵 AA、右端项 bb),再调用内置求解器求解。这种"声明式"的好处是模型可读、易改、易扩展(加一个约束只加一行),特别适合建模竞赛里那些变量成百上千、约束结构规则的运输/排产/网络优化题。

四、底层机制与推导

Lingo 把集合模型编译为线性规划标准型后,调用单纯形/内点法(线性)或分支定界(整数)。以集合 WH/1..3/ 与变量 x(i) 为例,@SUM(WH(i): a(i)*x(i)) 被展开为 ∑i=13aixi\sum_{i=1}^3 a_i x_i,@FOR(WH(i): x(i)<=10) 展开为 x1≤10, x2≤10, x3≤10x_1\le10,\ x_2\le10,\ x_3\le10。

整数规划部分:Lingo 用分支定界,先解 LP 松弛上界,对分数变量 xk=vx_k=v 分支 xk≤⌊v⌋x_k\le\lfloor v\rfloor 与 xk≥⌈v⌉x_k\ge\lceil v\rceil。对 0-1 变量用 @BIN(x)(即 x∈{0,1}x\in\{0,1\}),连续变量用 @GIN(x)(整数)。求解状态在 Reports 窗口给出,Reduced Cost(缩减成本)表示某非基变量单位增加目标的变化,对偶价格(Dual Price)表示对应约束右端项单位松弛带来的目标改进——二者就是线性规划对偶理论里的影子价格 λ=cBTB−1\lambda=c_B^T B^{-1}。

五、上手步骤

  1. 建模型文件(.lg4)
  2. 用 SETS 定义集合
  3. 写目标 @OBJECTIVE
  4. 写约束 @FOR/@SUM
  5. 求解看 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件)