LINGO是Linear Interactive and General Optimizer的缩写,即“交互式的线性和通用优化求解器”,可以用于求解非线性规划,也可以用于一些线性和非线性方程组的求解等,功能十分强大,是求解优化模型的最佳选择。
其特色在于内置建模语言,提供十几个内部函数,可以允许决策变量是整数(即整数规划,包括 0-1 整数规划),方便灵活,而且执行速度非常快。
目录
一、LINGO中的运算符
算术运算符 | +(加)、-(减)、*(乘)、/(除)、^(乘方) |
逻辑运算符 | #AND#(与),#OR#(或),#NOT#(非) |
#EQ#(等于),#NE# (不等于),#GT#(大于),#GE#(大于等于),#LT#(小于),#LE#(小于等于) | |
关系运算符 | <,=,>(在优化模型中没有严格的小于、大于关系) |
二、LINGO中的函数
LINGO 中的内部函数都以”@”符号打头,这里介绍几个常用的函数。
1、集合循环函数@function
集循环函数遍历整个集进行操作。
其语法为 @function(setname[(set_index_list)[|conditional_qualifier]]:expression_list);
setname是要遍历的集;
set_ index_list是集索引列表;
conditional_qualifier是用来限制集循环函数的范围,当集循环函数遍历集的每个成员时,LINGO都要对conditional_qualifier进行评价,若结果为真,则对该成员执行@function操作,否则跳过,继续执行下一次循环;
expression_list是被应用到每个集成员的表达式列表,当用的是@for函数时,expression_list可以包含多个表达式,其间用逗号隔开。
@FOR | 集合元素的循环函数 | 对集合setname的每个元素独立地生成表达式,表达式由expression_list描述 |
![]() |
@MAX | 集合属性的最大值函数 | 返回集合setname上的表达式的最大值 |
![]() 后3个值的最大值。 |
@MIN | 集合属性的最小值函数 | 返回集合setname上的表达式的最小值 | |
@SUM | 集合属性的求和函数 | 返回集合setname上的表达式的和 |
![]() |
@PROD | 集合属性的乘积函数 | 返回集合setname上的表达式的积 |
![]() |
2、变量定界函数
对变量的取值范围附加限制,共有以下四种:
@BND(L, X, U) :限制L <= X <= U
@BIN(X) :限制X为0或1
@FREE(X):取消对X的符号限制(即可取负数、0或正数)
@GIN(X):限制X为整数
3、文件输出输出函数
@FILE(filename) 当前模型引用其他ASCII码文件中的数据或文本时可以采用该语句(但不允许嵌套使用),其中filename为存放数据的文件名,该文件中记录之间用“~”分开。
@TEXT([‘filename’]) 用于数据段中将解答结果送到文本文件filename中,当省略filename时,结果送到标准的输出设备(通常就是屏幕)。filename中可以带有文件路径,没有指定路径时表示在当前目录,如果这个文件已经存在,将会被覆盖。
@OLE提供LINGO与OLE(Object Linking and Embeding)接口。
@POINTER ( N)在Windows下使用LINGO的动态连接库DLL ,直接从共享的内存中传送数据。
@ODBC 提供LINGO与ODBC(Open Data Base Connection,开放式数据库连接)的接口。
三、LINGO的文件格式
“LG4”表示LINGO 格式的模型文件,是一种特殊的二进制格式文件,保存了我们在模型窗口中所能够看到的所有文本和其他对象及其格式信息,只有LINGO 能读出它,用其他系统打开这种文件时会出现乱码。
“LNG”表示LINGO文本文件,以这个格式保存模型时系统 将给出警告,因为模型中的格式信息(如字体、颜色等)将会丢失。
“LDT”表示数据文件
“LTF”表示命令脚本文件
“LGR”表示报告文件
四、LINGO的基本用法和注意事项
- 变量和行名可以超过8 个字符,但不能超过32 个字符,且必须以字母开头
- 模型以max=(或min=)开始表示目标函数
- 系数与变量之间的运算符(*)不能省略
- 每行用分号(;)表示结束
- LINGO 已假定各变量非负(除非用函数@free等另行说明)
- 变量可以放在约束条件的右端(同时数字也可放在约束条件的左端)
- 但为了提高效率,应尽可能采用线性表达式定义目标和约束(如果可能)
- LINGO总是根据“MAX=”或“MIN=”寻找目标函数,而除注释语句和TITLE语句外的其他语句都是约束条件,因此语句的顺序并不重要
- LINGO有三种关系运算符:“=”、“<=”和“>=”。LINGO中还能用“<”表示小于等于关系,“>”表示大于等于关系。LINGO并不支持严格小于和严格大于关系运算符
- 限定变量取整数值的语句为“@GIN(X1)”和“@GIN(X2)” 。 LINGO中函数一律需要以“@”开头,其中整型变量函数是@BIN、@GIN和上下界限定函数是@FREE、@SUB、@SLB
- 以感叹号开始的是说明语句(说明语句也需要以分号结束)