您现在的位置是:首页 > 学识问答网站首页学识问答
lingo 基础教程 lingo 入门操作与建模详解
- 编辑:项燕娟
- 2026-11-08 22:21:21
- 来源:网易
lingo 是一款专门用于线性规划 非线性规划 整数规划的优化求解软件,广泛用于运筹学 数学建模 工程优化 供应链调度课程,基础学习核心就是掌握集定义 目标函数 约束条件编写 求解运行这四大模块,很多初学者卡壳是因为分不清 lingo 语法规则,比如变量默认非负 分号不能遗漏 集循环函数的写法,lingo 不需要手动设置变量上下限,软件默认所有变量大于等于零,如果需要负数变量必须单独声明,它的优势是语法接近数学公式,不需要像编程软件写大量循环代码,适合快速搭建优化模型,入门阶段先从最简单线性规划案例上手,理解模型三要素,再学习集和循环函数处理大规模变量,最后掌握结果报告解读。
软件基础认知
lingo 模型整体结构固定,一个完整模型一般包含可选的模型标题 集段 数据段 目标函数 约束段 结束语句,软件内置全局求解器 线性求解器 非线性求解器,根据模型类型自动匹配求解引擎,线性规划模型求解速度最快,非线性模型容易出现局部最优解,这是初学者必须了解的重点。
基础语法规则清单
1 每条语句结尾必须加分号,漏写分号是最常见报错原因
2 变量名称区分大小写,字母开头,可以包含数字,不能有空格特殊符号
3 默认所有决策变量非负,也就是大于等于 0
4 注释使用感叹号,感叹号后面文字为注释,不会参与求解
5 模型可以写 model 开头 end 结尾,简单小模型也可以省略
6 乘号使用星号,幂运算使用双乘号,不能直接写数学手写符号
基础模型编写分步流程
第一步 建立最简单线性规划案例
案例目标 最大化利润,满足资源约束
目标函数 max=3x1+5x2
约束
x1<=4
2x2<=12
3x1+2x2<=18
直接把代码输入 lingo 代码窗口,点击运行按钮,软件输出最优目标值和变量最优解
这个案例没有使用集,属于小型模型写法,适合零基础熟悉基础语法
第二步 集 sets 基础写法
当变量数量很多,逐个写 x1 x2 x3 会非常繁琐,就要使用集 sets,集相当于批量定义同类变量
基础语法
sets:
A /1..5/: x;
endsets
含义 定义集合 A,一共 5 个元素,对应变量 x,也就是 x1 到 x5
集还可以定义派生集,也就是两个集合组合,用来表达矩阵类变量,比如运输问题的产地销地变量
第三步 数据段 data 写法
data 段用来单独存放参数数值,把参数和公式分开,后续修改数据不用改动公式,适合做参数灵敏度分析
示例
data:
c=3 5;
b=4 12 18;
enddata
第四步 集循环函数
@sum 求和函数,对集合内元素求和
@for 循环约束,批量生成同类型约束,运输问题 指派问题核心就是 @for
示例
@for (A (i): x (i)<=10);
含义 集合 A 里面每一个元素对应的 x 变量,都满足小于等于 10
第五步 运行求解与结果解读
点击工具栏运行按钮,求解完成弹出 Solution Report 报告
报告核心项目清单
Objective value 目标最优值
Variable 变量名称
Value 变量最优取值
Reduced Cost 缩减成本
Slack or Surplus 松弛变量剩余变量
Dual Price 对偶价格影子价格
读懂这份报告是 lingo 基础教程的关键,对偶价格可以理解为约束资源每增加一单位,目标函数的变化量
常用内置函数对照表
| 函数 | 作用 | 适用场景 |
|---|---|---|
| @sum | 集合求和 | 目标函数批量求和 |
| @for | 批量循环约束 | 多约束批量生成 |
| @gin | 声明整数变量 | 整数规划 |
| @bin | 声明 01 变量 | 指派 选址 背包问题 |
| @abs | 绝对值 | 非线性模型 |
| @sqrt | 开平方 | 非线性计算 |
进阶基础要点
1 整数规划 在变量后面加 @gin (x),01 规划使用 @bin (x)
2 非线性规划 目标或者约束里面出现变量相乘 幂次,就属于非线性模型,求解容易陷入局部最优,可以开启全局求解器选项
3 灵敏度分析 在求解选项里面勾选灵敏度报告,可以得到目标系数变化范围 右端项变化范围,数学建模比赛经常需要这份报告
常见报错原因清单
1 缺少分号,语法报错
2 集定义错误,索引下标不匹配
3 非线性模型不收敛,提示无可行解或者局部最优
4 没有添加 @gin 但是手动要求整数,软件仍然按照连续变量求解
5 模型无可行解,约束互相矛盾
【常见问题】
问题 1 lingo 基础教程里面变量默认是不是非负
回答 1 在 lingo 基础教程语法规则里,所有决策变量默认非负,如果模型需要负变量,需要额外单独声明,不能直接默认允许负数。
问题 2 lingo 基础教程中 @for 函数是做什么的
回答 2 lingo 基础教程里面 @for 是集循环函数,作用是批量生成同类约束,适合大规模运筹模型,避免一行一行手写全部约束。
问题 3 lingo 基础教程求解之后 dual price 是什么意思
回答 3 lingo 基础教程结果报告里 dual price 也就是对偶价格影子价格,代表对应约束右端项增加一个单位,最优目标函数对应的变化数值。
问题 4 lingo 基础教程里面 @gin 和 @bin 区别是什么
回答 4 lingo 基础教程中 @gin 用来声明整数变量,@bin 用来声明 01 变量,只能取 0 或者 1,分别对应普通整数规划和 01 规划模型。
【免责申明】
本文 lingo 基础教程基于经典版本 LINGO 软件编写,不同版本界面菜单 求解选项会有差异,教程仅用于运筹学数学建模学习参考,非线性模型求解结果受初始点设置影响,不保证一定得到全局最优解。