Lingo是用于求解线性规划、非线性规划、整数规划的专门软件。使用Lingo建模语言描述问题后,软件能自动化为标准形式,并根据问题选择相应的求解器。
Lingo代码每行以分号结尾。变量和关键字不区分大小写。除Calc段和Init段外,代码各行的顺序随意。
Lingo中变量不需要定义直接使用。默认变量类型为非负实数。使用
@FREE(x) !移除非负约束
@GIN(x) !添加整数约束
@BND(lower_bound, x, upper_bound) !上下界约束
@SEMIC( lower_bound, variable, upper_bound) !上下界或零
Lingo中没有”数组”的概念,对应最接近的概念是”Set集合”。
Set是Lingo中的核心概念之一,是描述具有轮转和对称性约束的主要手段。
在Lingo中使用sets: …… endsets
关键字定义集合段。
定义一维集合
setname [/ member_list /] [: attribute_list];
WAREHOUSES /1..6/: location,price;
定义集合时也可以不指定大小,lingo会根据初始值的维度自动决定
定义二维集合
setname(parent_set_list) [ / member_list /] [: attribute_list];
SETS:
PRODUCT / A B/;
MACHINE / M N/;
WEEK / 1..2/;
ALLOWED(PRODUCT, MACHINE, WEEK);
ENDSETS
ALLOWED集合是PRODUCT和MACHINE集合的笛卡尔积。
若只需要生成部分集合,可手工指定成员列表
ALLOWED(PRODUCT, MACHINE, WEEK) / A M 1, A N 2<