1.软件介绍:

Lingo(linear interactive and general optimiuzer)的基本含义是交互式的线性和离散化求解器,是主要用来求解优化问题的软件

最大特色:允许优化问题中的决策变量为整数,可求解整数规划,而且执行速度快

2.求解线性规划问题:

例1:

解: 

min=2*x1+3*x2;
x1+x2>=350;
x1>=100;
2*x1+x2<=600;
x2>=0;

 例2:

 解:切割模式共七种如下:

xi 代表第 i 种切割模式所需要的数量

min=x1+x2+x3+x4+x5+x6+x7;
4*x1+3*x2+2*x3+x4+x5>=50;
x2+2*x4+x5+3*x6>=20;
x3+x5+2*x7>=15;
@gin(x1);
@gin(x2);
@gin(x3);
@gin(x4);
@gin(x5);
@gin(x6);
@gin(x7);
3.Lingo中的集

集是一群相联系的对象,这些对象也称为集的成员

每个集成员可以有一个或多个与之有关联的属性

Lingo有两种类型的集:原始集和派生集

(1)定义原始集

sets:
setname(集名)/merber_list(集成员列表)/:attribute_list(成员属性列表);
endsets

集成员列表

有显式罗列和隐式罗列两种方式

  1. 显示罗列:将集成员一个一个写出,中间用逗号隔开,如:
    sets:
    niu/A,C,F/:x;
    endsets
  2. 隐式罗列:只需要写出第一个集成员和最后一个集成员,中间用省略号连接,如:
    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 ]

sets:
nu1/1..9/:a;
nu2/1..7/:b;
nn(nu1,nu2):c,x;
endsets

稀疏集 

稀疏集的定义方法:

setname(parent_set_list)/member_list/:attribute_list;

  1. 显示罗列:
    sets:
    niu1/1..5/;
    niu2/2,4,7/;
    nn(n1,n2)/1,2,4,2,5,7/:x;
    endsets
  2. 隐式罗列:(定义二维数组)
    sets:
    nu1/1..5/;
    nu2/1..4/;
    nn(nu1,nu2)|&1#gt#2#and#&2#lt#3:x

(3)数据部分

<1>对成员属性赋值

格式:

data:
object_list=value_list;
enddata

例:建立一个有4个成员的集合,其中成员由两个属性 t 和 w ,其值为 13 , 16 , 19 , 15 与 42 , 51 , 61 , 53

解:

sets:
red/a,b,c,d/:t,w;
endsets
data:
t=13,16,19,15;
w=42,51,61,53;
enddata

若指定属性为一个值,则赋值格式为:

data:
t,w=40,9;
enddata

若只需要给某几个数赋值,则用逗号表示不需要赋值的位置:

sets:
num/1..6/:x;
endsets
data:
x=40,9,,,,5;
enddata

<2>参数赋值

data:
p,q=0.85,?;
enddata
4.运算符

运算符优先级

优先级运算符
最高#NOT# , -(负号)
 ^
 * , /
 + , -(减法)
 #EQ# , #NE# , #GT# , #GE# , #LT# , #LE#
 #AND# , #OR#
最低< , <= , = , > , >=

逻辑运算符

5.数学函数

6.其他常用函数

 

 

例:

解:

min=fx+gy;
fx=@if(x#gt#0,100,0)+2*x;
gy=@if(y#gt#0,60,0)+3*y;
x+y>=30;
7.集循环函数

@for,@sum,@max,@min