匈牙利法解决人数与任务数不等的指派问题1

合集下载

匈牙利法的指派问题

匈牙利法的指派问题

15 19 C 26 19
18 23 17 21
21 22 16 23
24 18 19 17
x24 1, x33 1, 最优解 x11 1 ,

0 2 0 0 7 5 √ 0 4 6 2 √
第二步:在没有被直线复盖的元素中找出最 小元素,让打√号的列加上这个元 素,打√号的行减去这个元素
+2
5 0 2 0 2 3 0 0 0 10 5 7 9 8 0 0 0 6 3 6 2 0 5√ 4 2 √
7 6 14 6 10
9 6 12 10 6
最优值Z =32 ,即总费用为 32
12 8 C 7 15 4 7 9 7 9 6 6 17 12 14 14 6 6 10 7 10
+2 9 -7 5 0 2 3 6 -6 12 -7 0 10 10 -6 9 8 6 -4 0 6
例:有一份说明书要分别译成英、 工作 日、德、俄四种文字,现交给甲、 人 甲 乙丙、丁四个人去完成,每人完 乙 成一种。由于个人的专长不同, 丙 翻译成不同文字所需的时间(小 丁 时数)如右表,问应派哪个人去 完成哪个任务,可使总花费时间 最少?
-4 6 0 ,丁翻译德文 10 11 10 4 14 15 丙翻译英文 6 0 C 9 14 16 13 -9 0 5 0 5 7 4 7 8 11 28 总费用: 小时 0 1 0 1 4 2 9 -7 -4 -2
三、指派问题与匈牙利法
矩阵的概念
矩阵的引入 某班级同学早餐情况
姓名 周星 驰 张曼 玉 陈水 扁 馒头 4 0 4 包子 2 0 9 鸡蛋 2 0 8 稀饭 1 0 6

匈牙利法求解指派问题

匈牙利法求解指派问题

然后划去所在的列的其他0 元素,记作Ø。
Ø 13 7 0 6 6 9 5 3 2 Ø1 0 0
➢给只有一个0元素的列的0 元素加圈,记。
Ø 13 7 0 6 6 9 5 3 2 Ø 1 0
然后划去所在的行的其他0元 素,记作Ø
Ø 13 7 0 6 6 9 5 3 2 Ø 1 Ø
➢给最后一个0元素加圈, 记。
Ø 13 7 6 6 9 5 3 2 Ø 1 Ø
可见m=n=4,得到最优解。
0001 0100 1000 0010
即甲译俄文、乙译日文、丙 译英文、丁译德文所需时间 最少。Z=28小时
例6 分配问题效率矩阵
任务 A B C D E 人员
甲 12 7 9 7 9 乙8 9 6 6 6 丙 7 17 12 14 9 丁 15 14 6 6 10 戊 4 10 7 10 9
12 7 9 7 9 7 89666 6 7 17 12 14 9 7 15 14 6 6 10 6 4 10 7 10 9 4
50202 23000 0 10 5 7 2 98004 06365
➢从只有一个0元素的行开始,给 这个0元素加圈,记
50202 23000
10 5 7 2
98004 06365
然后划去所在的列的其他0元素,记 作Ø。
70202 4 3 000 Ø 8350 11 8 0 0 4 4 1 4 3
➢从只有一个0元素的行开始,给这个0 元素加圈,记
70202 4 3 000 Ø 8 3 5 11 8 0 0 4 4 1 4 3
然后划去所在的列的其他0元素,记 作Ø。
70202 4 3 00Ø Ø 8 3 5 11 8 0 0 4 4 1 4 3

指派问题——匈牙利法

指派问题——匈牙利法
•若资源少,事件多,则增加一些虚拟的 资源点,这些虚拟的资源做事件的效率 系数为0,可理解为这些费用(成本)实际 上不会发生;
• 若资源多,事件少,则增加一些虚拟 事件,这些虚拟事件被资源实现的费用( 成本、效率)取值为0;
非标准形式的指派问题
(3) 一个资源可以做多件事的指派问题
若某资源可以用来做几件事件,则 可将该资源化作相同的几个资源来接 受指派,这几个“资源”做同一事件的 费用(效率)系数取相同值;
例 下列矩阵中,最少3条直线覆盖了所有0元 素,因此可判定矩阵有3个独立0元素。
0 1 3 4 2 0 6 0 0 5 9 3 2 7 0 6
指派问题的匈牙利解法——步骤
Step 1. 每行减去该行的最小数, 每列减去该 列的最小数,使矩阵每行每列均有0元素;
Step 2. 寻找独立0元素
• 从单个0元素的行(列)开始,给0加圈,记作◎,然 后划去所在列(行)的其它0元素,记为;重复进 行,直到处理完所有列(行)的单个0元素;
• 练习例题:甲乙丙丁四个人,A、B、C、D四 项任务,不同的人做不同的工作效率不同, 表中数据为时耗,如何指派不同的人去做不 同的工作使效率最高?
数模: minZ=ΣΣcijxij Σxij=1 i=1,…,n Σxij=1 j=1,…,n Xij=0或1
任务 人 时间
甲 乙 丙 丁
ABC D 4 10 7 5 2763 3344 4663
(1) 最大化指派问题
设效率矩阵为 C (cij )nn ,其中最大元素 为 m,令矩阵 B (bij )nn , bij m cij ,则 以 B为效率矩阵的最小化指派问题和以C为 效率矩阵的原最大化指派问题有相同的最优 解;
非标准形式的指派问题

分配问题指派问题与匈牙利法课件

分配问题指派问题与匈牙利法课件
➢现问:如何确定一个分派工人去工作的方案,使得工人们 完成工作的总时间为最少。
分派方案满足下述两个条件:
• 任一个工人都不能去做两件或两件以上的工作 1.任一件工作都不能同时接受两个及以上的工人去做
分配问题指派问题与匈牙利法课件
标准形式的分配问题
n个人 n件事
每件事必有且只有一个人去做 每个人必做且只做一件事
5 0 2 0 2
2
3
0
0
0
0 10 5 7 2
9
8
0
0
4
0 6 3 6 5
圈0个数4 < n=5
5 0 2 0 2
2
3
0
0
0
0 10 5 7 2
9
8
0
0
4
0 6 3 6 5
分配问题指派问题与匈牙利法课件
⑥找未被直线覆盖的最小数字k;
⑦对矩阵的每行:当该行有直线覆盖时,令ui=0; 当 该 行 无 直 线 覆 盖 时 , 令 ui=k 。
⑩再次寻找独立零元素
逐列检验
4 8 7 15 12
7 9 17 14 10
6
9
12
8
7
6 7 14 6 10
6
9
12
10
6
0 3 0 11 8
0 0 6 6 2
0
1
2
1
0
0 0 5 0 4
0
2
3
4
0
0 0 1 0 0
0 1 0 0 0
0
0
0
0
1
0 0 0 1 0
分配问题指派问题与匈牙利法课件
数学模型

第五章 匈牙利法与最佳指派问题

第五章 匈牙利法与最佳指派问题

7 2 2
4
3
8 3 5 3
11 8
4
4 1 4
情况一出现,即得到了最优解,其相应的解矩阵为:
0 1 0 0 0
0 0 1 0 0
xij
1
0
0
0
0
0 0 0 1 0
0 0 0 0 1
由此得知最优指派方案为甲完成任务B,乙完成任务
C,丙完成任务A,丁完成任务D,戊完成任务E,最少时
间为
min z 7 6 7 6 6 32
而总的最少时间为32天.
当然,由于方法中的第二步4中的情况二的出现,造成 指派问题的最优解常常是不唯一的,但不同最优解的 最优值总是相同的.
第三节 非标准指派问题
前一节的匈牙利法只适用于目标函数为极小、价值 系数矩阵为方阵且价值系数矩阵中元素均为非负的情况。 当指派问题不满足上述三个条件时,就应先化成标准的 指派问题,然后再用匈牙利法求解.
解:
ABC DEF
甲 16 10 12 15 0 0 8 2
甲 16 10 12 15 0 0
8
2
乙 11 12 10 18 0 0 3 2 3

11
12
10
18
0
0
3
2
3
丙 8 17 13 16 0 0 7 3 1

8
17 13 16
0
0
7
3
1
8 10 10 15
本例经过反复的行、列检验后得到如下矩阵:
5 2 2
2
3
10 5 7 5
9
8
4
6 3 6 2
情况三出现,亦即未得到完全分配方案,求解过程 按以下步骤继续进行。

匈牙利算法求解教学任务指派问题

匈牙利算法求解教学任务指派问题

Xij
(1)
使得总效益最高(时间最少、成本最小、收益最大等),
即目标函数
。当

时, 为
一对一指派问题;否则为多人协作或兼职问题。 求解指派问题的方法通常有分支定界法、隐枚举法、
匈 牙 利 法 等 [1]。 匈 牙 利 算 法 由 匈 牙 利 数 学 家 Edmonds 于 1965 年提出,是基于 Hall 定理中充分性证明的思想,用增 广路径求二分图最大匹配的算法,算法的核心是寻找增广 路径,也可用于指派问题的求解 [2]。
指派问题的数学模型通常是:设 n 个人(或机器)被 分配去做 m 件工作,由于工作性质和各人(或机器)的专 长不同,完成不同工作的效益(时间、成本、收益等)将有 差别,用系数矩阵 C 表示,Cij 表示第 i 个人完成第 j 件工作 的效益,Cij ≥ 0(i=1,...,n;j=1,...,m)。当 n=m 时,为 平衡状态下的标准指派问题;当 n > m 时,人数多于任务数, 属于不平衡状态下择优录用问题;当 n < m 时,人数少于 任务数,可以分为某些任务不管和一人完成多项任务两种 情况,属于不平衡状态下指派问题的拓展。求解指派矩阵 X:
针对多人执行多项工作的指派问题,张云华采用匈牙 利算法的基本思想和步骤进行了研究 [3]。目标分配问题作 为指派问题的一种类型,谷稳综合匈牙利算法及其进化算 法的特点,对机器人足球的目标分配问题进行了研究 [4]。 为避免匈牙利算法多次试分配导致处理速度慢的不足,周 莉等人对寻找独立零的次序进行改进,得到匈牙利算法求 解指派问题的一次性分配算法 [5]。李延鹏等人提出利用虚 拟工作代替并联环境,将具有并联环节的人员指派问题转
本文基于匈牙利算法,建立教学任务指派优化模型, 分析如何分配教师承担教学任务以使系统整体现求解。

匈牙利法的指派问题-33页文档资料

匈牙利法的指派问题-33页文档资料

C
c11 c21
ci1
b
c12 c22
ci2 b
cn1
cn2
c1n c2n
cin b
cnn
minZ Z b
minZ Zb
若X0是minZ的最优, 解则 X0也是 minZ的最优解
指派问题的最优解:
若C中有n 个位于不同行不同列的零元素,
则令这些零元素对应的变量取1,其余变量
例:有一份说明书要分别译成英、 工作
日、德、俄四种文字,现交给甲、人
英日德 俄
乙丙、丁四个人去完成,每人完 甲 2 15 13 4
成一种。由于个人的专长不同,
乙 丙
10 4 14 15 9 14 16 13
翻译成不同文字所需的时间(小 丁 7 8 11 9
时数)如右表,问应派哪个人去
完成哪个任务,可使总花费时间
2
C
10
9 7
15 4 14 8
13 14 16 11
4 -2
15 -4
13 9
-9 -7
0
6 0 0
13 0 5 1
11 10 7 4
2 0 13
11
4 2
6
0 0
0 5 1
7 6 3 0
0
9
2
0
-4 -2
最优解的取法:
从含0元素最少的行或列开始,圈出一个0元 素,用 ○表示,然后划去该○所在的行和列 中的其余0元素,用×表示,依次类推,若能 得到n个○,则得最优解X0
最 优
取x14 1,x22 1, x31 1, x43 1 ,其余 xij 0

总费用 Z c14 x14 c22x22c31x31c43x43 0

指派问题的解法——匈牙利法_实用运筹学:案例、方法及应用_[共3页]

指派问题的解法——匈牙利法_实用运筹学:案例、方法及应用_[共3页]


⎨ ⎪
5
∑ xij
i =1
=1
,
j = 1,2,3,4,5
⎪ ⎩
xij
= 0或1
由例 4-11 可见,指派问题数学模型的一般形式如下
nn
min z = ∑ ∑ cij xij i =1 j =1
⎪⎧i∑=n1 xij = 1 , j = 1, 2,", n
⎪ s.t.⎨

n
∑ xij = 1 ,
j =1
i = 1,2,",n
⎪ ⎩
xij
=
0或 1
第 j项任务只能由一人完成 第 i人只能完成一项任务
4.5.2 指派问题的解法——匈牙利法
指派问题的数学模型与运输问题相似,但与后者比较,指派问题具有自己的特点。实 际上,指派问题是 0-1 规划问题的特例。虽然我们可以利用运输问题的解法求解指派问 题,但由于指派问题出现严重的退化,计算效率往往不高。库恩(W.W.Kuhn)于 1955 年 提出了求解指派问题的方法,他引用了匈牙利数学家康尼格一个关于矩阵中 0 元素的定 理——系数矩阵中独立 0 元素的最多个数等于覆盖所有 0 元素的最少直线数。故该解法被 称为匈牙利法。
匈牙利法的基本思路为:对费用矩阵 C 的行和列减去某个常数,将 C 化成有 n 个位于 不同行不同列的零元素,令这些零元素对应的变量取 1,其余变量取零,即得指派问题的 最优解。
匈牙利法是基于指派问题的标准型的,标准型需满足以下 3 个条件: (1)目标函数求 min ; (2)效率矩阵为 n 阶方阵; (3)效率矩阵中所有元素 cij ≥ 0 ,且为常数。 匈牙利法的计算步骤如下: (1)变换效率矩阵 C,使每行每列至少有一个零,变换后的矩阵记为 B。 ● 行变换:找出每行最小元素,从该行各元素中减去之; ● 列变换:找出每列最小元素,从该列各元素中减去之; ● 若某行(列)已有 0 元素,就不必再减。 以例 4-11 为例,效率矩阵变换为

第二题 指派问题

第二题 指派问题

分配问题与匈牙利法
2. 不平衡的指派问题
当人数m大于工作数n时,加上m-n项虚拟工作,例如:
5
9 10
11
6
3
8 14 17
6
4
5
3
2
1
5 9 10 0 0
11
6
3
0
0
8 14 17 0 0
6
4
5
0
0
3 2 1 0 0
当人数m小于工作数n时,加上n-m个人,例如
15 20 10 9
最少时间为105。
分配问题与匈牙利法
例4.6 有一份中文说明书,需译成英、日、德、俄四种文字, 分别记作A、B、C、D。现有甲、乙、丙、丁四人,他们将 中文说明书译成不同语种的说明书所需时间如下表所示,问 如何分派任务,可使总时间最少?
任务
人员
A
B
C
D

6
7
11
2

4
5
9
8

3
1
10
4

5
9
8
2
分配问题与匈牙利法
分配问题与匈牙利法
例4.7 已知四人分别完成四项工作所需时间如下表,求最优 分配方案。
任务
人员
A
B
C
D

2
15
13
4

10
4
14
15

9
14
16
13

7
8
11
9
分配问题与匈牙利法
解:1)变换系数矩阵,增加0元素。
2 15 13 4 2

匈牙利法解决人数及任务数不等的指派问题

匈牙利法解决人数及任务数不等的指派问题

匈牙利法解决人数与任务数不等的指派问题于凯重庆科技学院经济管理学院物流专业重庆沙坪坝区摘要:本文将讨论运筹学中的指派问题,而且属于非标准指派问题,即人数与任务数不相等的指派问题,应当视为一个多目标决策问题,首先要求指派给个人任务数目两两之间相差不能超过1,其次要求所需总时间最少,并且给出了该类问题的求解方法。

关键词:运筹学指派问题匈牙利算法系数矩阵解矩阵引言:在日常的生产生活中常遇到这样的问题:有n项任务,有n个人员可以去承担这n 项任务,但由于每位人员的特点与专长不同,各对象完成各项任务所用的时间费用或效益不同;有因任务性质要求和管理上需要等原因,每项任务只能由一个人员承担来完成,这就涉及到应该指派哪个人员去完成哪项任务,才能使完成n项任务花费总时间最短,总费用最少,产生的总效益最佳。

我们把这类最优匹配问题称为指派问题或分配问题。

1.指派问题的解法——匈牙利法早在1955年库恩(,该方法是以匈牙利数学家康尼格(koning)提出的一个关于矩阵中0元素的定理为基础,因此得名匈牙利法(The Hungonrian Method of Assignment)1.1匈牙利解法的基本原理和解题思路直观的讲,求指派问题的最优方案就是要在n阶系数矩阵中找出n个分布于不用行不同列的元素使得他们的和最小。

而指派问题的最优解又有这样的性质:若从系数矩阵C(ij)的一行(列)各元素都减去该行(列)的最小元素,得到新矩阵CB(ij),那么以CB(ij)为系数矩阵求得的最优解和原系数矩阵C(ij)求得的最优解相同。

由于经过初等变换得到的新矩阵CB(ij)中每行(列)的最小元素均为“○”,因此求原指派问题C(ij)的最优方案就等于在新矩阵CB(ij)中找出n个分布于不同行不同列的“○”元素(简称为“独立○元素”),这些独立○元素就是CB(ij)的最优解,同时与其对应的原系数矩阵的最优解。

1.2匈牙利法的具体步骤第一步:使指派问题的系数矩阵经过变换在各行各列中都出现○元素。

指派问题与匈牙利解法

指派问题与匈牙利解法

指派问题与匈⽛利解法指派问题概述:实际中,会遇到这样的问题,有n项不同的任务,需要n个⼈分别完成其中的1项,每个⼈完成任务的时间不⼀样。

于是就有⼀个问题,如何分配任务使得花费时间最少。

通俗来讲,就是n*n矩阵中,选取n个元素,每⾏每列各有1个元素,使得和最⼩。

如下图:指派问题性质:指派问题的最优解有这样⼀个性质,若从矩阵的⼀⾏(列)各元素中分别减去该⾏(列)的最⼩元素,得到归约矩阵,其最优解和原矩阵的最优解相同.匈⽛利法:12797989666717121491514661041071091.⾏归约:每⾏元素减去该⾏的最⼩元素502022300001057298004063652.列归约:每列元素减去该列的最⼩元素502022300001057298004063653.试指派:(1)找到未被画线的含0元素最少的⾏列,即,遍历所有未被画线的0元素,看下该0元素所在的⾏列⼀共有多少个0,最终选取最少个数的那个0元素。

(2)找到该⾏列中未被画线的0元素,这就是⼀个独⽴0元素。

对该0元素所在⾏和列画线。

50202230000105729800406365502022300001057298004063655020223000010572980040636550202230000105729800406365(3)暂时不看被线覆盖的元素,重复(1)(2)直到没有线可以画。

(4)根据(2)找到的0元素个数判断,找到n个独⽴0元素则Success,⼩于n个则Fail.(本例⼦中,n=5,可以看到,第⼀次试指派之后,独⽴0元素有4个,不符合)4.画盖0线:⽬标:做最少的直线数覆盖所有0元素,直线数就是独⽴0元素的个数。

注意:这跟3的线不同;不能⽤贪⼼法去画线,⽐如1 0 01 1 01 0 1若先画横的,则得画3条线,实际只需2条;若先画竖的,将矩阵转置后同理。

步骤3得出的独⽴0元素的位置50202230000105729800406365(1)对没有独⽴0元素的⾏打勾、(2)对打勾的⾏所含0元素的列打勾(3)对所有打勾的列中所含独⽴0元素的⾏打勾(4)重复(2)(3)直到没有不能再打勾(5)对打勾的列和没有打勾的⾏画画线,这就是最⼩盖0线。

最短路径、指派、运输问题

最短路径、指派、运输问题

第二步:进行试指派以寻求最优解。
(1)进行行检验:从只有一个0元素的行开始,给这 个0元素加(),记作(0);再划去(0)所在列的其它 0元素,记作φ。若遇到有两个0元素以上的行,先放下。 (2)进行列检验:给只有一个0元素的列0元素加() ,记作(0);然后划去(0)所在行的0元素,记作φ。 (3)再对两个以上0元素的行和列标记,任意取一个 加()。
B1 A1 A2 A3 4 7 6
B2 8 9 9
B3 7 17 12
B4 15 14 8
B5 12 10 7
A4
A5
6
6
7
9
14
12
6
10
10
6
三、其它指派问题
(1)目标函数求最大值的指派问 题 对于此问题可做一个新的 矩阵B=(bij)。找出原矩阵的最 大元素m,令B=(bij)=m-cij

产 量 与 销 量 平 衡
解: 设产地Ai到销地Bi的运量为xij,由问题构造运量平衡表
可以知道:
(1)产销平衡 (2)Ai运出量等于产量 (3)Bj运入量等于销量
a b
i 1 i j1
m
n
j
x
j 1
n
ij
ai
x
i 1
m
ij
bj
运量平衡表
销地Bi 运价 产地Ai A1 A2 C11 C21 C12 C22 B1 B2
4 2 (cij ) 4 3 3 3 3 2 4 6 5 6 1 - 1 3 5 - 2 0 1 4 - 3 5 -2 1 2 1 0 0 3 0 - 1 3 4 3 - 2 0 1 2 1-3 4 3 -2 1 -2 2 1 0 0 1 2 0 2 0 3 (b ) ij 1 3

匈牙利法解决人数与任务数不等的指派问题1

匈牙利法解决人数与任务数不等的指派问题1

匈牙利法解决人数与任务数不等的指派问题于凯重庆科技学院经济管理学院物流专业重庆沙坪坝区摘要:本文将讨论运筹学中的指派问题,而且属于非标准指派问题,即人数与任务数不相等的指派问题,应当视为一个多目标决策问题,首先要求指派给个人任务数目两两之间相差不能超过1,其次要求所需总时间最少,并且给出了该类问题的求解方法。

关键词:运筹学指派问题匈牙利算法系数矩阵解矩阵引言:在日常的生产生活中常遇到这样的问题:有n项任务,有n个人员可以去承担这n 项任务,但由于每位人员的特点与专长不同,各对象完成各项任务所用的时间费用或效益不同;有因任务性质要求和管理上需要等原因,每项任务只能由一个人员承担来完成,这就涉及到应该指派哪个人员去完成哪项任务,才能使完成n项任务花费总时间最短,总费用最少,产生的总效益最佳。

我们把这类最优匹配问题称为指派问题或分配问题。

1.指派问题的解法——匈牙利法早在1955年库恩(w.w.ku.hn)就提出了指派问题的解法,该方法是以匈牙利数学家康尼格(koning)提出的一个关于矩阵中0元素的定理为基础,因此得名匈牙利法(The Hungonrian Method of Assignment)1.1匈牙利解法的基本原理和解题思路直观的讲,求指派问题的最优方案就是要在n阶系数矩阵中找出n个分布于不用行不同列的元素使得他们的和最小。

而指派问题的最优解又有这样的性质:若从系数矩阵C(ij)的一行(列)各元素都减去该行(列)的最小元素,得到新矩阵CB(ij),那么以CB(ij)为系数矩阵求得的最优解和原系数矩阵C(ij)求得的最优解相同。

由于经过初等变换得到的新矩阵CB(ij)中每行(列)的最小元素均为“○”,因此求原指派问题C(ij)的最优方案就等于在新矩阵CB(ij)中找出n个分布于不同行不同列的“○”元素(简称为“独立○元素”),这些独立○元素就是CB(ij)的最优解,同时与其对应的原系数矩阵的最优解。

浅析指派问题的匈牙利解法成稿讲解

浅析指派问题的匈牙利解法成稿讲解

浅析指派问题的匈牙利解法胡小芹数学科学学院数学与应用数学学号:040414057指导教师:苏孟龙摘要:对于指派问题,可以利用许多理论进行建模并加以解决,但匈牙利解法是解决指派问题的一种非常简单有效的方法,并且可以解决多种形式的指派问题,但匈牙利算法本身存在着一些问题,本文主要介绍了匈牙利算法的基本思想,基本步骤,以及它的改进方法.在匈牙利算法的基础上,本文还介绍了两种更简便实用的寻找独立零元素的方法——最小零元素消耗法和对角线法.关键词:指派问题;匈牙利解法;最小零元素消耗法;对角线法0 引言在现实生活中经常会遇到把几个任务分派给几个不同的对象去完成,由于每个对象的条件不同,完成任务的效率和效益亦不同.指派问题的目标就是如何分派使所消耗的总资源最少(或总效益最优),如给工人分派工作,给车辆分配道路,给工人分配机床等等,同时许多网络问题(如旅行问题,任务分配问题,运输问题等),都可以演化成指派问题来解决.在现实生活中,指派问题是十分常见的问题,而匈牙利解法是解决指派问题的一种非常简单有效的方法.本文主要介绍匈牙利解法的基本原理及思想,解题步骤,不足与改进,以使匈牙利法更能有效地解决指派问题.1 指派问题及其数学模型指派问题是指由m项任务,需要n个人来承担,每人只能承担一项任务,且每项任务只能有一人来承担,由于各人的专长不同,各人完成的任务不同,导致其效率也各不相同.因此,就产生怎样科学地指派任务,才能使完成各项任务所消耗的总资源最少(或总成本最低等),由于n m ,不同,指派问题可分为以下三种情况:第一、当n m =时,即为每人指派一项任务.第二、当n m >时,即任务数〉人数,这时可虚设)(n m -个人构成m m ⨯的 效率矩阵,并且这)(n m -个人在执行这m 项任务时的效率应该是效率最高. 第三、当n m <时,即配置人数〉任务数,这时应虚设)(m n -项任务,并且这n 个人在执行这)(m n -项任务时的成本最低.通过虚设任务或人,指派问题的效率矩阵都可以转化成方阵.匈牙利解法要求指派问题最小化,其数学模型为设用0ij c >(,1,2,,)i j n =表示指派第i 个人去完成第j 项任务时所用的时间,定义决策变量 10ij i j x i j ⎧=⎨⎩表示第个人完成第项任务, 表示不指派第个人完成第项任务.则问题可转化为0-1线性规划问题:∑∑===n j ij n i c Z 11mint s ⋅ 111,1,2,,,1,1,2,,,01,i,j 1,2,,n nij i nij j ijx j n x i n x ==⎧==⎪⎪⎪==⎨⎪⎪==⎪⎩∑∑或.如果指派问题要求的是最大化问题如F max ,则可以转化为最小化问题,一般方法是:取max (,1,2),ij M c i j n ==令(,1,2,)ij ij b M c i j n =-=,则11min ,n n ij i j f b ===∑∑,max F nM f F =-有从而求. 2 指派问题的解法——匈牙利解法“匈牙利解法”最早是由匈牙利数学家 D.Konig 用来求矩阵中0元素的一种方法,由此他证明了“矩阵中独立0元素的最大个数等于能覆盖所有0元素的最少直线数”.1955年由W.W.Knhu 在求解著名的指派问题时引用了这一结论,并对具体解法做了改进,仍称为匈牙利解法.2.1 匈牙利解法的基本原理和解题思想从根本上讲,求指派问题的最优解就是要在n 阶方阵中找到n 个这样的元素,它们分布在不同行不同列上,并且这些元素之和为最小,而要使这些元素之和为最小,就要使其中的每一个元素尽可能的小——最好这些元素都是其所在行所在列上的最小元素.而指派问题的最优解又具有这样的性质(定理1):若从系数矩阵)(ij c 的每行(列)各元素中分别减去该行(列)的最小元素,得到的新矩阵()ij b ,那么以()ij b 为系数矩阵求得的最优解与用()ij c 求得最优解相同.由于新矩阵()ij b 中每行每列都有最小元“0”,因此,求原指派问题的最优解转化为在()ij b 中指出n 个分布在不同行不同列上的“0”元素(简称为独立0元素),而根据考尼格(Konig )证明的定理(定理2):矩阵中独立元素的0最多个数等于能覆盖所有零元素的最少直线数,利用这一定理,就可以通过寻找“能覆盖所有零元素的最少直线数”来确定()ij b 中独立元0素的具体数量.若()ij b 中独立0元素的个数少于矩阵的阶数n ,就要继续对矩阵()ij b 进行化简,直到找到n 个独立0元素为止,这就是匈牙利解法的基本原理和解题思想.2.2 匈牙利解法的解题步骤第一步:变换效益矩阵,使新矩阵中的每行每列至少有一个0.(1)行变换:找出每行最小元素,再从该行各元素中减去这个最小元素.(2)列变换:从所得新矩阵中找出每列中的最小元素,再从该列各元素中减去这个最小元素.第二步:进行试指派,以寻找最优解.(1)逐行检查从第一行开始,如果该行只有一个零元素,就对这个零元素打上括号,划去与打括号零元素同在一列的其他零元素,如果该行没有零元素,或有两个或多个零元素(已划去的不计在内),则转下行.打括号的意义可理解为该项任务已分配给某人.如果该行只有一个0,说明只能有唯一分配.划掉同列括号零元素可理解为该任务已分配,此后不再考虑分配给他人.当该行有两个或更多的零元素时,不计括号内的,其理由是至少有两个分配方案,为使以后分配时具有一定的灵活性,故暂不分配.(2)逐列检查在行检查的基础上,由第一列开始检查,如果该列只有一个零元素,就对这个零元素打括号,再划去与打括号零元素同行的其它零元素.若该列没有零元素或有两个以上零元素,则转下一列.(3)重复(1)、(2)两步后,可能出现以下三种情况:①每行都有一个零元素标出括号,显然打括号的零元素必然位于不同行不同列,因此得到最优解.②每行每列都有两个或两个以上的零,这表示对这个人可以分配不同任务中的任意一个.这时可以从所剩零元素最少的行开始,比较这行各零元素所在列中元素的个数,选择零元素少的那列这个零元素打括号,划掉同行同列的其他它零元素,然后重复前面的步骤,直到所有0都作了标记.③矩阵中所有零都作了标记,但标有(0)的元素个数少于m个,则转下步.第三步:做最少的直线覆盖所有零元素,以确定该系数矩阵中能找到最多的独立0元素.·对没有()的行打√;·对打√的行上所有含0元素的列打√;·再对打√的列上有()的行打√;·重复上两步,直到过程结束;·对没有打√的行划横线,对所有打√的列划垂线.这就得到了能覆盖矩阵中所有0元素的最少直线数.第四步:非最优阵的变换——零元素的移动.(1)在没有被直线覆盖的所有元素中,找出最小元素;(2)所有未被直线覆盖的元素都减去这个最小元素;(3)覆盖线十字交叉处的元素都加上这个最小元素;(4)只有一条直线覆盖的元素的值保持不变.第五步:回到第二步,反复进行,直到矩阵中每行每列都有一个打()的0元素为止,即找到最优解.2.3 匈牙利算法的一点注记(1)匈牙利算法第一步变换效益矩阵使每行每列都出现零元素,一般方法是先行变换,再列变换,但先列变换再行变换最优解不变.(2)有些时候先行后列变换后不能得到最优解,但先列后行变换时却能直接找到最优解,从而减少了计算步骤,使计算简明.如下所示:先行变换,再列变换得2109715414813141611415139B ⎡⎤⎢⎥⎢⎥=→⎢⎥⎢⎥⎣⎦(0)82511(0)5423(0)001145B ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦只找到三个独立0元素,不是最优解.那么先列变换,后行变换得2109715414813141611415139B ⎡⎤⎢⎥⎢⎥=→⎢⎥⎢⎥⎣⎦06(0)013(0)51763(0)(0)920B ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦ 每行每列都有“(0)”,得到最优解.3 匈牙利法的不足与改进3.1 不足和改进(一)以上是匈牙利法的常规解题方法,虽然能有效地解决指派问题,但是其解题过程中还存在以下两点不足:第一、在匈牙利算法的第二步中用“试指派”的方法寻找独立0元素,道理简单,也能很快找到独立0元素,但对于一个n 阶方阵,这些独立0元素在矩阵中可能有n 种排列方式,这样在矩阵中标出来的独立0元素排列很乱,没有规律.另外,对于某些矩阵0元素排列的比较有规律,本可以用别的更简单的方法寻找独立0元素,而用这种“一般性”的方法比较麻烦.第二、在匈牙利算法的第三步“做最少的直线覆盖所有0元素”过程中,一会儿针行,一会儿针对列,一会儿对没有()的打√,一会儿又对有()的打√,一会对没有打√号的(行)划线,一会又对打√号的(列)划线,这样变来变去令人晕头转向,稍不注意就会出错,特别是对于这种画法每一步的意图以及内在原理,大多数人难以理解,具体步骤很难记住,难以掌握,这就影响了这一理论在实际工作中的应用.算法的改进:第一、寻找独立0元素的一种新方法——对角线法.对角线法的原理:根据要在指派问题化简后的系数矩阵(ijb)中找出n个独立0元素,而这些独立0元素又分布在方阵的不同行不同列上,利用这一特点,我们可以对矩阵(ijb)的行(或列)进行某种调换,就一定可以使这些独立0元素按矩阵的对角线排列,这样凡是出现在对角线上的零元素一定是独立0元素,而非对角线上的零元素也一定是非独立0元素,这样我们既能很快找到所有独立0元素,又能直观地发现矩阵中独立0元素的个数.方法:从0元素数量最少的行开始,选择该列第一个0元素,根据该0元素所在行的位置确定该列元素在新矩阵中列的位置(若该0元素所在行是第i行,那么就将该0元素所在列放在新矩阵的第i列),并在原矩阵中划去这一列,并划掉同行其它0元素,再在剩下的矩阵中重新比较各列0元素的数量,并按前面方法进行,直至完成.这样就可以将所有独立0元素集中放在新矩阵的对角线上,当对角线上全为0时,就得到了指派问题的最优解,如果对角线上某一处不为0,说明该矩阵中独立0元素数量不足,这时需要对矩阵作进一步化简.应用示例: 寻找矩阵B中的独立0元素B=5050200304400401⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦→B=5050200304400401⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦→10505003244004010B⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦(第一列与第四列交换)或25050 2300 0044 0104B⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦(第二列与第四列交换)第二、最少直线的一种简单画法.画法原理:根据定理“矩阵中独立0元素的最多个数恰好等于能覆盖所有0元素的最少直线数”,也就是说矩阵中有多少个独立0元素,就需要多少条直线将所有0元素覆盖,而从匈牙利法解题步骤看矩阵中独立0元素的数量m 及位置,在划线前是已知,所以覆盖0元素的最少直线数m 也是已知的.由于任意两个独立0元素“(0)”都不同行且不同列,而盖0线也只能按矩阵的行或列来划,因此,一条盖0线只能覆盖一个“(0)”,要覆盖m 个“(0)”就需要m 个直线.基于“盖0线”与独立0元素“(0)”之间数量的一对一关系,只要我们始终围绕着独立0元素“(0)”来画线,首先就能用最少的直线覆盖所有的独立0元素.另外,由于矩阵中的非独立0元素总是和某个独立0元素在同一行或同一列,因此画盖“(0)”线时,只要我们能使每条盖0线都尽可能多的附带非独立0元素,那我们就能实现用最少的直线覆盖所有0元线.具体画法:(1)标记——对“(0)”所在行和列上的0元素数量在行列旁予以标注,对没有“(0)”的行与列的打×号予以标记.(2)画线——从有“(0)”的行与列中找出0元素最多的行(或列)画一横(或纵)线覆盖这些0元素.(3)修正——从“(0)”所在行与列上的0元素数量减去已被覆盖的0元素数.(4)重复上述过程,直至覆盖所有0元素.上述方法的关键是紧紧抓住独立0元素其所在行与列上的0元素的多少决定盖0线的画法(即画线的先后和方向,横向还是纵向),使每条线都能覆盖尽可能多的0元素.另外,因某些非独立0元素处在可被两条盖0线同时覆盖的交叉点上,为减少重复性覆盖,每画一条线后都要对各行各列0元素数予以修正(从中减去已被覆盖的0元素数).示例: 试用最少的直线覆盖下列矩阵中的所有0元素5(0)202230(0)0(0)1057298(0)0406365B ⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎣⎦→ 5(0)2022230(0)03(0)10572198(0)04206365B ⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⨯⎣⎦2 1 23 ×5(0)2022230(0)00(0)10572198(0)04206365B ⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⨯⎣⎦→ 5(0)2020230(0)00(0)10572198(0)04206365B ⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⨯⎣⎦→ 2 1 1 × × 2 × 1 × ×5(0)2020230(0)00(0)10572198(0)04006365B ⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⨯⎣⎦ 2 × × × ×注意:当矩阵中的行和列旁标的0元素的数量相等时,我们从中任意选择一个画线,但是当此行(或列)中的0元素所对列(或行)中无“(0)”时,只能先划去此行(或列).比如上面的矩阵B 中,第二行和第四列中0元素相等,都是最多(3个),若先划去第四列,则第二行中第五列中的0元素用这种方法无法划去,若要划去这个0元素,则直线增多.3.2 不足和改进(二)用于解决指派问题的匈牙利解法,在运算过程中存在着两个问题:第一、算法不完善.从未标零元素最少的行取定0元素,不能保证0元素所在的列未标零元素最少.因此,系数矩阵已存在最大匹配,但无法取得最大匹配,而算法中途停止.第二、计算步骤烦琐.当0元素不够又没有未标零元素时,作直线覆盖,移动零元素,然后再取定0元素,反复进行.一 改进算法1 完善匈牙利算法选取零元素时,若被划行未标零元素多于一个,则要保证所标的零元素所在的列未标零元素最少.利用此方法可以解决问题一.2 改进算法步骤(1)利用匈牙利算法,由系数矩阵()ij c 得到各行各列都有零元素的等效矩阵()ij b .(2)若有未划零元素,则选有未划零元素最多的行或列作直线覆盖,直到没有未划零元素为止.(3)若直线数目小于n ,则在未划元素中选取最小元素,未划的各元素减去最小元素,直线交叉处的元素均加最小元素,转2.否则转4.(4)选取有未标零元素最少的行(或列)取未标零元素,记(0),同行同列的未标零元素记 φ;若该行(或列)未标零元素多于一个,则选列(或行)中未标零元素最少的本行未标零元素为(0),直到(0)元素个数等于n 为止.(5)结束算法,得到最大匹配.令对应于(0)的1ij x =,其余的0ij x =,并计算目标函数值.二 定义及定理定义1 作直线覆盖时,被直线覆盖的元素,称为已划元素.未被直线覆盖的元素,称为未划元素.定义2 求最大匹配时,已作记号(0)和φ的零元素称为已标元素,未作记号的零元素称为未标零元素.定理 矩阵()ij b 中已存在最大匹配的充要条件是直线覆盖其中全部零元素的最少数目为n .证明 必要性 若()ij b 中有最大匹配,则()ij b 中存在n 个不同行不同列的零元素,故至少n 条直线才能覆盖全部元素.充分性 若覆盖全部零元素的最少直线数目为n ,则()ij b 中有n 个不同行不同列的零元素.否则可以用少于n 条的直线能覆盖全部元素.此算法的优点是,先求具有最大匹配的等效矩阵,再求最大匹配.求解过程中可以减少迭代次数,降低计算量,并且对某些用匈牙利算法无法得到最大匹配的矩阵利用此改进的算法可以得到最大匹配,例如效益矩阵010()002003ij b ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦. 3.3 不足和改进(三)3.3.1 匈牙利法存在的问题我们用“匈牙利法”处理了许多与分配问题相关的运输、调度问题,大多数情况下算法是收敛的,得到了最优解,而处理一些特殊数据时算法不收敛,无法找出最优解,矩阵阶数越大的分配问题,不收敛的情况越多.试验中,发现了一个较小阶不收敛的系数矩阵,下面用“匈牙利法”对该矩阵进行分析2 2 4 1 4 4 4 4 12 2 1 1 23 3 3 12 3 1 4 4 2 4 3 42 1 1 4 13 1 1 23 1 1 1 2 2 1 3 11 3 1 42 23 1 33 4 2 1 1 1 3 3 13 24 1 3 1 4 1 21 4 12 1 43 1 4经过算法第一步,得到修正的系数矩阵1 1 3 0 3 3 3 3 01 1 0 0 12 2 2 01 2 0 3 3 1 3 2 31 0 0 3 02 0 0 12 0 0 0 1 1 0 2 00 2 0 3 1 1 2 0 22 3 1 0 0 0 2 2 02 13 0 2 0 3 0 10 3 0 1 0 3 2 0 3进行算法第二步,做分配方案,最终第2行无(0)标记,使得第2行第2列没有分配1 1 3 (0) 3 3 3 3 ×1 1 ×× 12 2 2 ×1 2 (0) 3 3 1 3 2 31 ×× 3 (0)2 ×× 12 ××× 1 1 (0) 2 ×(0) 2 × 3 1 1 2 × 22 3 1 ××× 2 2 (0)2 13 × 2 × 3 × 1× 3 × 1 × 3 2 (0) 3进行算法第三步,最终所有的行和所有的列都有∨标记,所有的行末画一条横线,所有的列都画上了竖线,各行列作标记的顺序如下∨∨∨∨∨∨∨∨∨⒄⑿⑵⑶⑻⑼⒀⒁⑷1 1 3 (0) 3 3 3 3 ×⑹∨1 1 ×× 12 2 2 ×⑴∨1 2 (0) 3 3 1 3 2 3 ⑸∨1 ×× 3 (0)2 ×× 1 ⑽∨2 ××× 1 1 (0) 2 ×⒂∨(0) 2 × 3 1 1 2 × 2 ⒅∨2 3 1 ××× 2 2 (0) ⑺∨2 13 × 2 (0) 3 × 1 ⑾∨× 3 × 1 × 3 2 (0) 3 ⒃∨进行算法第四步,没有找到未被直线覆盖的元素,所以也就无法找到最小的元素,也就不能产生新的效能矩阵,算法进入死循环.这就否定了“匈牙利法”主要过程的算法基础.若算法第二步未完成一个完全分配时,则一定能生成一个新的效能矩阵,出现新的零元素,再重新进行完全分配,最终一定能得到一个完全的最优解.3.3.2 匈牙利算法的改进为了使“匈牙利法”对任意数据都能有效的找到最优解,我们在原算法的基础上增加第六步,以及在第三步后面增加判断功能:若生成n条直线,无法生成新的效能矩阵,则退出“匈牙利法”,进行第六步.第六步:产生新的小系数矩阵,使原矩阵分解.(1)从第二步算法中,记下有(0)标记的行号和列号,作为部分解进行保存.(2)从系数矩阵中抽取行列都没有(0)标记的数据,组成一个新的小系数矩 阵:[]ij E ,1,2,,,1,2,,,i m j m m n ==<.(3)将小系数矩阵再代入“匈牙利法”, 继续计算, 得到小系数矩阵的分配解, 把它添加到部分解的结果中去,组合得到一个新的解,如果新的解仍然不是完全解,则转(1)继续处理.(4)对已分配的元素,两两一对组成任意一个矩形的斜对角顶点, 相加后生成一个基础量, 再将矩形的另一对斜对角顶点的元素相加,生成一个改变量,有n 个已分配的元素将产生12321n n ++++-+-对基础量和改变量.(5)对于每对基础量和改变量,如果存在基础量大于改变量的情况,则找出基础量与改变量差值最大的一对,由改变量取代基础量,转(4)继续处理.(6)得到整个分配的最优解,输出分配结果.在上例中,新的小系数矩阵仅为第2行和第2列,m 为1.另外,也没有找到改变量小于基础量的两对值,所以无须进行优化,直接将该元素添加到部分解中去,通常新的小系数矩阵的阶数都很小.文献[]5中给出了一个2222*的系数矩阵,存在上述问题,利用改进的匈牙利算法最终得到最优解.3.4 匈牙利算法的推广匈牙利算法的关键是在变换后的系数矩阵中找出n 个分布在不同行不同列的独立0元素,而匈牙利算法计算过程比较麻烦,文献[]8,文献[]9在匈牙利算法的基础上提出了两种比较简单的寻找独立0元素的方法:最小零元素消耗法及对角线法.3.4.1 最小零元素消耗法基本思想:对于一个给定的矩阵,其中0元素的数目是一定的,这一定的0元素最多能分配出多少个0元素来?当分配出一个0元素时,该0元素所在行和列上的其它0元素就无法再分配,失去了作用,也就是说,分配出该0元素要用去0元素的个数为:该0元素本身+该0元素所在行上的其它0元素+该0元素所在列上的其它0元素,称此数为该0元素的0消耗数.对于给定矩阵中的所有0元素,可以很容易地找出其0消耗数,根据动态规划的最优化原理,如果第1次分配出0消耗数最少的0元素,将消耗的0元素去掉,在余下的0元素中再分配0消耗最少的0元素,重复这样的过程,最终结果必将得到最多次数的分配即最大分配,这就是最小0元素消耗法.基本方法:利用匈牙利算法变换系数矩阵,使每行每列出现0元素,计算出各个0元素的消耗数,分配处0消耗数最少的那个0元素,以(0)标记.此0元素所在行所在列以不起作用,再计算余下的个各个0元素的消耗数,重复上述步骤,直至每行每列的0元素都标记完,最终得到最大匹配,若标记(0)的个数等于矩阵阶数,得到最优解.在应用此方法的时候,当遇到0消耗相同的0元素不止一个,此时应先分配哪个0元素呢?有以下三种情况:(1)0消耗数相同,但0元素在同一行或同一列上,如下所示:120(,)0(,)i j ij120(,)0(,)i j ij现就0元素在同一行的情况说,如果分配其任何一个,另一个则被消耗掉,他们的0消耗数实际上是相同的,只能表示一个分配,要么分配10(,)i j ,要么分配20(,)i j ,但第i 行则可以确定下来,等其它0元素分配完以后,如12,j j 列中有一列确定,则第i 行可以具体确定出0元素,若12,j j 列仍未确定,则说明最大分配小于n ,或者有多种最优分配方案.对于同一列的情况,可以确定第j 列,具体分配哪一个,视其它0元素的分配而定.(2)0消耗数相同且互相影响,但0元素不同行不同列,此时0元素的消耗数必共同消耗一个或两个0元素,如下所示:11220(,)00(,)i j ij 11220(,)000(,)i j ij110(,)i j 、220(,)i j 的0消耗相同,设为q ,他们的0消耗因共有0元素而相互影响,若先分配110(,)i j ,则在余下的0元素中220(,)i j 的0消耗数为1q -或2q -,必为最小,应予与分配.反之也是,因此这种情况两者应同时分配.(3)0消耗数相同但互不影响,此时必为下图所示:11220(,)0(,)i j ij此时若先分配110(,)i j ,则在余下的0元素中,220(,)i j 的0消耗必为最少,应予与分配,反之也是.这种情况可将它们同时分配.综合上述三种情况,当遇到0消耗数相同的0元素时,如果它们不在同一行同一列,可以将其同时分配;如果在同一行同一列上,可将该行或该列分配,分配数加1,具体分配视其它0元素分配结果而定.3.4.2 对角线法匈牙利算法的实质就是寻找n 个分布在不同行不同列的零元素,而匈牙利算法本身计算过程较复杂,下面给出一种使系数矩阵对角线为零的算法——对角线法.基本步骤:第一步:变换系数矩阵使每行每列都出现零元素,同匈牙利算法第一步.第二步:进行行排序,即(1)在变换后的系数矩阵()ij b 的第j 列元素中(1,2,,)j n =,从第,1,,j j n +行中选取最小元素,记为0b i j .(2)将0i 行元素与j 行进行交换.通过步骤二可使每列中的零元素或最小元素尽量出现在对角线上.若这样选取的最小元素有两个以上时,则取这些最小元素所在行中第n 个元素大者所对应的元素为最小元素;若第n 个元素也相同,则取第1n -个元素中大者对应的元素为最小元素,以此类推;若这些最小元素后各行对应元素都相同,则取这些最小元素所在行中第1j -个元素小者对应元素为最小元素;若第1j -个元素相同,则取再前一个元素中小者对应元素为最小元素,以此类推.若这些最小元素所在行的对应元素均相同,则可任选一最小元素所在行与第j 行元素交换.第三步:检验——若0ii b =(1,2,,)i n =,则以得最优解,过程结束.否则进行第四步.第四步:进行行排序,排序过程类似于第二步,只须将第二步中的“列”改为“行”.而“行”改为“列”,“后”改为“下”,“前”改为“上”即可.第五步:若0ii b =(1,2,,)i n =,则已得到最优解,迭代过程停止,否则进行第六步.第六步:,1,2,,ij ij ii b b b j n =-=. 第七步:若0,1,2,,ij b j n ≥=,则返回第五步.否则,若0ik b <,则令,1,2,,jk jk ik b b b j n =-=,返回第一步.从上述过程来看,整个过程包括两个基本部分,第一部分是通过一系列矩阵的行列变换,把零元素排列在对角线上;第二部分是最解的检验,即所有0ii b =时,已得到最优解.对于此算法的收敛性分析,文献[]9中给出了几个定理,并进行了证明,可以看出此改进算法的收敛性极好,可以有效地解决指派问题.4 对最大化指派问题的匈牙利解法的一点改进对最大化的指派问题的解法,一般方法是找出系数矩阵()ij c 中的最大元素,即1nij i M max c ==∑),,2,1(n j =,做矩阵B ,其元素为),,2,1;,,2,1(n j n i b ij ==且ij ij c M b -=,然后利用匈牙利解法最小化求B 的最优解.下面我们在此基础上对其提出一点改进,直接在原系数矩阵上进行修改.修改的原则是:在最小化问题中,系数矩阵不能出现负数,在最大化问题中,修改后的不能出现正元素,可出现零.基本步骤:第一步:修改系数矩阵.。

匈牙利指派1

匈牙利指派1

一、指派模型许多管理部门可能经常面临这样的问题:有若干项任务需要完成,又有若干对象能够完成其中的每项任务。

由于每个对象的特点与能力不同,完成各项任务的效益也各不同。

又因任务性质的要求和管理上的需要等,每项任务只能由一人完成。

则应如何分配人员去完成所有任务,能使完成各项任务的总效益最佳?这类问题就称之为指派模型或分配模型。

当岗位数(m)与人员数(n)相等时,指派模型为:C=(cij )为n阶方阵,称为指派模型(P)的效益矩阵;若xij0为(P)的最优解,则n阶方阵X=(xij0)称为(P)的最优解方阵。

事实上方阵X的每一行、每一列只有一个“1”。

二、匈牙利方法解决指派模型的方法是匈牙利数学家考尼格(konig)提出的,因此得名匈牙利法(The Hungarian Method of Assignment)。

(一)匈牙利方法基本原理匈牙利法基于下面两个性质:[性质5.2.1]设一个指派模型的效益矩阵为(cij ). 若(cij)的第i行元素均减去一个常数ui (i=1,2,…,n),第j列元素均减去一个常数vj(j=1,2,…,n),得到一个新的效益矩阵(bij ),其中每一元素bij=cij-ui-vj,则以(bij )为效益矩阵的指派模型的最优解也是以(cij)为效益矩阵的指派模型的最优解。

如果取ui (I=1,2,…,n)为第i行元素的最小值,vj(j=1,2,…,n)为第j行元素的最小值,则得到新的效益矩阵(bij)为非负矩阵(即所有元去均为非负数)。

性质3.1说明可以通过求以(bij)为效益矩阵的指派模型的最优解得到原指派模型的最优解。

直观地讲,求指派模型的最优解方阵就是在效益矩阵中找到n个元素,要求在不同行、不同列上,使这些元素之和最小。

将这n个元素所在位置赋值为“1”,其他元素均为“0”,就得到最优解方阵。

效益矩阵(bij)中每行、每列的最小元素为“0”,因此,求指派模型(P)的最优解又转化为在矩阵(bij)中找出n个在不同行、不同列上的“0”元素,这就是匈牙利法的基本思路。

第五讲 分配问题(指派问题)与匈牙利法

第五讲 分配问题(指派问题)与匈牙利法

n 件工作
y1 , y2 , … , yn 。 已 知 工 人 xi 完 成 工 作 yj 所 需 时 间 为 cij
分派方案满足下述两个条件: 分派方案满足下述两个条件:
1.任一个工人都不能去做两件或两件以上的工作 1.任一个工人都不能去做两件或两件以上的工作 2.任一件工作都不能同时接受两个及以上的工人去做 2.任一件工作都不能同时接受两个及以上的工人去做
min
4 7 6 6 6
8 7 15 12 4 0 4 3 11 8 0 3 0 11 8 9 17 14 10 7 0 2 10 7 3 0 1 7 7 3 9 12 8 7 6 ⇒ 0 3 6 2 1 ⇒ 0 2 3 2 1 7 14 6 10 6 0 1 8 0 4 0 0 5 0 4 0 3 6 4 0 0 2 3 4 0 9 12 10 6 6 min 0 1 3 0 0
5 0 2 0 2 3 0 0 0 10 5 7 9 8 0 0 0 6 3 6
9 8 5 4 0
尝试对所有零元素做标记,确定独立零元素。 尝试对所有零元素做标记,确定独立零元素。 标记 独立零元素
(2)逐列检验 )
与行检验类似:对只有一个未标记的零元素的列 用记号O将该 与行检验类似:对只有一个未标记的零元素的列,用记号 将该 零元素圈起,然后将被圈起的零元素所在行 零元素圈起,然后将被圈起的零元素所在行的其他未标记的零元 素用记号/划去 划去。 素用记号 划去。 重复列检验,直到没有未被标记的零元素或至少有两个未被标记 没有未被标记的零元素 重复列检验,直到没有未被标记的零元素或 的零元素为止。 的零元素为止。
分配问题(指派问题) 第5讲 分配问题(指派问题)与匈牙利法

指派问题

指派问题
划线规则 1、逐行检查,若该行只有一个未标记的零,对其加 框标记,将框标记元素同行同列上其它的零打上叉标 记。若该行有二个以上未标记的零,可暂不标记,转 下一行检查,直到所有行检查完;
逐 行

3
2
0
0
逐 列

3
2
0
0
查检 0
3
2
1

检 查


0
3
2
1
1 0 2 0 1 0 2 0
8 7 5 5
1 1 1 1

m
x ij
j1
m
x ij
i1

1 1
i 1,2, ,m j 1,2, ,m
任务 1 1 1 1

x ij 0 ,1
第一步:变换效率矩阵,使每行每列至少有一个零
– 行变换:找出每行最小元素,从该行各元素中减去之 – 列变换:找出每列最小元素,从该列各元素中减去之
n 较小时,可用观察法,n 较大时,用下法
(1) 对没有加 0 的行打 (2) 对已打 的行中所有含 的 0元素列打 (3) 再对打有 的列中含 0的 0 元素行打 (4) 对打 的列和未打 的行划直线 (5) 重复以上步骤,直至全部完成
4、修改价值系数c (1)求出未被覆盖部分中最小元素 (2)将未覆盖行的元素都减去 ,将各覆盖列的元素都加上
一、模型
4 指派问题
nn
min z
c ij x ij
i1 j1
n
x ij 1
j1
i 1, , n
n
x ij 1
i1
x ij 0 或 1
j 1, , n i, j 1, , n
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

矿产资源开发利用方案编写内容要求及审查大纲
矿产资源开发利用方案编写内容要求及《矿产资源开发利用方案》审查大纲一、概述
㈠矿区位置、隶属关系和企业性质。

如为改扩建矿山, 应说明矿山现状、
特点及存在的主要问题。

㈡编制依据
(1简述项目前期工作进展情况及与有关方面对项目的意向性协议情况。

(2 列出开发利用方案编制所依据的主要基础性资料的名称。

如经储量管理部门认定的矿区地质勘探报告、选矿试验报告、加工利用试验报告、工程地质初评资料、矿区水文资料和供水资料等。

对改、扩建矿山应有生产实际资料, 如矿山总平面现状图、矿床开拓系统图、采场现状图和主要采选设备清单等。

二、矿产品需求现状和预测
㈠该矿产在国内需求情况和市场供应情况
1、矿产品现状及加工利用趋向。

2、国内近、远期的需求量及主要销向预测。

㈡产品价格分析
1、国内矿产品价格现状。

2、矿产品价格稳定性及变化趋势。

三、矿产资源概况
㈠矿区总体概况
1、矿区总体规划情况。

2、矿区矿产资源概况。

3、该设计与矿区总体开发的关系。

㈡该设计项目的资源概况
1、矿床地质及构造特征。

2、矿床开采技术条件及水文地质条件。

相关文档
最新文档