92
第第第 第第第第第第第第第 运运运运 (Transportation Problem) 运运 运运运 (Assignment Problem) 运运运运运运运 运运运运运运运运运运运运运 运运运运运运运运运运运运运运运 ,, 运运运运运运运运运运运运运运运运运运运运运运运运 运运运运 ,, 运运运 运运运运运 一。

第六章 运输问题与指派问题

  • Upload
    suki

  • View
    123

  • Download
    0

Embed Size (px)

DESCRIPTION

第六章 运输问题与指派问题. 运输问题 (Transportation Problem) 和指派问题 (Assignment Problem) 属于线性规划问题,是线性规划的两类常见问题,并且这两类问题具有特殊的数学性质,使得管理科学家能够开发出多种高效独特的求解算法,所以我们专门用一章来研究。. 本章内容. §6.1  案例研究: L 食品公司的运输问题 §6.2 运输问题的模型与性质 §6.3  应用 EXCEL 和 LINGO 求解运输问题 § 6.4 运输问题变形的一些应用 § 6.5 指派问题. §6.1 L 食品公司的运输问题. - PowerPoint PPT Presentation

Citation preview

Page 1: 第六章  运输问题与指派问题

第六章 运输问题与指派问题 运输问题 (Transportation Problem)

和指派问题 (Assignment Problem)属于线性规划问题,是线性规划的两类常见问题,并且这两类问题具有特殊的数学性质,使得管理科学家能够开发出多种高效独特的求解算法,所以我们专门用一章来研究。

Page 2: 第六章  运输问题与指派问题

本章内容 §6.1  案例研究:L食品公司的运输问题 §6.2 运输问题的模型与性质 §6.3  应用EXCEL和LINGO求解运输问题 §6.4 运输问题变形的一些应用 §6.5 指派问题

Page 3: 第六章  运输问题与指派问题

§6.1 L 食品公司的运输问题 例 1 湖南 L食品公司是生产食品罐头的企业,有桔子、竹笋、野山菌三个罐头厂,三个工厂的厂址分别在 A、 B、C三个靠近不同原料产地的城镇,每个工厂都能生产不同品种的罐头,但每个工厂生产不同品种罐头的产能不同,各工厂生产与厂名相同的罐头的设计产能要大一些。

2009年 6月份来自深圳、武汉、成都和西安的四个配送中心的野山菌罐头订单和各工厂的野山菌罐头的计划产量如表 6-1所示。

2009年 6 月每箱野山菌罐头从各个工厂到各个配送中心的具体运价如表 6-2 所示。

Page 4: 第六章  运输问题与指派问题

厂址(厂名) 产量 配送中心 订单需求A(桔子 ) 80 深圳 85

B(竹笋 ) 100 武汉 110

C(野山菌 ) 220 成都 75

西安 130

合计 400 合计 400

表 6-1 罐头的产能和配送中心需求 (单位:箱)

表 6-2 各工厂到配送中心的野山菌罐头运价 (单位:元 /箱)

罐头厂配送中心

深圳 武汉 成都 西安A(桔子 ) 78 45 86 110

B(竹笋 ) 84 41 79 103

C(野山菌 ) 80 53 76 118

Page 5: 第六章  运输问题与指派问题

表 6-1 、表 6-2 可以用下图表示:

S1

S2

S3

D1

D2

D3

D4

供应地 需求地

80

100

220

85

110

75

130

(A厂) (深圳)

(武汉)

(成都)

(西安)

(B厂)

(C厂)

供应量 需求量

7845

86110

84

7941

103

805376118

Page 6: 第六章  运输问题与指派问题

小张的运输方案 (单位:箱)

小张的运输方案需要运费成本是:

80 78 5 84 95 41 15 53 75 76 130 118 32390

罐头厂(供应)

配送中心(需求)合计

深圳 武汉 成都 西安

A(桔子 ) 80 0 0 0 80

B(竹笋 ) 5 95 0 0 100

C(野山菌 ) 0 15 75 130 220

合计 85 110 75 130 400

Page 7: 第六章  运输问题与指派问题

小刘的运输方案 (单位:箱)

小刘的运输方案需要运费成本是:

罐头厂(供应)

配送中心(需求)合计

深圳 武汉 成都 西安

A(桔子 ) 70 10 0 0 80

B(竹笋 ) 0 100 0 0 100

C(野山菌 ) 15 0 75 130 220

合计 85 110 75 130 400

70 78 15 80 10 45 100 41 75 76 130 118 32250

Page 8: 第六章  运输问题与指派问题

杨经理的思考…… 小刘的运输方案比小张的节约了 140 元,于

是,杨经理决定用小刘的方案。但是,会不会还有更节约的运输方案呢?

杨经理开始琢磨这个问题,或许以后能找到更好的方案吧,不管怎么样,以后要在运输方案安排上多用点心思了,因为每隔几天运输部都要为公司不同的产品订单集中安排一次运输,如果每次都能用最好的方案,一年下来也是一笔可观的费用呢。

Page 9: 第六章  运输问题与指派问题

§6.2 运输问题的模型与性质 1 运输问题的模型

• 例 1 中提到的湖南某食品公司的问题就是一个典型的运输问题。在运输问题中,寻求从产地到销地的最小的运输成本。运输问题的一般提法是这样的:

• 某种物资有若干个产地和销地,若已知各个产地的产量、各个销地的销量以及各产地到各销地的单位运价(或运输距离)。问应如何组织运输,才能使总运费(或总的运输量)最省?

• 假定有 m 个产地, n 个销地,我们定义如下变量:

Page 10: 第六章  运输问题与指派问题

—— 第 产地 的供应量, i =1, 2,…,m ; —— 第 销地 的需求量, j =1, 2,…, n ; —— 从产地 到销地 的单位运费, i =1, 2,…,m , j =1, 2,…, n ; —— 产地 到销地 的运输数量, i =1, 2,…,m , j =1, 2,…, n 。

则该问题为求解最佳运输方案,即求解所有 的值,使总的运输费用 达到最少。决策变量为

ia

jb

ijc

ijx

ijx

ijx1 1

m n

ij iji j

c x

Page 11: 第六章  运输问题与指派问题

1 1

,1

1

min

1, 2, ;

. . , 1, 2, ;

0, 1, 2, ; 1, 2, .

m n

ij iji j

n

ij ij

m

ij ji

ij

Z c x

x a i m

s t x b j n

x i m j n

该问题的数学模型形式为:

Page 12: 第六章  运输问题与指派问题

把例 1 的问题用数学模型表达出来就是:11 12 13 14

21 22 23 24

31 32 33 34

min 78 45 86 110

84 41 79 103 (6.1)

80 53 76 118

Z x x x x

x x x x

x x x x

11 12 13 14

21 22 23 24

31 32 33 34

11 21 31

80 (6.2)

100 (6.3)

220 (6.4)

85 . .

x x x x

x x x x

x x x x

x x xs t

12 22 32

13 23 33

14 24 34

(6.5)

110 (6.6)

75 (6.7)

130

x x x

x x x

x x x

(6.8)

0, 1, 2,3; 1, 2,3,4 (6.9)ijx i j

Page 13: 第六章  运输问题与指派问题

2 运输问题的性质• 运输问题中每一个产地都有一定的供应量( supply )配送到销地,每一个销地都有一定的需求量( demand ),接收从产地发出的产品,基本的运输问题有如下性质:

• 1 )需求假设( The Requirements Assumption) 每一个产地都有一个固定的供应量,所有的供应量都

必须配送到销地。与之相类似,每一个销地都有一个固定的需求量,整个需求量都必须由产地满足。

Page 14: 第六章  运输问题与指派问题

• 2 )可行解特性( The Feasible Solutions Property) 当且仅当供应量的总和等于需求量的总和,也就是产销平

衡时,运输问题才有可行解。• 3 )成本假设( The Cost Assumption ):

从任何一个产地到任何一个销地的货物配送成本和所配送的数量成线性比例关系,因此这个成本就等于配送的单位成本乘以配送的数量。

• 4 )整数解性质( Integer Solutions Property ) 只要运输问题的供应量和需求量都是整数,任何有可行解

的运输问题必然有所有决策变量都是整数的最优解。因此,没有必要加上所有变量都是整数的约束条件,这使得求解运输问题避免了整数约束所导致的计算复杂性大幅度增加的麻烦

Page 15: 第六章  运输问题与指派问题

§6.3  应用 EXCEL和 LINGO求解运输问题

1 应用 EXCEL 求解运输问题• 由于运输问题是线性规划问题,我们可以很方便地在

电子表格中建模求解。见图 6.2 。• 应用“规划求解”后,我们得到一个最优解,由图 6.2

中表格的阴影部分的数据可知, A 厂运 50 箱到武汉、运 30 箱到西安; B 厂运 100 箱到西安; C 厂运 85 箱到深圳、 60 箱到武汉、 75 箱到成都,此时总运费最低,最优值是 31530 元。

• 采用这个方案,食品公司 6 月份这批野山菌罐头订单的运输费用比小张的方案( 32390 元)节约了 860 元,比小刘的方案( 32250 元)节约了 720 元。

Page 16: 第六章  运输问题与指派问题
Page 17: 第六章  运输问题与指派问题

2 LINGO 使用简介

LINGO 是用来求解线性和非线性优化问题的简易工具。 LINGO 内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用 LINGO 高效的求解器可快速求解并分析结果。

因为篇幅所限,本小节只对 LINGO 最基本的应用和功能结构进行介绍,每个功能详细的应用技巧请见本书相关的例子和 LINGO 的帮助文件。

Page 18: 第六章  运输问题与指派问题

1) LINGO 快速入门• 当你在 windows 下开始运行 LINGO 系统时,会

得到类似下面的一个窗口:

Page 19: 第六章  运输问题与指派问题

线性规划模型在电子表格中布局的好坏关系到问题可读性和求解方便性的高低。

本节以第一章中的例 1 (资源分配问题)为例来说明一下如何在电子表格中描述线性规划模型,让我们回顾一下第一章中例 1 的数学模型:

Max

s.t.

在模型窗口中输入如下代码:

1 24 3Z x x 1

2

1 2

1 2

6

2 8

2 3 18

, 0

x

x

x x

x x

Page 20: 第六章  运输问题与指派问题

max=4*x1+3*x2;

x1<=6;

2*x2<=8;

2*x1+3*x2<=18;

然后点击工具条上的按钮 即可。

Page 21: 第六章  运输问题与指派问题

2) LINGO 中的集• 对实际问题建模的时候,总会遇到一群或多群相联系的对象,比如工厂、消费者群体、交通工具和雇工等等。 LINGO允许把这些相联系的对象聚合成集( sets )。一旦把对象聚合成集,就可以利用集来最大限度的发挥 LINGO 建模语言的优势。

• 现在我们将深入介绍如何创建集,并用数据初始化集的属性。学完本节后,你对基于建模技术的集如何引入模型会有一个基本的理解。

Page 22: 第六章  运输问题与指派问题

( 1 )为什么使用集 集是 LINGO 建模语言的基础,是程序设计最强有力的基本构件。借助于集,能够用一个单一的、长的、简明的复合公式表示一系列相似的约束,从而可以快速方便地表达规模较大的模型。

Page 23: 第六章  运输问题与指派问题

( 2 )什么是集 集是一群相联系的对象,这些对象也称为集的成员 .

一个集可能是一系列产品、卡车或雇员。 每个集成员可能有一个或多个与之有关联的特征,我们把这些特征称为属性。属性值可以预先给定,也可以是未知的,有待于 LINGO 求解。

例如 :• 产品集中的每个产品可以有一个价格属性;• 卡车集中的每辆卡车可以有一个牵引力属性;• 雇员集中的每位雇员可以有一个薪水属性,也可以有一个生日属性等等。

Page 24: 第六章  运输问题与指派问题

LINGO 有两种类型的集:原始集 (primitive set) 和派生集 (derived set) 。

一个原始集是由一些最基本的对象组成的。 一个派生集是用一个或多个其它集来定义的,也就

是说,它的成员来自于其它已存在的集。

Page 25: 第六章  运输问题与指派问题

( 3 )模型的集部分 集部分是 LINGO 模型的一个可选部分。在 LINGO

模型中使用集之前,必须在集部分事先定义。 集部分以关键字“ sets:” 开始,以“ endsets” 结束

。 一个模型可以没有集部分,或有一个简单的集部分

,或有多个集部分。 一个集部分可以放置于模型的任何地方,但是一个

集及其属性在模型约束中被引用之前必须定义了它们。

Page 26: 第六章  运输问题与指派问题

1 ) 定义原始集• 为了定义一个原始集,必须详细声明:

集的名字 可选,集的成员 可选,集成员的属性 定义一个原始集,用下面的语法:

setname[/member_list/][:attribute_list];• 注意:用“ []” 表示该部分内容可选。下同,不再赘述。• Setname 是你选择的来标记集的名字,最好具有较强的可读性。集名字必须严格符合标准命名规则:以拉丁字母或下划线( _ )为首字符,其后由拉丁字母( A—Z )、下划线、阿拉伯数字( 0, 1,…, 9 )组成的总长度不超过32 个字符的字符串,且不区分大小写。

• 注意:该命名规则同样适用于集成员名和属性名等的命名

Page 27: 第六章  运输问题与指派问题

• Member_list 是集成员列表。如果集成员放在集定义中,那么对它们可采取显式罗列和隐式罗列两种方式。如果集成员不放在集定义中,那么可以在随后的数据部分定义它们

• ①当显式罗列成员时,必须为每个成员输入一个不同的名字,中间用空格或逗号搁开,允许混合使用。例如,可以定义一个名为 students 的原始集,它具有成员 John、 Jill、 Rose和Mike ,属性有 sex和 age : sets:

students/John Jill, Rose Mike/: sex, age;

endsets• ②  当隐式罗列成员时,不必罗列出每个集成员。可采用

如下语法:setname/member1..memberN/[: attribute_list];

Page 28: 第六章  运输问题与指派问题

• 这里的 member1 是集的第一个成员名, memberN 是集的最末一个成员名。 LINGO将自动产生中间的所有成员名。 LINGO 也接受一些特定的首成员名和末成员名,用于创建一些特殊的集。列表如下:

隐式成员列表格式 示例 所产生集成员1..n 1..5 1,2,3,4,5

StringM..StringN Car2..car14 Car2,Car3,Car4,…,Car14

DayM..DayN Mon..Fri Mon,Tue,Wed,Thu,Fri

MonthM..MonthN Oct..Jan Oct,Nov,Dec,Jan

MonthYearM..Month

YearN

Oct2001..Jan

2002

Oct2001,Nov2001,Dec200

1,Jan2002

Page 29: 第六章  运输问题与指派问题

• ③ 集成员不放在集定义中,而在随后的数据部分来定义! 集部分 ;

sets:

students:sex,age;

endsets

! 数据部分 ;

data:

students,sex,age= John 1 16

Jill 0 14

Rose 0 17

Mike 1 13;

enddata• 注意:开头用感叹号( ! ),末尾用分号( ; )表示注释

,可跨多行。

Page 30: 第六章  运输问题与指派问题

• 在集部分只定义了一个集 students ,并未指定成员。在数据部分罗列了集成员 John、 Jill、 Rose和Mike ,并对属性 sex和 age 分别给出了值。

• 集成员无论用何种字符标记,它的索引都是从 1 开始连续计数。在 attribute_ list 可以指定一个或多个集成员的属性,属性之间必须用逗号隔开。

2 ) 定义派生集为了定义一个派生集,必须详细声明:

集的名字 父集的名字 可选,集成员 可选,集成员的属性

Page 31: 第六章  运输问题与指派问题

• 可用下面的语法定义一个派生集:• setname(parent_set_list)[/member_list/][:attribute_list];• setname 是集的名字。 parent_set_list 是已定义的集的列表,多个时必须用逗号隔开。如果没有指定成员列表,那么 LINGO 会自动创建父集成员的所有组合作为派生集的成员。派生集的父集既可以是原始集,也可以是其它的派生集。举例如下:sets:

product/A B/;

machine/M N/;

week/1..2/;

allowed(product,machine,week):x;

endsets

Page 32: 第六章  运输问题与指派问题

• LINGO生成了三个父集的所有组合共八组作为 allowed集的成员。列表如下:编号 成员1 (A,M,1)

2                            (A,M,2)

3                            (A,N,1)

4                            (A,N,2)

5                            (B,M,1)

6                            (B,M,2)

7                            (B,N,1)

8                            (B,N,2)

Page 33: 第六章  运输问题与指派问题

• 成员列表被忽略时,派生集成员由父集成员所有的组合构成,这样的派生集成为稠密集。如果限制派生集的成员,使它成为父集成员所有组合构成的集合的一个子集,这样的派生集成为稀疏集。

• 同原始集一样,派生集成员的声明也可以放在数据部分。一个派生集的成员列表有两种方式生成: ①显式罗列; ②设置成员资格过滤器。

• 当采用方式①时,必须显式罗列出所有要包含在派生集中的成员,并且罗列的每个成员必须属于稠密集。使用前面的例子,显式罗列派生集的成员:allowed(product,machine,week)/A M 1,A N 2,B N 1/;

Page 34: 第六章  运输问题与指派问题

• 如果需要生成一个大的、稀疏的集,那么显式罗列就很讨厌。幸运地是许多稀疏集的成员都满足一些条件以和非成员相区分。我们可以把这些逻辑条件看作过滤器,在LINGO生成派生集的成员时把使逻辑条件为假的成员从稠密集中过滤掉。详细内容请参见 LINGO 帮助文件。

3) 模型的数据部分• 数据部分提供了模型相对静止部分和数据分离的可能性。显然,这对模型的维护和维数的缩放非常便利。

• 数据部分以关键字“ data:” 开始,以关键字“ enddata”结束。在这里,可以指定集成员、集的属性。其语法如下:object_list = value_list;

Page 35: 第六章  运输问题与指派问题

• 对象列( object_list )包含要指定值的属性名、要设置集成员的集名,用逗号或空格隔开。一个对象列中至多有一个集名,而属性名可以有任意多。如果对象列中有多个属性名,那么它们的类型必须一致。如果对象列中有一个集名,那么对象列中所有的属性的类型就是这个集。

• 数值列( value_list )包含要分配给对象列中的对象的值,用逗号或空格隔开。注意属性值的个数必须等于集成员的个数。

• 看下面的例子 (a)和 (b) :

Page 36: 第六章  运输问题与指派问题

• (a)

sets:

set1/A,B,C/: X,Y;

endsets

data:

X=1,2,3;

Y=4,5,6;

enddata• 在集 set1 中定义了两个属性 X和 Y。 X 的三个值是

1、 2和 3, Y 的三个值是 4、 5和 6 。也可采用如下例子中的复合数据声明( data statement )实现同样的功能。

Page 37: 第六章  运输问题与指派问题

• (b)

sets:

set1/A,B,C/: X,Y;

endsets

data:

X,Y=1 4

2 5

3 6;

enddata• 看到这个例子,可能会认为 X被指定了 1、 4和 2三个值

,因为它们是数值列中前三个,而正确的答案是 1、 2和3 。假设对象列有 n 个对象, LINGO 在为对象指定值时,首先在 n 个对象的第 1 个索引处依次分配数值列中的前 n个对象,然后在 n 个对象的第 2 个索引处依次分配数值列中紧接着的 n 个对象,……,以此类推。

Page 38: 第六章  运输问题与指派问题

4) LINGO函数• LINGO有 9 种类型的函数:

(1 )基本运算符:包括算术运算符、逻辑运算符和关系运算符

(2 )数学函数:三角函数和常规的数学函数 (3 )金融函数: LINGO提供的两种金融函数 (4 )概率函数: LINGO提供了大量概率相关的函数 (5 )变量界定函数:这类函数用来定义变量的取值范围 (6 )集操作函数:这类函数为对集的操作提供帮助 (7 )集循环函数:遍历集的元素,执行一定的操作的函

数 (8 )数据输入输出函数:这类函数允许模型和外部数据源相联系,进行数据的输入输出

(9 )辅助函数:各种杂类函数

Page 39: 第六章  运输问题与指派问题

一 基本运算符 1 ) 算术运算符

• 算术运算符是针对数值进行操作的。 LINGO提供了 5 种二元运算符:^ 乘方﹡ 乘/ 除﹢ 加﹣ 减

• LINGO唯一的一元算术运算符是取反函数“﹣”

Page 40: 第六章  运输问题与指派问题

一 基本运算符(续)• 这些运算符的优先级由高到底为:• 高 ﹣(取反)•       ^•    ﹡/• 低 ﹢﹣• 运算符的运算次序为从左到右按优先级高低来执

行。运算的次序可以用圆括号“()”来改变。

Page 41: 第六章  运输问题与指派问题

二 逻辑运算符• LINGO 具有9种逻辑运算符:

#not#  否定该操作数的逻辑值,# not#是一个一元运算符

#eq# 若两个运算数相等,则为 true;否则为 flase #ne# 若两个运算符不相等,则为 true;否则为

flase #gt# 若左边的运算符严格大于右边的运算符,则为

true;否则为 flase #ge# 若左边的运算符大于或等于右边的运算符,则为 true;否则为 flase

#lt#     若左边的运算符严格小于右边的运算符,则为true;否则为 flase

Page 42: 第六章  运输问题与指派问题

二 逻辑运算符(续) #le#  若左边的运算符小于或等于右边的运算符,则为 true;否则为 flase

#and#  仅当两个参数都为 true 时,结果为 true;否则为 flase

#or# 仅当两个参数都为 false 时,结果为 false;否则为 true

• 这些运算符的优先级由高到低为: 高 #not# #eq# #ne# #gt# #ge# #lt# #le#低 #and# #or#

Page 43: 第六章  运输问题与指派问题

三 关系运算符• 关系运算符与逻辑运算符 #eq#、 #le#、 #ge#截然不同,前者是模型中该关系运算符所指定关系的为真描述,而后者仅仅判断一个该关系是否被满足:满足为真,不满足为假。

• LINGO 有三种关系运算符:“ =” 、“ <=” 和“ >=” 。

• LINGO 中还能用“ <” 表示小于等于关系,“ >” 表示大于等于关系。

Page 44: 第六章  运输问题与指派问题

三 关系运算符(续)• LINGO 并不支持严格小于和严格大于关系运算符。然而,如果需要严格小于和严格大于关系,比如让 A严格小于 B: A<B ,

• 那么可以把它变成如下的小于等于表达式: A+ε<=B ,

• 这里 ε 是一个小的正数,它的值依赖于模型中A 小于 B 多少才算不等。

Page 45: 第六章  运输问题与指派问题

三类操作符的优先级高  #not# ﹣(取反) ^    ﹡ /   ﹢﹣

#eq# #ne# #gt# #ge# #lt# #le#

#and# #or#

低 <= = >=

Page 46: 第六章  运输问题与指派问题

( 2 ) 数学函数• @abs(x) 返回 x 的绝对值• @sin(x) 返回 x 的正弦值, x采用弧度制• @cos(x) 返回 x 的余弦值• @tan(x) 返回 x 的正切值• @exp(x) 返回常数 e的 x 次方• @log(x) 返回 x 的自然对数• @lgm(x) 返回 x的 gamma函数的自然对数• @sign(x) 如果 x<0返回 -1;否则,返回 1• @floor(x) 返回 x 的整数部分。当 x>=0 时,返回不超过

x 的最大整数;当 x<0 时,返回不低于 x 的最大整数。• @smax(x1,x2,…,xn) 返回 x1, x2,…, xn 中的最大值• @smin(x1,x2,…,xn) 返回 x1, x2,…, xn 中的最小值

Page 47: 第六章  运输问题与指派问题

( 3 )金融函数 目前 LINGO提供了两个金融函数。

• @fpa(I,n) 返回如下情形的净现值:单位时段利率为 I,连续 n 个时段支付,每个时段支付单位费用。

• @fpl(I,n) 返回如下情形的净现值:单位时段利率为 I,第 n 个时段支付单位费用。

Page 48: 第六章  运输问题与指派问题

( 4 ) 概率函数• 1)@pbn(p,n,x)

二项分布的累积分布函数。当 n 和(或) x 不是整数时,用线性插值法进行计算。

• 2)@pcx(n,x)自由度为 n 的 χ2 分布的累积分布函数。

• 3)@peb(a,x) 当到达负荷为 a ,服务系统有 x 个服务器且允许无穷排队时的 Erlang繁忙概率。

• 4)@pel(a,x) 当到达负荷为 a ,服务系统有 x 个服务器且不允许

排队时的 Erlang繁忙概率。• 其他概率函数参考 LIGNO帮助

Page 49: 第六章  运输问题与指派问题

(5) 变量界定函数• 变量界定函数实现对变量取值范围的附加限制

,共 4 种: @bin(x) 限制 x为 0或 1 @bnd(L,x,U) 限制 L≤x≤U @free(x) 取消对变量 x 的默认下界为 0 的限制

,即 x 可以取任意实数 @gin(x) 限制 x 为整数

• 在默认情况下, LINGO 规定变量是非负的,也就是说下界为 0 ,上界为 +∞。@free取消了默认的下界为 0 的限制,使变量也可以取负值。@bnd 用于设定一个变量的上下界,它也可以取消默认下界为 0 的约束。

Page 50: 第六章  运输问题与指派问题

( 6 )集操作函数• 1)@in(set_name,primitive_index_1

[,primitive_index_2,…])如果元素在指定集中,返回 1;否则返回 0 。

• 2)@index([set_name,] primitive_set_element)该函数返回在集 set_name 中原始集成员primitive_set_element 的索引。如果 set_name被忽略,那么 LINGO将返回与 primitive_set_element匹配的第一个原始集成员的索引。如果找不到,则产生一个错误。

Page 51: 第六章  运输问题与指派问题

( 6 )集操作函数(续)• 3)@wrap(index,limit)

该函数返回 j=index-k*limit ,其中 k 是一个整数,取适当值保证 j落在区间 [1, limit] 内。该函数相当于index模 limit再加 1 。该函数在循环、多阶段计划编制中特别有用。

• 4)@size(set_name)该函数返回集 set_name 的成员个数。在模型中明确给出集大小时最好使用该函数。它的使用使模型更加数据中立,集大小改变时也更易维护。

Page 52: 第六章  运输问题与指派问题

( 7 )集循环函数• 集循环函数遍历整个集进行操作。其语法为

@function(setname[(set_index_list)[|conditional_qualifier]]:

expression_list);

• @function 相应于下面四个集循环函数之一: 1)@for

• 该函数用来产生对集成员的约束。基于建模语言的标量需要显式输入每个约束,不过@for函数允许只输入一个约束,然后 LINGO自动产生每个集成员的约束。

2)@sum• 该函数返回遍历指定的集成员的一个表达式的和。

3)@min和@max• 返回指定的集成员的一个表达式的最小值或最大值。

Page 53: 第六章  运输问题与指派问题

其他函数及菜单

略,请参见教材的相关部分及 LINGO帮助文档

Page 54: 第六章  运输问题与指派问题

3 应用 LINGO 求解运输问题

定义工厂 Plants 、配送中心 DCs两个原始集和派生集 Links

原始集 Plants 有一个产量属性 product, DCs 有一个需要量属性 demand• 因为两个原始集的成员很少,所以采用显示罗列的方法

以加强模型的可读性。• 派生集有成本 cost 和运量 volume两个属

性, product、 demand、 cost、 volume四个属性中前三个是已知的,作为输入参数在数据部分给出具体数值, volume 是待求解的未知决策变量。

例 1的程序代码及计算见 LINGO文件

Page 55: 第六章  运输问题与指派问题

§6.4 运输问题变形的一些应用 1 不平衡运输问题

• 一、不平衡运输问题的模型 在例 1 的食品公司运输问题当中,三个工厂的总产

能(供应量)是 400 箱,四个配送中心的总需求量也是 400 箱,这类总供应量正好与总需求量相等的问题叫做平衡运输问题

运输问题的可行解特性、整数解性质等也是以产销平衡,即 为前提的

然而,在实际的生产生活中,总供应量超过总需求量或小于总需求量的不平衡运输问题,即 更有可能发生

不平衡型运输问题有以下两种情况

1 1

m n

i ji j

a b

1 1

m n

i ji j

a b

Page 56: 第六章  运输问题与指派问题

1) 当总供应量大于总需求量时,1 1

m n

i ji j

a b

1 1

,1

1

min

1, 2, ;

. . , 1, 2, ;

0, 1, 2, ; 1, 2, .

m n

ij iji j

n

ij ij

m

ij ji

ij

Z c x

x a i m

s t x b j n

x i m j n

Page 57: 第六章  运输问题与指派问题

2) 当总供应量小于总需求量时,1 1

m n

i ji j

a b

1 1

,1

1

min

1, 2, ;

. . , 1, 2, ;

0, 1, 2, ; 1, 2, .

m n

ij iji j

n

ij ij

m

ij ji

ij

Z c x

x a i m

s t x b j n

x i m j n

Page 58: 第六章  运输问题与指派问题

二、不平衡运输问题举例 例 2 若第一节中 L 食品公司的 A 工厂 2009年

6 月份的野山菌罐头产量增加到 120 箱,配送中心的订单不变,总的产量就增加到了 120 箱,而配送中心的需求量没有变化,使得总供应量比总需求量多了 40 箱,于是可以假设有一个虚拟配送中心,需求量刚好是 40 箱,从各罐头厂到虚拟配送中心的运价都是 0元 / 箱。

这个不平衡运输问题在 Excel电子表格中的布局、公式编辑、求解选项设置及求解结果见图6.3

Page 59: 第六章  运输问题与指派问题
Page 60: 第六章  运输问题与指派问题

2 转运问题 前述运输问题产地与销地的界线非常分明,产地只

供给(输出)货物,销地只需求(输入)货物,而实际上,绝对的输出与输入几乎是不存在的,有时一地仅作为其他两地之间输入输出的中转站,更多的是有些产地的货物可以或必需直达运输,而另外有些必需或可以经过中转站转运,我们称这些类型的运输问题为转运问题。

这里我们只讨论产销平衡的转运问题,不平衡的转运问题可以按上节讲到的办法转化成平衡的问题再行研究。

Page 61: 第六章  运输问题与指派问题

一、转运问题模型 假定有 个产地, 个销地, 个中转站,我们定义如下变量:

—第 i 产地 Ai 的供应量, i =1, 2,…, m ;—第 j销地 Bj 的需求量, j=1, 2,… , n;—产地 i到销地 j的单位运费, i=1, 2,…, m , j=1, 2,…, n ;—产地 i到中转站 k的单位运费, i=1, 2,… ,m, k=1, 2,… ,p ;—中转站 k到销地 j的单位运费, k =1, 2,…, p , j=1, 2,…, n ;—产地 i到销地 j的运输数量, i=1, 2,…, m , j=1, 2,…, n ;—产地 i 到中转站 k的运输数量, i=1, 2,… ,m, k=1, 2,… ,p ;—中转站 k到销地 j 的运输数量, k =1, 2,…, p , j=1, 2,…, n ;

则该问题模型为:

ia

jb

ijc

ikckjc

ijx

ikx

kjx

Page 62: 第六章  运输问题与指派问题

1 1 1 1 1 1

1 1

min (6.10)

, 1, 2, ; (6.11)

. .

p pm n m n

ij ij ik ik kj kji j i k k j

pn

ij ik ij k

ij kjk

Z c x c x c x

x x a i m

x xs t

1 1

1

, 1, 2, ; (6.12)

, 1, 2, ; (6.13)

, , 0,

pm

ji

m n

ik kji j

ij ik kj

b j n

x x k p

x x x i

1,2, ; 1, 2, ; 1, 2, . (6.14)m j n k p

Page 63: 第六章  运输问题与指派问题

ijx

如果所有产地的物资都要经过中转站运到销地,只需要把 的内容去掉就可以,具体如下: ijx

1 1 1 1

1

1

min (6.15)

, 1, 2, ; (6.16)

, . .

p pm n

ik ik kj kji k k j

p

ik ik

p

kj jk

Z c x c x

x a i m

x bs t

1

1, 2, ; (6.17)

, 1, 2, ; (6.18)

, 0, 1, 2, ; 1, 2, .

m n

ik kji j

ik kj

j n

x x k p

x x j n k p

(6.19)

Page 64: 第六章  运输问题与指派问题

二、 L 食品公司的转运问题在 EXCEL 电子表格中的建模与求解

例 3 湖南 L 食品公司的运输部杨经理在寻找最节省的运费过程中发现了位于长沙市和郑州市的两个物流中心,由于这两个物流中心具有专业的农产品运输设施、更为完善的运输网络和先进的管理水平,能以较低的运价为杨经理提供从工厂到配送中心的运输服务。经过洽谈,这两个物流中心为杨经理的运费报价如表 6-5、 6-6 所示。由于杨经理出色的公关技能,他仍然可以利用其他运输公司以前为他提供的运价表(表 6-2 )上规定的直达运价从工厂到配送中心进行直达运输。为了使运费尽可能的节约,杨经理希望在利用物流中心中转的同时也并不排除从工厂到配送中心的直达运输方式。

杨经理应该如何决策呢?

Page 65: 第六章  运输问题与指派问题
Page 66: 第六章  运输问题与指派问题

三、 L 食品公司的转运问题在 LINGO 中的建模与求解 定义工厂 Plants 、物流中心 TCs 和配送中心 DCs三个原始

集• 原始集 Plants 有一个产量属性 product, DCs 有一个需求量属性

demand, TCs 不需要定义属性。因为三个原始集的成员很少,所以都采用显示罗列的方法以加强模型的可读性。

然后定义工厂直达配送中心的派生集 PDlinks 、工厂运到物流中心的派生集 PTlinks 和物流中心转运到配送中心的派生集 TDlinks 。• 派生集 PDlinks 有成本 PDcost 和运量 PDvolume两个属性;• 派生集 PTlinks 有成本 PTcost 和运量 PTvolume两个属性;• 派生集 TDlinks 有成本 TDcost 和运量 TDvolume两个属性。

模型在 lingo程序中例 3 运输问题的代码和求解结果见 lingo文件或教材。

Page 67: 第六章  运输问题与指派问题

四、一般的转运问题

前文讲到的中转运输问题考虑到了以下两种情况:• 产地与销地之间没有直达路线,货物同产地到销地必须通过某中间站转运;

• 产地与销地之间有直达路线,但也可以通过中转站转运;

更一般的运输问题还会考虑到下面的第三种情况:• 某些产地既输出物资,也吸收一部分物资,也就是说相

同的物资可以在一些产地之间相互调配;某销地既需要物资,又可以输出部分物资,销地之间也可以相互调配运输。即产地或销地本身也可以起中转站的作用;

Page 68: 第六章  运输问题与指派问题

四、一般的转运问题

这种转运问题的特点是产地、销地都可能成为中转站,容易造成产量和需求量的混淆,所以解题思路是先将其转化为平衡型运输问题,这一点和不平衡型运输问题是一样的。

首先来看一下转运问题在这个转化中一些假定:• 求最大可能中转量 Q( Q 为大于总产量 的一个数)• 纯中转站视为输入量和输出量均为 Q 的一个产地和销地• 兼中转站 的产地 视为输入量为 Q 的销地和输出量为 的产地• 兼中转站 的销地 视为输出量为 Q 的产地和输入量为 的销地

在此假设的基础上,列出各产地的供应量、各销地的需求量及各产销地之间的运价表,然后运用前文讲到的线性规划法求解即可。

iA

jBiQ a

jQ b

Page 69: 第六章  运输问题与指派问题

例 4 已知某物资的有三个产地 A1、 A2、 A3 ,四个销地 B1、 B2、 B3、 B4 ,该物资各产地、销地的产量、需求量及运价如下表所示。

产地 产量 销地 需求量A1 8 B1 5

A2 4 B2 3

A3 7 B3 7

B4 4

产量合计 19 需求量合计 19

销地产地

B1 B2 B3 B4

A1 1 3 8 4

A2 3 7 5 6

A3 4 9 3 2

表 6-7 某物资的产量、需求量

表 6-8 某物资的运价表

Page 70: 第六章  运输问题与指派问题

A1 A2 A3

A1 0 1 2

A2 1 0 4

A3 2 4 0

B1 B2 B3 B4

B1 0 1 4 3

B2 1 0 2 1

B3 4 2 0 2

B4 3 1 2 0

表 6-9 产地间互相调运的运价表 表 6-10 销地间互相调运的运价表

另外,还假设这些物资在三个产地之间可以互相调运,在四个销地之间也可以互相调运,其运价表如表 6-9 、表 6-10 所示。

Page 71: 第六章  运输问题与指派问题

A1 A2 A3 T1 T2 B1 B2 B3 B4

T1 2 2 1 0 3 3 1 2 4

T2 3 1 4 3 0 5 2 1 2

表 6-11 中转站到产地、销地及中转站之间互相调运的运价表

然后,再假设还有两个纯中转站 T1、 T2 ,它们到各产地、各销地及中转站之间的运价表如表 6-11 所示。

在考虑从产地到销地之间的直接运输、经纯中转站或产销地之间非直接转运等各种可能方案的情况下,如何将三个产地所生产的物资运往四个销地,使总的运费最省。

Page 72: 第六章  运输问题与指派问题

解:从表 6-8 可知,从 A1 到 B3 的运费是 8, A3 到 B3 的运费是 3 ,表 6-9中 A1 到 A3 的运费是 2 ,这样,从从 A1 到B3 的运输如果经过 A3 中转运费是 2+3=5 ,可见这个问题中,从每个产地到各销地之间的运输方案是很多的。为了把这个问题仍当作一般的运输问题处理,可以按下面的方法做:

1 )由于问题中的 3 个产地、 2 中转站、 4 个销地都可以既看作产地,又可以看作销地,因此可以把整个问题当作有 3+3+4=9 个产地和 9 个销地的扩大运输问题。 2 )对扩大的运输问题,建立扩大的单位运价表,如表 6-12 所示。

Page 73: 第六章  运输问题与指派问题

销地产地

A1 A2 A3 T1 T2 B1 B2 B3 B4 产量

A1 0 1 2 2 3 1 3 8 4 27

A2 1 0 4 2 1 3 7 5 6 23

A3 2 4 0 1 4 4 9 3 2 26

T1 2 2 1 0 3 3 1 2 4 19

T2 3 1 4 3 0 5 2 1 2 19

B1 1 3 4 3 5 0 1 4 3 19

B2 3 7 9 1 2 1 0 2 1 19

B3 8 5 3 2 1 4 2 0 2 19

B4 4 6 2 4 2 3 1 2 0 19

销量 19 19 19 19 19 24 22 26 23

表 6-12 扩大的单位运价表

Page 74: 第六章  运输问题与指派问题

3 )所有中转站的产量等于销量。由于运费最少时不可能出现一批物资重复在相同的运输路线上来回倒运的现象,所以每个纯中转站的转运数量不会超过总产量 19 。因此,可以规定两个纯中转站 T1、 T2 的产量和销量均为 19 。由于实际的转运量

1

n

ij ij

x a

1

m

ij ji

x b

iix

iix

19 iix

iix 0iic

所以,可以在每个约束条件中增加一个松驰变量

相当于一个虚拟的转运站,意义就是自己运给自己,

就是每个纯中转站的实际转运量,

对应的运价

Page 75: 第六章  运输问题与指派问题

iix

4)扩大的运输问题中,原来的产地与销地也有转运站的作用,所以同样在原来产量与销量的数字上加上总产量 19,即三个产地 A1、 A2、 A3的产量分别改成27, 23, 26,销量均为 19;四个销地 B1、 B2、 B3、B4的销量分别改成 24, 22, 26, 23,产量均为 19。同时引入松驰变量        按照上述方法可以重新构成产销平衡的单位运价表,(见表 6-12 )。由于表 6-12 是一个产销平衡的运输问题,可以用单纯形法求解,这里略过求解过程,也不再举例,具体可参考本章的例 1 、例 3 。

Page 76: 第六章  运输问题与指派问题

3 运输问题的一些应用

运输问题并非仅仅用来解决实际的运输问题,现实生产和生活中,许多决策问题具有运输问题的特点和性质,或者可以转化成为运输问题。

因为运输问题的算法在求解某些问题时具有较好的效果,只要能转化成运输问题,求解会变得比较简单。

Page 77: 第六章  运输问题与指派问题

3 运输问题的一些应用• 例 5 某汽车发动机制造厂拟计划生产一批发动机来满足未来四个月汽车安装的需要。为了给出最优的进度安排,使总成本最小,有关人员已收集数据如下表:

月份计划安装量(台)

最大产量单位生产成本(元) 单位库

存成本(元)

正常时间

加班时间

正常时间

加班时间

1 15 25 10 4800 5000 150

2 20 20 10 5100 5200 150

3 10 15 5 5000 5100 150

4 25 10 15 5300 5500 —

表 6-13 发动机厂生产数据

Page 78: 第六章  运输问题与指派问题

生产(供应)安装(需求)

总供应量1月份 2月份 3月份 4月份

1月份(正常)

4800 4950 5100 5250 25

1月份(加班)

5000 5150 5300 5450 10

2月份(正常)

99999 5100 5250 5400 20

2月份(加班)

99999 5200 5350 5500 10

3月份(正常)

99999 99999 5000 5150 15

3月份(加班)

99999 99999 5100 5250 5

4月份(正常)

99999 99999 99999 5300 10

4月份(加班)

99999 99999 99999 5500 15

需求量 15 20 10 25

表 6-14 发动机厂生产进度成本表(运价表) (单位:元 /台)

Page 79: 第六章  运输问题与指派问题
Page 80: 第六章  运输问题与指派问题

3 运输问题的一些应用例 6 某市拟开办第三所小学,需要为该市内的所有小学重新划定服务区域。该市大致分 6 个城区,每一城区内小学生数量以及到各小学的近似距离见表 6-15 。学校的招生数量视具体情况可在一定范围内变动。服务区域的划分目标是使学生到学校的平均距离最短。试求最优划分方案。

Page 81: 第六章  运输问题与指派问题

学校区域

距离学校距离(公里)学生数量

1 2 3

1 1.1 1 1.6 400

2 1.2 0.7 1.8 300

3 1.3 2 1.4 350

4 0.5 1.9 0.6 300

5 2.2 0.8 2.6 400

6 1.6 1.3 1.5 350

最小招生数 600 700 300

最大招生数 900 1000 700

表 6-15 划分小学生入学区域问题的相关数据

Page 82: 第六章  运输问题与指派问题
Page 83: 第六章  运输问题与指派问题

§6.5 指派问题 1 指派问题的数学模型和性质

• 指派问题 (Assignment Problem) 是一种特殊的运输问题,也是特殊的线性规划问题,虽然也它属于 0-1 整数规划问题 , 但由于是运输问题的一类,根据运输问题的整数解特性,在求解的过程中不需要像其他 0-1 规划一样对0-1 变量进行 0-1 整数约束,大大降低了求解的复杂性。

• 典型的指派问题是将n 项工作交给n 个人去做,由于每个人做每一项工作所用的时间、费用等成本不同,所以指派问题的目标是如何安排工作,使总的时间、费用等成本最小(或使总的收益最大)。

• 在指派问题中完成工作的也不一定是人,也可能是其它工具,比如机器、汽车、工厂,甚至是要做工作的时间段。

Page 84: 第六章  运输问题与指派问题

对典型指派问题的假设:

执行工作的人(执行者)数和要完成的工作数量是相同的(一般我们用 n 来表示);

每个人只能做一件工作; 每件工作只能由一个人来完成; 第 个人完成第 项工作所需的成

本是 ,(或创造效益 ); 目标是如何分配工作,使总的成本最小(或总效益

最大)。

( 1, 2,..., )i i n ( 1,2,..., )j j n

ijc ijp

Page 85: 第六章  运输问题与指派问题

对典型的指派问题假设中,前三个假设十分难以实现,很多实际问题不能满足,但我们可以通过一些调整使它满足这些约束,比如,当工作数和人数不相等时,我们可以设一些虚的工作(或虚的执行者)来使二者相等,这方面和不平衡运输问题的处理方法类似。

典型指派问题的数学模型一般使用下面的决策变量 第 i 个人做第 j项工作 其他

1

0ijx

Page 86: 第六章  运输问题与指派问题

指派问题目标为最小化时的一般模型

1 1

minn n

ij iji j

Z c x

1

1, 1, 2,...n

ijj

x i n

1

1, 1, 2,...n

iji

x j n

s.t.

Page 87: 第六章  运输问题与指派问题

2 指派问题的应用

例 7 营销总监的安排• D 公司准备向华中、华南、华北和东北四区各派

一位营销总监,现有四位人选,他们分别是张、王、李、赵,由于他们对各地区的文化、市场、媒体等熟悉程度不同,不同的人在不同的地区预期创造的效益也不相同(详细数据见表 6-16 )。

• 问:如何将这四位营销总监安排到各大区域中才能使总的预期效益最大?

Page 88: 第六章  运输问题与指派问题

4 4

1 1

max ij iji j

Z p x

4

1

1, 1, 2,3,4ijj

x i

4

1

1, 1, 2,3,4iji

x j

s.t.

Page 89: 第六章  运输问题与指派问题
Page 90: 第六章  运输问题与指派问题

例 8 营销总监安排的变形问题• 假如例 7中 D 公司四位营销总监的月薪分别是

2.5、 2.1、 1.8、 1.6万元,若 D 公司想将业务范围扩大到西北和西南,现在公司想在六个区中筹建销售分公司,考虑到张先生业务最熟练,他可以最多负责三个区的建设,王先生的业务也比较熟练,他最多可以负责两个区的分公司的建设。为了避免多头领导,每个地区只派一个营销总监进行筹建工作。表 6-17 是各位营销总监在不同地区建分公司预计所用时间。

• 问:如何指派各位营销总监去建设各区的销售分公司才能使总工资成本最低?

Page 91: 第六章  运输问题与指派问题

表 6-17 例 8的数据 地区人员

所用筹建时间(月) 月薪(万元)1 华中 2 华南 3 华北 4 东北 5 西北 6 西南

营销总监

1张2王3李4赵

33.545

44

5.56

3.5357

6865

4645

879

7.5

2.52.11.81.6

Page 92: 第六章  运输问题与指派问题