1.软件介绍:

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

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

2.求解线性规划问题:

例1:

解:

例2:

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

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

3.Lingo中的集

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

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

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

(1)定义原始集

集成员列表

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

  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 ]

稀疏集

稀疏集的定义方法:

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>对成员属性赋值

格式:

例:建立一个有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