Lingo

LINGO运算符与函数

常用运算符

  1. 算数运算符
    ^次方, *乘, /除, +加, -减
     
  2. 逻辑运算符
    Lingo
     
  3. 关系运算符
    • = 表达式左右相等
    • <= 表达式左边<=右边
    • >= 表达式右边>=左边

LINGO没有单独的'>' '<',二者出现是会被认为是省略了'='

不同种类运算符混合时的优先级为:单目>双目;算数>逻辑>关系,平级从左到右,括号改变次序。

 

数学函数

Lingo

 

概率函数

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结束,单独成行。数据间的','与空格可互相替换

 

  • 集合操作函数
    Lingo
    Lingo
    表中前5个函数形式均为:
    @函数名(集合名|条件:表达式)
    '|'后的条件可选,通常是逻辑表达式,表示满足一定条件的元素才进行表达式的操作。
    eg:
@FOR(VD(J)|J#NE#5:表达式e) !VD集合的成员序号J!=5时生成约束表达式e;

 

变量定界函数

LINGO默认变量取值为0~INF,变量定界函数用于改变默认状态。
Lingo
 
@BND函数可以用约束条件代替,但是使用BND函数表达变量的取值范围比使用约束条件速度更快,且函数语句不计入约束条件数目。
(这些是变量界定函数,界定表达式会报错。。。。)
 

文件输入输出函数

Lingo
 

金融函数

主要用于计算净现值。
Lingo

 

结果报告函数

Lingo
 

其他函数

  1. @WAN("文字信息", 逻辑表达式)
    逻辑表达式为TRUE则输出文字信息。
  2. @IF(逻辑表达式,表达式为真时的值,表达式为假时的值)
    常用于表达分段函数
  3. @USER()
    允许用户使用C语言或FORTRAN语言编写并编译函数(obj或dll文件),返回用户函数的计算结果。
     

示例:

Lingo
Lingo

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
上一篇:使用tensorflow2 对股票的信息进行预测


下一篇:LSTM