LINGO运算符与函数
常用运算符
- 算数运算符
^次方, *乘, /除, +加, -减
- 逻辑运算符
- 关系运算符
- = 表达式左右相等
- <= 表达式左边<=右边
- >= 表达式右边>=左边
LINGO没有单独的'>' '<',二者出现是会被认为是省略了'='
不同种类运算符混合时的优先级为:单目>双目;算数>逻辑>关系,平级从左到右,括号改变次序。
数学函数
概率函数
集合操作函数
- 集合(SET)的定义
集合是一组相关对象构成的组合,代表模型中的实际事物。定义集合需要三个方面:- 集合名称
- 集合内的成员(元素)
-
集合属性(相当于数组)
eg:
WH/W1..W6/:AI;
- 多个集合可以构成衍生集合(派生集合)。定义衍生集合需要:
- 集合名称;
- 初始集合;
- 集合成员(可罗列除衍生集合的成员,省略则默认衍生集合成员取对应初始集合的所有可能的组合)
-
集合属性(可没有)
eg:
LINKS(WH,VD):C,X;
定义集合部分以语句SETS:开始,ENDSETS结束,单独成行且ENDSETS后不加 ';'
- 集合属性初始化
eg:
DATA:
WI=60,55,51,43,41,52;
VJ=35,37,22,32,41,32,43,38;
C=6,2,6,7,4,2,5,9
4,9,5,3,8,5,8,2
5,2,1,9,7,4,3,3
7,6,7,3,9,2,7,1
2,3,9,5,7,2,6,5
5,5,2,2,8,1,4,3;
ENDDATA
数据初始化以DATA:开始,ENDDAT结束,单独成行。数据间的','与空格可互相替换。
- 集合操作函数
表中前5个函数形式均为:
@函数名(集合名|条件:表达式)
'|'后的条件可选,通常是逻辑表达式,表示满足一定条件的元素才进行表达式的操作。
eg:
@FOR(VD(J)|J#NE#5:表达式e) !VD集合的成员序号J!=5时生成约束表达式e;
变量定界函数
LINGO默认变量取值为0~INF,变量定界函数用于改变默认状态。
@BND函数可以用约束条件代替,但是使用BND函数表达变量的取值范围比使用约束条件速度更快,且函数语句不计入约束条件数目。
(这些是变量界定函数,界定表达式会报错。。。。)
文件输入输出函数
金融函数
主要用于计算净现值。
结果报告函数
其他函数
- @WAN("文字信息", 逻辑表达式)
逻辑表达式为TRUE则输出文字信息。 - @IF(逻辑表达式,表达式为真时的值,表达式为假时的值)
常用于表达分段函数 - @USER()
允许用户使用C语言或FORTRAN语言编写并编译函数(obj或dll文件),返回用户函数的计算结果。
示例:
MODEL:
SETS:
cut_plan/1,2,3/:x; !下料方式,x_i表示第i种下料方式切割钢管的数量;
units/1,2,3,4/:l,need; !部件,l表示该部件长度,need表示该部件需求量;
cut_units(cut_plan,units):n; !n_ij表示用第i中下料方式获得的第j种部件的数量;
ENDSETS
DATA:
l=4,5,6,8;
need=50,10,20,15;
ZL=19;
ENDDATA
MIN=@SUM(cut_plan:x);
@FOR(units(j):@SUM(cut_plan(i):n(i,j)*x(i))>need(j));
!@FOR(cut_plan(i):@BND(16,@SUM(units(j):n(i,j)*l(j)),ZL));
@FOR(cut_plan(i):@SUM(units(j):n(i,j)*l(j))<=ZL);
@FOR(cut_plan(i):@SUM(units(j):n(i,j)*l(j))>=16);
@FOR(cut_plan:@GIN(x));
@FOR(cut_units:@GIN(n));
END
结果:
Variable | Value | Reduced Cost |
---|---|---|
ZL | 19.00000 | 0.000000 |
X( 1) | 10.00000 | 1.000000 |
X( 2) | 10.00000 | 1.000000 |
X( 3) | 8.000000 | 1.000000 |
L( 1) | 4.000000 | 0.000000 |
L( 2) | 5.000000 | 0.000000 |
L( 3) | 6.000000 | 0.000000 |
L( 4) | 8.000000 | 0.000000 |
NEED( 1) | 50.00000 | 0.000000 |
NEED( 2) | 10.00000 | 0.000000 |
NEED( 3) | 20.00000 | 0.000000 |
NEED( 4) | 15.00000 | 0.000000 |
N( 1, 1) | 3.000000 | 0.000000 |
N( 1, 2) | 0.000000 | 0.000000 |
N( 1, 3) | 1.000000 | 0.000000 |
N( 1, 4) | 0.000000 | 0.000000 |
N( 2, 1) | 2.000000 | 0.000000 |
N( 2, 2) | 1.000000 | 0.000000 |
N( 2, 3) | 1.000000 | 0.000000 |
N( 2, 4) | 0.000000 | 0.000000 |
N( 3, 1) | 0.000000 | 0.000000 |
N( 3, 2) | 0.000000 | 0.000000 |
N( 3, 3) | 0.000000 | 0.000000 |
N( 3, 4) | 2.000000 | 0.000000 |