分配问题与匈牙利法
1. 分配问题
在实际中经常会遇到这样的问题,有n 项不同的任务,需要n 个人分别完成其中的一项,但由于任务的性质和各人的专长不同,因此各人去完成不同的任务的效率(或花费的时间或费用)也就不同。于是产生了一个问题,应指派哪个人去完成哪项任务,使完成 n 项任务的总效率最高(或所需时间最少),这类问题称为分配问题或指派问题。
例 1
任务
人员
A
B
C
D
甲
2
15
13
4
乙
10
4
14
15
丙
9
14
16
13
丁
7
8
11
9
2. 匈牙利法
第一步:变换指派问题的系数矩阵(cij)为(bij),使在(bij)的各行各列中都出现0元素
第二步:进行试分配,以寻求最优解。如果得到最优解,运算结束,否则转到第三步。
第三步:作最少的直线覆盖所有0元素。
第四步:变换矩阵(bij)以增加0元素,转到第二步。
例 1
任务
人员
A
B
C
D
甲
2
15
13
4
乙
10
4
14
15
丙
9
14
16
13
丁
7
8
11
9
-2
-4
-9
-7
求解过程如下:
第一步,变换系数矩阵:
-4
-2
-0
-0
◎
Ø
◎
Ø
Ø
◎
◎
第二步,试分配:
任务
人员
A
B
C
D
甲
2
15
13
4
乙
10
4
14
15
丙
9
14
16
13
丁
7
8
11
9
此分配问题的最优时间:4+4+9+11=28
例 2 有一份中文说明书,需译成英、日、德、俄四种文字。现有甲、乙、丙、丁四人,他们将中文说明书译成不同语种的说明书所需时间如下表所示,问如何分配任务,使总时间最少?
任务
人员
英语
日语
德语
俄语
甲
6
7
11
2
乙
4
5
9
8
丙
3
1
10
4
丁
5
9
8
2
求解过程如下:
第一步,变换系数矩阵:
-5
第二步,试指派:
◎
◎
◎
Ø
Ø
找到 3 个独立零元素
但 m = 3 < n = 4
第三步,作最少的直线覆盖所有0元素:
◎
◎
◎
Ø
Ø
√
√
√
独立零元素的个数m等于最少直线数l,即l=m=3<n=4;
第四步,变换矩阵(bij)以增加0元素:没有被直线覆盖的所有元素中的最小元素为1,然后打√各行都减去1;打√各列都加上1,得如下矩阵,并转第二步进行试指派:
0
0
0
0
0
0
得到4个独立零元素, 所以最优解矩阵为:
◎
◎
◎
Ø
Ø
√
√
√
◎
◎
◎
Ø
Ø
◎
◎
◎
Ø
Ø
◎
任务
人员
英语
日语
德语
俄语
甲
6
7
11
2
乙
4
5
9
8
丙
3
1
10
4
丁
5
9
8
2
此分配问题的最优时间:2+4+1+8=15
例3
11
5
7
6
4
戊
6
9
6
3
7
丁
9
6
4
5
8
丙
9
11
7
12
9
乙
11
8
9
5
7
甲
E
D
C
B
A
费 工作
用
人员
-1
-2
◎
Ø
◎
◎
◎
Ø
Ø
◎
Ø
◎
◎
◎
Ø
Ø
√
√
√
l =m=4 < n=5
◎
Ø
◎
◎
◎
Ø
Ø
◎
Ø
◎
Ø
◎
Ø
◎
Ø
√
√
√
√
√
√
√
◎
Ø
◎
Ø
◎
Ø
◎
Ø
√
√
√
√
√
√
√
l =m=4 < n=5
◎
Ø
◎
Ø
◎
Ø
◎
Ø
√
√
√
√
√
√
√
◎
Ø
Ø
◎
Ø
Ø
◎
Ø
◎
Ø
◎
此问题有多个最优解
总时间为28
◎
Ø
Ø
◎
Ø
Ø
◎
Ø
◎
Ø
◎
总时间为28
◎
Ø
Ø
◎
Ø
Ø
◎
Ø
◎
Ø
◎
总时间为28