优化模型与 lindo/lingo 优化软件

68
优优优优优 LINDO/LINGO 优优优优 优优优 优优优优优优优优 Tel:13594173719 Email:[email protected]

Upload: coby

Post on 14-Jan-2016

171 views

Category:

Documents


0 download

DESCRIPTION

优化模型与 LINDO/LINGO 优化软件. 温罗生 重庆大学数理学院 Tel:13594173719 Email:[email protected]. 1 ,从 Lindo 到 Lingo. 线性规划是优化方法中最基本,也是最重要的方法,最根本的原因是模型的规范性以及求解的高效率。其最基本的形式如下:. 当问题比较简单是,利用 Lindo 可以方便的求解。比如下面的问题 max 2x1+3x2 s.t. x1+x2 ≤ 2 x1-2x2≤1/2 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 优化模型与 LINDO/LINGO 优化软件

优化模型与 LINDO/LINGO优化软件

温罗生重庆大学数理学院Tel:13594173719

Email:[email protected]

Page 2: 优化模型与 LINDO/LINGO 优化软件

1 ,从 Lindo 到 Lingo

线性规划是优化方法中最基本,也是最重要的方法,最根本的原因是模型的规范性以及求解的高效率。其最基本的形式如下:

1 1 2 2

11 1 12 2 1 1

1 1 2 2

1 2

min

. .

, , , 0

n n

n n

m m mn n m

n

c x c x c x

s t a x a x a x b

a x a x a x b

x x x

Page 3: 优化模型与 LINDO/LINGO 优化软件

当问题比较简单是,利用 Lindo 可以方便的求解。比如下面的问题

max 2x1+3x2

s.t. x1+x2 ≤ 2

x1-2x2≤1/2

x1,x2 非负 按照 Lindo 的语法,写成 max 2x1+3x2

s.t. x1+x2 ≤ 2

x1-2x2≤1/2

end更多的例子可以

参见程序部分

Page 4: 优化模型与 LINDO/LINGO 优化软件

使用 LINDO 的一些注意事项1. “>” (或“ <” )号与“ >=” (或“ <=” )功能相同2. 变量与系数间可有空格 ( 甚至回车 ), 但无运算符3. 变量名以字母开头,不能超过 8 个字符4. 变量名不区分大小写(包括 LINDO 中的关键字)5. 目标函数所在行是第一行,第二行起为约束条件6. 行号 ( 行名 ) 自动产生或人为定义。行名以“)”结

束7. 行中注有“ !” 符号的后面部分为注释。如 : ! It’s Comment.8. 在模型的任何地方都可以用“ TITLE” 对模型命名

(最多 72 个字符),如: TITLE This Model is only an Example

Page 5: 优化模型与 LINDO/LINGO 优化软件

9. 变量不能出现在一个约束条件的右端10. 表达式中不接受括号“ ( )” 和逗号“ ,” 等任何符号 ,

例 : 400(X1+X2) 需写为 400X1+400X211. 表达式应化简,如 2X1+3X2- 4X1 应写成 -2X1+3X212. 缺省假定所有变量非负;可在模型的“ END” 语句后

用“ FREE name” 将变量 name 的非负假定取消13. 可在 “ END” 后用“ SUB” 或“ SLB” 设定变量上下

界 例如: “ sub x1 10” 的作用等价于“ x1<=10” 但用“ SUB” 和“ SLB” 表示的上下界约束不计入模

型的约束,也不能给出其松紧判断和敏感性分析。14. “END” 后对 0-1 变量说明: INT n 或 INT name15. “END” 后对整数变量说明: GIN n 或 GIN name

使用 LINDO 的一些注意事项

Page 6: 优化模型与 LINDO/LINGO 优化软件

状态窗口( LINDO Solver Status ) • 当前状态:已达最优解• 迭代次数: 18 次• 约束不满足的“量” ( 不是

“约束个数” ) : 0• 当前的目标值: 94• 最好的整数解: 94• 整数规划的界: 93.5• 分枝数: 1• 所用时间: 0.00 秒(太快

了,还不到 0.005 秒)• 刷新本界面的间隔 :1( 秒 )

Page 7: 优化模型与 LINDO/LINGO 优化软件

选项设置• Preprocess :预处理 ( 生成割平面 ) ;• Preferred Branch :优先的分枝方式:

“Default” (缺省方式)、“Up” (向上取整优先)、“Down” (向下取整优先);

• IP Optimality Tol : IP 最优值允许的误差上限(一个百分数,如 5% 即 0.05 );• IP Objective Hurdle : IP 目标函数的篱笆值,即只寻找比这个值更优最优解(如当知道当前模型的某个整数可行解时,就可以设置这个值);• IP Var Fixing Tol :固定一个整数变量取值所依据的一个上限(如果一个整数变量的判别数( REDUCED COST )的值很大,超过该上限,则以后求解中把该整数变量固定下来)。

Nonzero Limit :非零系数的个数上限;Iteration Limit :最大迭代步数;Initial Contraint Tol :约束的初始误差上限;Final Contraint Tol :约束的最后误差上限;Entering Var Tol :进基变量的 REDUCED COST 的误差限;Pivot Size Tol :旋转元的误差限

Page 8: 优化模型与 LINDO/LINGO 优化软件

Report/Statistics

第一行:模型有 5 行(约束 4 行), 4 个变量,两个整数变量(没有 0-1 变量),从第 4 行开始是二次规划的实际约束。

第二行:非零系数 19 个,约束中非零系数 12 个 ( 其中 6 个为 1 或 -1) ,模型密度为 0.760( 密度 = 非零系数 /[ 行数* ( 变量数+1 )]) 。

第三行的意思:按绝对值看,系数最小、最大分别为 0.3 和 277 。第四行的意思:模型目标为极小化;小于等于、等于、大于等于约

束分别有2、0、2个;广义上界约束( GUBS )不超过1个;变量上界约束( VUBS )不少于0个。所谓 GUBS ,是指一组不含有相同变量的约束;所谓 VUBS ,是指一个蕴涵变量上界的约束,如从约束 X1+X2-X3=0 可以看出,若 X3=0 ,则 X1=0 ,X2=0 (因为有非负限制),因此 X1+X2-X3=0 是一个 VUBS 约束。

第五行的意思:只含1个变量的约束个数 =0个;冗余的列数 =0个

ROWS= 5 VARS= 4 INTEGER VARS= 2( 0 = 0/1) QCP= 4NONZEROS= 19 CONSTRAINT NONZ= 12( 6 = +-1) DENSITY=0.760SMALLEST AND LARGEST ELEMENTS IN ABSOLUTE VALUE= 0.300000 277.000OBJ=MIN, NO. <,=,>: 2 0 2, GUBS <= 1 VUBS >= 0SINGLE COLS= 0 REDUNDANT COLS= 0

Page 9: 优化模型与 LINDO/LINGO 优化软件

但是当问题的规模扩大时,前面的方法显得非常不方便甚至是致命的。主要的原因是所含的变量和约束个数太多。另一方面,规划问题本身很有规律,所以我们希望使用循环来实现。引入如下的两个数组(或者向量),

C=(c1,c2,…,cn),

X=(x1,x2,…,xn),

b=(b1,b2,…,bm) ,

Page 10: 优化模型与 LINDO/LINGO 优化软件

我们可以得到下面的对应关系

c1x2+c2x2+…+cnxn

s=0

for i=1:n

s=s+c(i)*x(i)

end

Page 11: 优化模型与 LINDO/LINGO 优化软件

a11x1+a12x2+…+a1nxn<b1

a21x1+a22x2+…+a2nxn<b2

。。。 。。。

am1x1+am2x2+…+amnxn<bm

for i=1:m

for j=1:n

s(i)=s(i)+a(i,j)*x(j)

end

s(i)<b(i)

end

右边是程序语言的一个比喻写法,为实现循环结构, Lingo 中引入了几个循环语句: @for(),@sum(),@min(),@max.

Page 12: 优化模型与 LINDO/LINGO 优化软件

为此,需要定义一个数组(向量)的结构,在 Lindo 中称之为集合。表征数组的维数的量在循环中有非常重要的作用。在 Lindo 中如下定义数组。

sets: setname/ 下标起数 .. 下标止数 /: 数组名; endsets 比如,要实现前面例子的目标函数部分,只要写如下

的代码: 集合段部分: sets: cargo/1..2/:c,x; endsets 目标函数段: max=@sum(cargo(i):c(i)*x(i)); 其中 i 为循环变量, cargo 指出循环变量变化的范围。

Page 13: 优化模型与 LINDO/LINGO 优化软件

对于约束,可以类似的处理如下: 集合部分: sets:

cargo/1..n/:c,x,a1,a2,…,am;

rhs/1..m/:b;

endsets

程序部分: @sum(cargo(i):a1(i)*x(i))<b(1);

@sum(cargo(i):a2(i)*x(i))<b(2);

… …

@sum(cargo(i):am(i)*x(i))<b(m);

Page 14: 优化模型与 LINDO/LINGO 优化软件

可以看到,当 m 的值比较大时,书写还是感到麻烦,所有,可以考虑在利用循环实现。

要实现二重循环,并且其中可以将系数作出一个矩阵(二维数组),所有定义

11 1

1

n

m mn

a a

A

a a

这是矩阵 A 的行列数是 m 和 n, 可以看成由向量 X 和 b 派生。

Page 15: 优化模型与 LINDO/LINGO 优化软件

于是为得到约束条件,可以如下的定义集合段和约束部分。

集合部分: sets:

cargo/1..n/:c,x;

rhs/1..m/:b;

mat(rhs,cargo):a;

endsets

程序部分: @for(rhs(j):@sum(cargo(i):a(j,i)*x(i))<b(j));

j 为循环变量, rhs 指出需要循环的次数。

Page 16: 优化模型与 LINDO/LINGO 优化软件

从上面的例子大家看出引入集合的作用以及基本的用法,下面的部分给出 Lingo 的整体结构和更复杂的例子。

Page 17: 优化模型与 LINDO/LINGO 优化软件

2 , Lingo 程序的结构和语法 一个规划问题,包括下面的一些内容:变量、常量、目标、约束。还是以

前面的例子,说明最基本的程序构成。 model: linear programming sets: cargo/1..n/:c,x; rhs/1..m/:b; mat(rhs,cargo):a; endsets data c=2,3; b=2,1/2; A=1,1,1,-2; enddata max=@sum(cargo(i):c(i)*x(i)); @for(rhs(j):@sum(cargo(i):a(j,i)*x(i))<b(j));

Page 18: 优化模型与 LINDO/LINGO 优化软件

前面是两个循环语句的用法,函数以“ @” 开头,里面是循环变量以及界定循环变量的变化范围,后面是循环体。还有另外的两个循环函数: @min 和 @max ,其用法相类似。

从一维数组派生二维数组在数学上是常用的,比如运输问题,由顶点集可以派生边,大家可以使用本方法产生标准的运输问题的 Lingo 程序。可以参考例子。

Page 19: 优化模型与 LINDO/LINGO 优化软件

LINGO 模型 — 例:选址问题某公司有 6 个建筑工地,位置坐标为 (ai, bi) (单位:公里 ),水泥日用量 di (单位:吨)i 1 2 3 4 5 6 a 1.25 8.75 0.5 5.75 3 7.25 b 1.25 0.75 4.75 5 6.5 7.75 d 3 5 4 7 6 11

1)现有 2料场,位于 A (5, 1), B (2, 7),记(xj,yj),j=1,2, 日储量 ej各有 20吨。

假设:料场和工地之间有直线道路

目标:制定每天的供应计划,即从 A, B两料场分别向各工地运送多少吨水泥,使总的吨公里数最小。

Page 20: 优化模型与 LINDO/LINGO 优化软件

用例中数据计算,最优解为

i 123456

1ic(料场A)350701

2ic(料场B)0040610

总吨公里数为总吨公里数为 136.2136.2

2,1,

6,...,1,..

])()[(min

6

1

2

1

2

1

6

1

2/122

jec

idcts

byaxc

jij

i

iij

j

j i

ijijij

线性规划模型

决策变量: ci j

(料场 j 到工地 i

的运量) ~12维

Page 21: 优化模型与 LINDO/LINGO 优化软件

选址问题: NLP

2 )改建两个新料场,需要确定新料场位置 (xj,yj)

和运量 cij ,在其它条件不变下使总吨公里数最小。

2,1,

6,...,1,..

])()[(min

6

1

2

1

2

1

6

1

2/122

jec

idcts

byaxc

jij

i

iij

j

j i

ijijij 决策变量:ci j , (xj,yj)~16

非线性规划模型

location

Page 22: 优化模型与 LINDO/LINGO 优化软件

LINGO 模型的构成: 4 个段集合段( SETS ENDSETS )

数据段( DATA ENDDATA )

初始段( INIT ENDINIT )

目标与

约束段

局部最优: 89.8835(吨公里 )

LP :移到数据段

Page 23: 优化模型与 LINDO/LINGO 优化软件

边界

Page 24: 优化模型与 LINDO/LINGO 优化软件

上面讲到图的问题,但是实际中的图往往是稀疏图,这样的问题尽管可以用前面的方法处理,但是计算量往往非常的大,是不实际的。下面讲由顶点集派生边集的例子。

5

6

7

7

4 9

6

8

6

5

8

3

3

6C1

B1

C2B2

A1

A2

A3

TS

6

Page 25: 优化模型与 LINDO/LINGO 优化软件

前图是有九个顶点组成的图,连线代表顶点之间的边,其上的数字代表边的长度。要求得到所有顶点到顶点 T 的最短距离。分析 Lingo 程序。

从这个例子得到的知识有:顶点的编号;产生边集(稀疏图);动态规划的思想;循环语句的使用。

程序中出现了“ i #GT# 1:” 在循环语句中,这实际上是常见的,也就是我们希望对满足条件的执行循环,否则不执行,称之为逻辑语句。

Page 26: 优化模型与 LINDO/LINGO 优化软件

运算符的优先级

优先级 运算符最高 #NOT# —(负号)

^

* /+ —(减法)#EQ# #NE# #GT# #GE# #LT# #LE#

#AND# #OR#

最低 <(=) = >(=)

三类运算符: 算术运算符 逻辑运算符 关系运算符

Page 27: 优化模型与 LINDO/LINGO 优化软件

匹配问题的例子(说明逻辑运算符) 某班 8 名同学准备分成 4 个调查队(每队两人)前往四个地区进行社会调查,假设这 8位同学两两之间组队的效率如表所示(由于对称性,只列出严格上三角部分),问如何组队可以使总效率最高?

s1 s2 s3 s4 s5 s6 s7 s8

s1 9 3 4 2 1 5 6

s2 1 7 3 5 2 1

s3 4 4 2 9 2

s4 1 5 5 2

s5 8 7 6

s6 2 3

s7 4

Page 28: 优化模型与 LINDO/LINGO 优化软件

将效率矩阵记为 benefit, 用 match(si,sj)=1 表示同学si 和同学 sj 组成一个队,而match(si,sj)=0 表示不组队,由对称性,只考虑 i<j共 28 个 0- 1 变量。

目标函数为: benefit(si,sj)*match(si,sj) 对 I,j 求和;约束条件为每个同学只能在某一组。得到规划问题:

min ( , )* ( , )

. . ( , ) 1, 1,2,3,4

( , ) {0,1}

i j

j i k i

benefit i j match i j

s t match j k i

match j k

Page 29: 优化模型与 LINDO/LINGO 优化软件

• @ABS( X)

• This returns the absolute value of X.

• @COS( X)

• This returns the cosine of X, where X is an angle in radians.

• @EXP( X)

• This returns e (2.718281...) raised to the power X.

• @FLOOR( X)

• This returns the integer part of X. To be specific, if X ?0, @FLOOR returns the largest integer, I, such that I ?X. If X is negative, @FLOOR returns the most negative integer, I, such that I ?X.

• @LGM( X)

• This returns the natural (base e) logarithm of the gamma function of X (i.e., log of (X - 1)!). It is extended to noninteger values of X by linear interpolation.

• @LOG( X)

• This returns the natural logarithm of X.

• @MOD( X,Y)

• This returns the value of X modulo Y, or, in other words, the remainder of an integer divide of X by Y.

Page 30: 优化模型与 LINDO/LINGO 优化软件

• @POW( X,Y)

• This returns the value of X rasied to the Y power.

• @SIGN( X)

• This returns -1 if X < 0. Otherwise, it returns +1.

• @SIN( X)

• This returns the sine of X, where X is the angle in radians.

• @SMAX( X1, X2,..., XN)

• This returns the maximum value of X1, X2, ..., and XN.

• @SMIN( X1, X2,..., XN)

• This returns the minimum value of X1, X2, ..., and XN.

• @SQR( X)

• This returns the value of X squared.

• @SQRT( X)

• This returns the square root of X.

• @TAN( X)

• This returns the tangent of X, where X is the angle in radians

Page 31: 优化模型与 LINDO/LINGO 优化软件

• @BIN( variable)

• This restricts variable to being a binary (0/1) integer value.

• @BND( lower_bound, variable, upper_bound)

• This limits variable to being greater-than-or-equal-to lower_bound and less-than-or-equal-to upper_bound.

• @FREE( variable)

• This removes the default lower bound of zero on variable, allowing it to take any positive or negative value.

• @GIN( variable)

• This restricts variable to integer values (e.g., 0,1,2, ...).

Page 32: 优化模型与 LINDO/LINGO 优化软件

问题 1. 如何下料最节省 ?

例 钢管下料

问题 2. 客户增加需求:

原料钢管 :每根 19米

4米 50根

6米 20根

8米 15根

客户需求

节省的标准是什么?

由于采用不同切割模式太多,会增加生产和管理成本,规定切割模式不能超过 3种。如何下料最节省?

5米 10根

Page 33: 优化模型与 LINDO/LINGO 优化软件

按照客户需要在一根原料钢管上安排切割的一种组合。

切割模式

余料 1米

4米 1根

6米 1根

8米 1根

余料 3米

4米 1根

6米 1根

6米 1根

合理切割模式的余料应小于客户需要钢管的最小尺寸

余料 3米

8米 1根

8米 1根

钢管下料

Page 34: 优化模型与 LINDO/LINGO 优化软件

为满足客户需要,按照哪些种合理模式,每种模式切割多少根原料钢管,最为节省?

合理切割模式

2. 所用原料钢管总根数最少

模式 4米钢管根数 6米钢管根数 8米钢管根数 余料 (米 )

1 4 0 0 3

2 3 1 0 1

3 2 0 1 3

4 1 2 0 3

5 1 1 1 1

6 0 3 0 1

7 0 0 2 3

钢管下料问题1

两种标准

1. 原料钢管剩余总余量最小

Page 35: 优化模型与 LINDO/LINGO 优化软件

xi ~ 按第 i 种模式切割的原料钢管根数 (i=1,2,…

7)

约束 满足需求

决策变量

目标 1 (总余量)

76543211 3333 xxxxxxxZMin

50234 54321 xxxxx2032 6542 xxxx

152 753 xxx

按模式 2切割 12根 ,按模式 5切割 15根,余料27米

模式

4米根数

6米根数

8米根数

余料

1 4 0 0 3

2 3 1 0 1

3 2 0 1 3

4 1 2 0 3

5 1 1 1 1

6 0 3 0 1

7 0 0 2 3

需求

50 20 15

最优解: x2=12, x5=15,

其余为 0 ;最优值: 27

整数约束: xi 为整数

cut1a

Page 36: 优化模型与 LINDO/LINGO 优化软件

当余料没有用处时,通常以总根数最少为目标

76543212 xxxxxxxZMin 目标 2 (总根数)

钢管下料问题 1

约束条件不变

最优解: x2=15, x5=5, x7=5,

其余为 0 ;最优值: 25 。

50234 54321 xxxxx

2032 6542 xxxx

152 753 xxx

xi 为整数按模式 2切割 15根,按模式 5切割 5根,按模式 7切割 5根,共 25根,余料 35

虽余料增加 8米,但减少了 2根

与目标 1 的结果“共切割 27根,余料 27米” 相比

作业 : 将该问题进行编程

Page 37: 优化模型与 LINDO/LINGO 优化软件

钢管下料问题 2

对大规模问题,用模型的约束条件界定合理模式

增加一种需求: 5米 10根;切割模式不超过 3种。

现有 4种需求: 4米 50根, 5米 10根, 6米 20

根, 8米 15根,用枚举法确定合理切割模式,过于复杂。

决策变量

xi ~ 按第 i 种模式切割的原料钢管根数 (i=1,2,3)

r1i, r2i, r3i, r4i ~ 第 i 种切割模式下,每根原料钢管生产 4米、 5米、 6米和 8米长的钢管的数量

Page 38: 优化模型与 LINDO/LINGO 优化软件

满足需求

50313212111 xrxrxr

10323222121 xrxrxr

20333232131 xrxrxr

15343242141 xrxrxr

模式合理:每根余料不超过 3米

19865416 41312111 rrrr

19865416 42322212 rrrr

19865416 43332313 rrrr

整数非线性规划模型

钢管下料问题 2目标函数(总根数) 321 xxxMin

约束条件

整数约束: xi ,r1i, r2i,

r3i, r4i (i=1,2,3)为整数

Page 39: 优化模型与 LINDO/LINGO 优化软件

增加约束,缩小可行域,便于求解

321 xxx

原料钢管总根数下界: 2619

158206105504

特殊生产计划:对每根原料钢管模式 1 :切割成 4根 4米钢管,需 13根;模式 2 :切割成 1根 5米和 2根 6米钢管,需10根;模式 3 :切割成 2根 8米钢管,需 8根。原料钢管总根数上界: 31

3126 321 xxx

模式排列顺序可任定

钢管下料问题 2

需求: 4米 50根, 5

米 10根, 6米 20根,8米 15根

每根原料钢管长 19米

Page 40: 优化模型与 LINDO/LINGO 优化软件

LINGO 求解整数非线性规划模型Local optimal solution found at iteration: 12211 Objective value: 28.00000Variable Value Reduced CostX1 10.00000 0.000000X2 10.00000 2.000000X3 8.000000 1.000000R11 3.000000 0.000000R12 2.000000 0.000000R13 0.000000 0.000000R21 0.000000 0.000000R22 1.000000 0.000000 R23 0.000000 0.000000 R31 1.000000 0.000000 R32 1.000000 0.000000 R33 0.000000 0.000000 R41 0.000000 0.000000 R42 0.000000 0.000000 R43 2.000000 0.000000

模式 1 :每根原料钢管切割成 3

根 4米和 1根 6米钢管,共 10

根;

模式 2 :每根原料钢管切割成 2

根 4米、 1根 5米和 1根 6米钢管,共 10根;

模式 3 :每根原料钢管切割成 2

根 8米钢管,共 8根。

原料钢管总根数为 28根。

作业 : 将代码改写成矩阵生成器的形式

cut2

Page 41: 优化模型与 LINDO/LINGO 优化软件

A1

32

5

80

10

10

31

2012

4270

10

88

10

70

62

7030

2020

30

450

104 301

750 606

194 205

201680

480300

220210

420

500

600

3060

195

202

720

690

520

170

690

462

160320

160

110

290

1150

1100

1200

A2

A3

A4

A5A6

A7

A8

A9A10

A11

A12

A13

A14

A15

S1

S2

S3S4

S5

S6

S7

铁路运价表里程 ≤300

301~350

351~400

401~450

451~ 500

运价 20 23 26 29 32 …

钢管运输问题( CUMCM-2000B)

Page 42: 优化模型与 LINDO/LINGO 优化软件

• 常用解法 : 二次规划

• 先计算最小运费矩阵两种运输方式(铁路/公路)混合最短路问题是普通最短路问题的变种,需要自己设计算法

钢管运输问题( CUMCM-2000B)

Page 43: 优化模型与 LINDO/LINGO 优化软件

fi 表示钢厂 i 是否使用; xij 是从钢厂 i 运到节点 j 的钢管量

yj 是从节点 j 向左铺设的钢管量; zj 是向右铺设的钢管量

钢管运输问题( CUMCM-2000B)

15

, 1

15

1

7

1

1

1 15

0.1( ) [(1 ) (1 ) ]

2

. . 500 , 1,...,7.

, 1,...,15.

1,...,14.

0,

0,1, 1,...,7.

i ij ij j j j ji j j

i ij i ij

ij j ji

j j j

i

Min p c x y y z z

s t f x S f i

x y z j

y z b j

y z

f i

• LINDO/LINGO得到的结果比 matlab得到的好

steerpipe

Page 44: 优化模型与 LINDO/LINGO 优化软件

值班人员的工作安排问题

我们考虑一组约束,它们表示值班人员的工作安排要满足预估计的按小时计算的需要量,因为人员必须安排在某种类型的班里全时值班,假定有许多不同类型的班,我们发现,一般情况下,不可能精确的安排每个时段所需要的值班人员的人数。因为每个时段的需要都在改变,我们会发现有的时段值班人员太多,有的时段值班人员太少,也有值班人员总数正好满足需要的时段。这个问题的目标是,希望把人员安排到各种类型的班,使得超员和缺员的总和最小。

Page 45: 优化模型与 LINDO/LINGO 优化软件

我们举例说明这个问题,设有五个时段和六个类型的值班的组合,用下表给出:

x1 x2 x3 x4 x5 x6 需要的总人数

T1 1 1 1 0 0 0 6

T2 0 1 1 1 1 0 5

T3 1 0 0 1 1 1 3

T4 1 1 1 1 0 1 7

T5 0 0 1 0 1 1 8

Page 46: 优化模型与 LINDO/LINGO 优化软件

例如,上表的 x1这一列说明安排在第一班值班的人员在第一时段上班工作,第二时段不上班第三和第四时段继续工作,在第五时段开始时就离开,变量 bi 表示安排在第 i班工作的人数。我们用 A 表示值班矩阵,用 x 表示变量向量,用 b表示 人员需要向量,乘积 Ax 的第 i 个分量,即指定在第 i 个时段值班的人数可以大于、小于或者等于向量 b 的对应分量 bi。这是一个最优化问题,我们如何建立这一模型呢?对每行 i 我们定义一个符号不受限制的变量 ci ,它表示 bi与第 i 个左端分量的离差可以是正的、负的或者零,用 c 表示这些变量的 列向量。

Page 47: 优化模型与 LINDO/LINGO 优化软件

通过加入松弛变量的方法,则规划问题是:

这种类型的规划问题统称为绝对值优化问题,本身属于非线性规划问题。通常

情况下可以用以下方式转化为线性规划。因为任意实数可以写成两个非负数之差,故令

ci=yi-zi,其中 yi≥0, zi≥0 且 c=y-z 。因此我们有线性规划问题:

1

min

. .

n

jj

c

s t Ax c b

Page 48: 优化模型与 LINDO/LINGO 优化软件

利用 Lindo ,代入相应数据,运行即可得到结果。(见例子)

1

min

0, 0, 0

n

j ij

y z

Ax y z b

x y z

assignment

Page 49: 优化模型与 LINDO/LINGO 优化软件

两辆铁路平板车的装货问题MCM1988B

有七种规格的包装箱要装到两辆铁路平板车上去,包装箱的宽和高是一样的,但厚度( t, 以厘米计)及重量 (w, 以公斤计 ) 是不同的。下表给出了每种包装箱的厚度、重量以及数量。每辆平板车有 10.2 米长的地方可用来装包装箱(象面包片那样),载重为 40 吨。由于当地货运的限制,对 C5, C6 , C7 类的包装箱的总数有一个特别的限制:这类箱子所占的空间(厚度)不能超过 302.7 厘米。试把包装箱(见下表)装到平板车上去使得浪费的空间最小。

Page 50: 优化模型与 LINDO/LINGO 优化软件

C1 C2 C3 C4 C5 C6 C7

T(厘米) 48.7 52.0 61.3 72.0 48.7 52.0 64.0

W(公斤) 2000 3000 1000 500 4000 2000 1000

K( 件数 ) 8 7 9 6 6 4 3

Page 51: 优化模型与 LINDO/LINGO 优化软件

这是一个整数规划问题,我们用 , 分别表示两辆车装载各种规格包装箱的件数。( i=1,…,7 )依照条件有以下的关系式:

1 )各种包装箱的数目不超过总数限制:

2)每节车厢的箱子厚度不超过 1020厘米:(i=1, ,7)i i iM N K

7

1

7

1

1020

1020

j ij

j ij

M T

N T

iMiN

Page 52: 优化模型与 LINDO/LINGO 优化软件

3 )每节车厢上包装箱的重量不超过 40吨:

4 )第 5 , 6 , 7三种箱子的总厚度不超过 302.7厘米:

7

1

7

1

40000

40000

j ij

j ij

M W

N W

7 7

5 5

302.7j i j ij j

M T N T

Page 53: 优化模型与 LINDO/LINGO 优化软件

5) 目标函数相反的可以看成箱子占用的空间最大:

其中 , 都取非负整数。利用 Lindo ,代入相应数据,运行即可得到结果。

7 7

1 1

max j i j ij j

M T N T

iM iN

place

Page 54: 优化模型与 LINDO/LINGO 优化软件

露天矿里铲位已分成矿石和岩石 : 平均铁含量不低于 25% 的为矿石,否则为岩石。每个铲位的矿石、岩石数量,以及矿石的平均铁含量(称为品位)都是已知的。每个铲位至多安置一台电铲,电铲平均装车时间 5 分钟

卡车在等待时所耗费的能量也是相当可观的,原则上在安排时不应发生卡车等待的情况。

露天矿生产的车辆安排 (CUMCM-2003B)

矿石卸点需要的铁含量要求都为 29.5%1%(品位限制),搭配量在一个班次( 8 小时)内满足品位限制即可。卸点在一个班次内不变。卡车载重量为 154吨,平均时速 28km, 平均卸车时间为 3 分钟。

问题:出动几台电铲,分别在哪些铲位上;出动几辆卡车,分别在哪些路线上各运输多少次 ?

Page 55: 优化模型与 LINDO/LINGO 优化软件

平面示意图

Page 56: 优化模型与 LINDO/LINGO 优化软件

问题数据 距离 铲位

1铲位 2 铲位

3铲位4

铲位5

铲位6

铲位7

铲位8

铲位9

铲位 10

矿石漏 5.26 5.19 4.21 4.00 2.95 2.74 2.46 1.90 0.64 1.27

倒装Ⅰ 1.90 0.99 1.90 1.13 1.27 2.25 1.48 2.04 3.09 3.51

岩场 5.89 5.61 5.61 4.56 3.51 3.65 2.46 2.46 1.06 0.57

岩石漏 0.64 1.76 1.27 1.83 2.74 2.60 4.21 3.72 5.05 6.10

倒装Ⅱ 4.42 3.86 3.72 3.16 2.25 2.81 0.78 1.62 1.27 0.50铲位1

铲位2

铲位3

铲位4

铲位5

铲位6

铲位7

铲位8

铲位9

铲位 10

矿石量 0. 95

1. 05

1. 00

1. 05

1. 10

1. 25

1. 05

1. 30

1. 35

1. 25

岩石量 1. 25

1. 10

1. 35

1. 05

1. 15

1. 35

1. 05

1. 15

1. 35

1. 25

铁含量 30% 28% 29% 32% 31% 33% 32% 31% 33% 31%

Page 57: 优化模型与 LINDO/LINGO 优化软件

问题分析 与典型的运输问题明显有以下不同:1. 这是运输矿石与岩石两种物资的问题;2. 属于产量大于销量的不平衡运输问题;3. 为了完成品位约束,矿石要搭配运输;4. 产地、销地均有单位时间的流量限制;5. 运输车辆只有一种,每次满载运输, 154吨 / 车次;6. 铲位数多于铲车数意味着要最优的选择不多于 7

个产地作为最后结果中的产地;7. 最后求出各条路线上的派出车辆数及安排。近似处理:• 先求出产位、卸点每条线路上的运输量 (MIP 模型 )• 然后求出各条路线上的派出车辆数及安排

Page 58: 优化模型与 LINDO/LINGO 优化软件

模型假设• 卡车在一个班次中不应发生等待或熄火后再启动的情况;• 在铲位或卸点处由两条路线以上造成的冲突问题面前,我们认为只要平均时间能完成任务,就认为不冲突。我们不排时地进行讨论;

• 空载与重载的速度都是 28km/h ,耗油相差很大;• 卡车可提前退出系统,等等。

如理解为严格不等待,难以用数学规划模型来解 个别参数队找到了可行解 (略)

Page 59: 优化模型与 LINDO/LINGO 优化软件

符号• xij :从 i铲位到 j 号卸点的石料运量 (车) 单位: 吨;• cij :从 i 号铲位到 j 号卸点的距离 公里;• Tij : 从 i 号铲位到号 j卸点路线上运行一个周期平均时间 分;• Aij :从号铲位到号卸点最多能同时运行的卡车数 辆;• Bij :从号铲位到号卸点路线上一辆车最多可运行的次数 次;• pi : i 号铲位的矿石铁含量 p=(30,28,29,32,31,33,32,31,33,31) %• qj : j 号卸点任务需求, q=(1.2,1.3,1.3,1.9,1.3)*10000 吨• cki : i 号铲位的铁矿石储量 万吨• cyi : i 号铲位的岩石储量 万吨• fi :描述第 i 号铲位是否使用的 0-1 变量,取 1 为使用; 0 为关闭。 53

2 ++平均速度距离到

ji

Tij

5ij

ij

TA

ij

ijij T

AB

5)1(608 -(近似)

Page 60: 优化模型与 LINDO/LINGO 优化软件

优化模型cx ij

i jij

10

1

5

1

min

5,,1,10,,1, jiBAx ijijij

10,,1,5/6085

1

ifx ij

ij

5,,1,20810

1

ji

ijx

10,,1,154/10000

154/10000

43

521

icyxx

ckxxxiii

iiii

( 1 )道路能力 (卡车数 ) 约束

( 2 )电铲能力约束

( 3 )卸点能力约束

( 4 )铲位储量约束

( 5 )产量任务约束

( 6 )铁含量约束

( 7 )电铲数量约束

( 8 )整数约束

5,,1,154/10

1

jqx ji

ij

5,2,1,0)5.28(

0)5.30(

10

1

10

1

j

px

px

ii

ij

ii

ij

710

1

i

if xij 为非负整数

fi 为 0-1 整数

Page 61: 优化模型与 LINDO/LINGO 优化软件

计算结果( LINGO 软件)

铲位1铲位 2 铲位 3 铲位 4 铲位 5 铲位

6铲位 7 铲位 8 铲位 9 铲位 10

矿漏 13 54 11

倒Ⅰ 42 43

岩场 70 15

岩漏 81 43

倒Ⅱ 13 2 70铲位 1 铲位 2 铲位 3 铲位 4 铲位 5 铲位 6 铲位 7 铲位 8 铲位 9 铲位 10

矿石漏 0.867 1.862 0.314

倒场Ⅰ 1.077 1.162

岩场 1.892 0.326

岩石漏 1.841 1.229

倒场Ⅱ 0.684 0.1 1.489

cumcm2003b1.lg4

Page 62: 优化模型与 LINDO/LINGO 优化软件

计算结果(派车)铲位 1 铲位 2 铲位 3 铲位 4 铲位 5 铲位 6 铲位 7 铲位 8 铲位 9 铲位 1

0

矿石漏 1 (29)

倒场Ⅰ 1 (39)

1 (37)

岩场 1 (37)

岩石漏 1(44) 1 (35)

倒场Ⅱ 1 (47)

结论:铲位 1 、 2 、 3 、 4 、 8 、 9 、 10 处各放置一台电铲。

一共使用了 13辆卡车;总运量为 85628.62吨公里;岩石产量为 32186吨;矿石产量为 38192吨。

此外: 6辆联合派车(方案略)

Page 63: 优化模型与 LINDO/LINGO 优化软件

练习题

1 , 1998年全国大学生建模竞赛 A 题。

Page 64: 优化模型与 LINDO/LINGO 优化软件

2 ,多周期产品安排

McGlassan制造公司 生产两种类型的齿轮 :AV7和AV9, 下面是三个月的需求表 .( 单位 :件 )

三月 四月 五月 总计AV7AV9总计

8009001,700

1,0001,0002,000

1,2001,4002,600

3,0003,300

Page 65: 优化模型与 LINDO/LINGO 优化软件

多周期产品安排

成本(元 )

每件每月的库存费 (元 )

AV7AV9

3035

0.30.35

要求 :1,满足每月的需求要求 .

2, 每月生产的产品总数不超过 2200件 .

3, 每月生产的产品不少于 1900件 .

问 :如何组织生产计划 ,使生产成本和库存花费达到最少 ?

Page 66: 优化模型与 LINDO/LINGO 优化软件

3,( 运输问题 )从 Toronto和 Detroit 两市分别有两批货物途径 Chicago和 Buffalo 最终到达 New York、 Phila.和 St.louis市 . 之间的路线表述如下图 :

Toronto1

Detroit2

Chicago3

Buffalo4

NewYork 5

Phila.6

St. louis7

SourceTransshipment

PointDestination

Page 67: 优化模型与 LINDO/LINGO 优化软件

To

From Chicago Buffalo Supply

TorontoDetroit

$4$ 5

$ 7$ 7

600500

To

From New York Phila. St.louis

ChicagoBuffaloDemand

$3$ 1450

$ 2$ 3350

$ 2$ 4300

其中 Toronto和 Detroit 分别有 600 和 500的货物需要运出 ,New York 、 Phila. 和St.louis 的货物需求分别是 450 、 350 和 300.每一段上的运输单价如下面两表:

Page 68: 优化模型与 LINDO/LINGO 优化软件

问:如何进行运输安排使整个的运输费用最少?试建立问题的数学模型并求出最有解。