核心结论,LINGO 是专门求解线性规划、整数规划、非线性规划的数学优化软件,核心目标就是建立目标函数、设置决策变量、添加约束条件,然后运行求解最优解,常用于运筹学课程、数学建模,入门重点掌握建模语法、集 sets、数据段、求解窗口,新手最容易出错的地方是变量默认非负、语法分号不能漏、不等号写法,下面按入门流程完整讲解。
软件基础介绍
| 项目 | 内容 |
|---|---|
| 软件名称 | LINGO |
| 开发商 | LINDO 系统公司 |
| 主要用途 | 线性规划 LP、整数规划 IP、非线性规划 NLP |
| 适用场景 | 运筹学作业、数学建模、生产调度、资源分配 |
| 默认规则 | 决策变量默认大于等于 0,不需要额外写 >=0 |
基础语法规则
1 每一行语句末尾必须加分号;
2 不区分大小写,变量名可以字母开头,支持下划线
3 注释用!开头,注释结尾也要加;
4 不等号:>= 大于等于,<= 小于等于,不能用 ≥ ≤ 符号
5 目标函数写法:MAX= 或者 MIN= 开头
最简线性规划示例
例题:max z=3x1+2x2
约束:
x1+x2 <= 6
2x1+x2 <= 8
LINGO 代码
MAX = 3x1 + 2x2;
x1 + x2 <= 6;
2x1 + x2 <= 8;
写完之后,点击工具栏红色求解按钮,弹出 Solution Report 求解报告,里面可以看到最优目标值、变量最优取值、松弛变量、影子价格。
进阶核心:集 SETS 模块
当变量数量很多,比如批量决策变量,就用 sets,不用逐个写 x1 x2 x3,这是 LINGO 重点考点。
SETS:
VARIABLES /1..5/: x;
ENDSETS
MAX = @SUM(VARIABLES(i): 3x(i));
@FOR(VARIABLES(i): x(i) <= 10);
常用内置函数
@SUM 求和
@FOR 循环约束
@BIN 整数变量 (0 或 1 整数规划)
@GIN 普通整数变量
@FREE 取消变量默认非负,允许变量取负数
整数规划写法
如果要求变量必须是整数,加上 @GIN (x1); 如果是 0-1 变量,写 @BIN (x1);
示例
MAX = 5x1 + 4x2;
x1 + x2 <= 10;
@GIN(x1);
@GIN(x2);
操作步骤
第一步 新建空白模型,在代码编辑窗口输入模型代码
第二步 检查语法,确认分号、运算符、函数拼写无误
第三步 点击 Solve 求解
第四步 查看 Solution Report,读取最优目标值和变量解
第五步 如果需要,还可以生成灵敏度分析报告,查看影子价格
常见报错
| 报错现象 | 原因 |
|---|---|
| Syntax Error 语法错误 | 缺少分号,符号写错,变量名非法 |
| Infeasible 无可行解 | 约束互相矛盾,不存在满足全部约束的解 |
| Unbounded 无界解 | 缺少约束,目标可以无限增大 |
| 变量出现负数 | 没有加 @FREE,默认变量非负 |
FAQ
问题 1 lingo 教程 LINGO 变量默认是不是必须大于等于 0
回答 1 lingo 教程,LINGO 默认所有决策变量 >=0,如果需要允许负变量,必须写 @FREE (变量名)。
问题 2 lingo 教程 @BIN 和 @GIN 有什么区别
回答 1 lingo 教程,@BIN 是 0-1 整数变量,只能取 0 或者 1,@GIN 是普通整数,可以取任意整数。
问题 3 lingo 教程 LINGO 可以解非线性规划吗
回答 3 lingo 教程,LINGO 支持非线性规划 NLP,可以写平方、三角函数这类非线性目标和约束,但是非线性问题容易得到局部最优解。
免责声明 本文 lingo 教程相关内容仅为软件学习参考,不同版本 LINGO 菜单和函数细节存在差异,数学建模正式使用请核对官方手册。


