您现在的位置是:首页 > 学识问答网站首页学识问答

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 软件编写,不同版本界面菜单 求解选项会有差异,教程仅用于运筹学数学建模学习参考,非线性模型求解结果受初始点设置影响,不保证一定得到全局最优解。

Top