1.软件介绍:
Lingo(linear interactive and general optimiuzer)的基本含义是交互式的线性和离散化求解器,是主要用来求解优化问题的软件
最大特色:允许优化问题中的决策变量为整数,可求解整数规划,而且执行速度快
2.求解线性规划问题:
例1:
解:
例2:
解:切割模式共七种如下:
xi 代表第 i 种切割模式所需要的数量
3.Lingo中的集
集是一群相联系的对象,这些对象也称为集的成员
每个集成员可以有一个或多个与之有关联的属性
Lingo有两种类型的集:原始集和派生集
(1)定义原始集
集成员列表
有显式罗列和隐式罗列两种方式
- 显示罗列:将集成员一个一个写出,中间用逗号隔开,如:
sets:
niu/A,C,F/:x;
endsets - 隐式罗列:只需要写出第一个集成员和最后一个集成员,中间用省略号连接,如:
sets:
yang/1..8/:x,y;
endsets
(2)定义派生集
由其他集(父集)定义的集合称为派生集,如:
sets:
niu1/1..5/;
niu2/2,4,7/;
nn(niu1,niu2):x;
endsets
注:属性 x 类似于 x[ i ][ j ] ,其中 i ∈ [ 1 , 5 ] , j = { 2 , 4 , 7 }
若派生集成员由父集成员所有的组合构成,称该集为稠密集
若派生集的成员为父集成员所有组合构成的一个子集,这样的派生集称为稀疏集
稠密集
稠密集的定义方法:
setname(parent_set_list):attribute_list;
例:定义以下变量:a[ i ] , b[ j ] , c[ i ][ j ] , x[ i ][ j ] ,其中 i ∈ [ 1 , 9 ] , j ∈ [ 1 , 7 ]
稀疏集
稀疏集的定义方法:
setname(parent_set_list)/member_list/:attribute_list;
- 显示罗列:
sets:
niu1/1..5/;
niu2/2,4,7/;
nn(n1,n2)/1,2,4,2,5,7/:x;
endsets - 隐式罗列:(定义二维数组)
sets:
nu1/1..5/;
nu2/1..4/;
nn(nu1,nu2)|&1#gt#2#and#&2#lt#3:x
(3)数据部分
<1>对成员属性赋值
格式:
例:建立一个有4个成员的集合,其中成员由两个属性 t 和 w ,其值为 13 , 16 , 19 , 15 与 42 , 51 , 61 , 53
解:
若指定属性为一个值,则赋值格式为:
若只需要给某几个数赋值,则用逗号表示不需要赋值的位置:
<2>参数赋值
4.运算符
运算符优先级
优先级 | 运算符 |
最高 | #NOT# , -(负号) |
^ | |
* , / | |
+ , -(减法) | |
#EQ# , #NE# , #GT# , #GE# , #LT# , #LE# | |
#AND# , #OR# | |
最低 | < , <= , = , > , >= |
逻辑运算符
5.数学函数
6.其他常用函数
例:
解:
7.集循环函数
@for,@sum,@max,@min