指派问题的匈牙利法
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
文字,分别记作A、B、C、D。现有甲、乙、丙、丁四 人,他们将中文说明书译成不同语种的说明书所需时 间如下表所示,问如何分派任务,可使总时间最少?
任务
人员
A
B
C
D
甲
6
7
11
2
乙
4
5
9
8
丙
3
1
10
4
丁
5
9
8
2
求解过程如下:
第一步,变换系数矩阵:
6 7 11 2 2
(cij
)
4 3
5 1
0 10 5 7 2 √
9 8 0 0 10
0 6 3 6 5 √
√
调整可行解
7 0 2 0 2
4
30
0
0
0 8 3 5 0
11 8 0 0 10
0 4 1 4 3
再圈零划零
7 0 2 0 2
4
300
0
0 8 3 5 0
0 0 3 0 3 1 6 0 2 0 3 2 0 0 3 2 0 2 3 0 0 4 4 0 6
0Ø ◎0 3 0Ø 3 1 6 0◎ 2 Ø0 3 2 0Ø 0◎ 3 2 Ø0 2 3 ◎0 ◎0 4 4 0Ø 6
0 1 0 5
2 0 4 4
2
6
0
0
0 0 0 1 1 0 0 0 0 1 0 0 0 0 1 0
15
练习:
费 工作
用
人员
A
B
C
D
E
甲
7
5
9
8
11
乙
9
12
7
11
9
丙
8
5
4
6
8
丁
7
3
6
9
6
戊
4
6
7
5
11
7 5 9 8 11 5
9
12
7
11
9
11 8 0 0 10
0 4 1 4 3
得最优解
0 1 0 0 0
0 0 1 0 0
( xij
)
0 0
0 0
0 0
0 1
1 0
1 0 0 0 0
另一最优解
0 1 0 0 0
0 0 0 1 0
(
xij
)
0 0
0 0
0 1
0 0
7
8 5 4 6 9 4
7
3
6
9
6
3
4 6 7 5 11 4
2 0 4 3 6 2 5 0 4 2 4 1 0 2 5 4 0 3 6 3 0 2 3 1 7
-1 -2
2 0 4 2 4 2 5 0 3 0 4 1 0 1 3 4 0 3 5 1 0 2 3 0 5
1 0 3 1 3 2 6 0 3 0 4 2 0 1 3 3 0 2 4 0 0 3 3 0 5
1 ◎0 3 1 3 √
2 6 ◎0 3 Ø0 √
4 2 Ø0 1 3 √ 3 Ø0 2 4 ◎0 √
◎0 3 3 Ø0 5
√√
√
1 ◎0 3 1 3 √ 2 6 ◎0 3 Ø0 √ 4 2 Ø0 1 3 √ 3 Ø0 2 4 ◎0 √ ◎0 3 3 Ø0 5
1 0
1 0 0 0 0
最小时间(成本)min z=32
匈牙利算法示例
(二)、解题步骤: 指派问题是0-1 规划的特例,也是运输问题的特例,
当然可用整数规划,0-1 规划或运输问题的解法去求 解,这就如同用单纯型法求解运输问题一样是不合算 的。利用指派问题的特点可有更简便的解法,这就是 匈牙利法,即系数矩阵中独立 0 元素的最多个数等于 能覆盖所有 0 元素的最少直线数。
9 10
8 4 4 1
5 9 8 2 2
4 5 9 0 0 1 5 4 2 0 9 3 3 7 6 0
4 5 4 0 0 1 0 4 2 0 4 3 3 7 1 0
第二步,试指派:
-5
4 5 4 ◎
◎ 1 Ø 4
2 ◎ 4 3
2 ◎0 4 2 4 2 5 Ø0 3 ◎0 4 1 ◎0 1 3 4 Ø0 3 5 1 ◎0 2 3 0Ø 5
2 ◎0 4 2 4 √ 2 5 Ø0 3 ◎0 4 1 ◎0 1 3 4 Ø0 3 5 1 √ ◎0 2 3 0Ø 5
√
(4)若仍有没有划圈的0元素,且同行(列)的0元素至 少有两个,则从剩有0元素最少的行(列)开始,比较这 行各0元素所在列中0元素的数目,选择0元素少的那列 的这个0元素加圈(表示选择性多的要“礼让”选择性 少的)。然后划掉同行同列的其它0元素。可反复进行, 直到所有0元素都已圈出和划掉为止。
(5)若◎ 元素的数目m 等于矩阵的阶数n,那么这指 派问题的最优解已得到。若m < n, 则转入下一步。
4 5 4 ◎ √
◎ 1 Ø 4
2 ◎ 4 3
3
7
1
Ø
√
√
3 4 3 ◎
◎ 1 Ø 5
2 ◎ 4 4
2
6
0
Ø
3 4 3 ◎
◎ 1 Ø 5
2 ◎ 4 4
2
6
◎
Ø
得到4个独 立零元素, 所以最优解 矩阵为:
3 4 3 0
j 1,2,, n
举例说明
1)表上作业法
2)匈牙利法
例 有四个工人和四台不同的机床,每位工人在不 同的机床上完成给定的任务的工时如表5.12所示, 问安排哪位工人操作哪一台机床可使总工时最少?
工人1 工人2 工人3 工人4
任务1 2 15 13 4
任务2 10 4 14 7
任务3 3 14 16 13
2
3
00
0
0 10 5 7 2
9 8 0 0 10
0 6 3 6 5
圈零划零
5 0 2 0 2
2
3
00
0
0 10 5 7 2
9 8 0 0 10
0 6 3 6 5
打勾划线确定调整行和列
5 0 2 0 2
2
3
00
0
第三步:作最少的直线覆盖所有0元素。 (1)对没有◎的行打√号; (2)对已打√号的行中所有含Ø元素的列打√号; (3)再对打有√号的列中含◎ 元素的行打√号;
(4)重复(2),(3)直到得不出新的打√号的行、列为止; (5)对没有打√号的行画横线,有打√号的列画纵线, 这就得到覆盖所有0元素的最少直线数 l 。l 应等于m, 若不相等,说明试指派过程有误,回到第二步(4),另 行试指派;若 l=m < n,须再变换当前的系数矩阵, 以找到n个独立的0元素,为此转第四步。
l =m=4 < n=5
2 ◎0 4 2 4 2 5 Ø0 3 ◎0 4 1 ◎0 1 3 4 Ø0 3 5 1 ◎0 2 3 0Ø 5
1 0 3 1 3 2 6 0 3 0 4 2 0 1 3 3 0 2 4 0 0 3 3 0 5
确定调整行和列
在没有圈起的零所在行上打“√”; 在打“√”行中所有零所在的列打“√”; 在打“√”列中含有圈起零的行上打“√”, 反复执行2)和3)两步,直到不能打“√”为止; 用直线划去打“√”的列和不打“√”的行,没
有划去的行构成调整的行,划去的列构成调整 列。
调整可行解的方法
第四步:变换矩阵(bij)以增加0元素。 在没有被直线覆盖的所有元素中找出最小元素,然后 打√各行都减去这最小元素;打√各列都加上这最小元 素(以保证系数矩阵中不出现负元素)。新系数矩阵 的最优解和原问题仍相同。转回第二步。
例一:
任务
人员
A
B
C
D
甲
2
15 13
4
乙 10
4
14 15
丙
9
14 16 13
第一步:变换指派问题的系数矩阵(cij)为(bij),使 在(bij)的各行各列中都出现0元素,即
(1) 从(cij)的每行元素都减去该行的最小元素; (2) 再从所得新系数矩阵的每列元素中减去该列的最 小元素。
第二步:进行试指派,以寻求最优解。
在(bij)中找尽可能多的独立0元素,若能找出n个独 立0元素,就以这n个独立0元素对应解矩阵(xij)中的元 素为1,其余为0,这就得到最优解。找独立0元素,常 用的步骤为:
任务4 7 8 11 9
获得初始解:圈零/划零操作
将时间矩阵C的每一行都减去相应行的最小元素 和每一列都减去相应列的最小元素,使每一行 和每一列都含有零;
从最少零数的行或列开始,将“零”圈起来, 并划去它所在行和所在列的其它零;
反复做2),直到所有零被圈起或被划掉为止。 得到初始解。
判断是否为最优解:圈起的零的个数是否等于n。
变量是
1, 第i个工人做第j件事 xij 0, 第i个工人不做第j件事
则数学模型如下
nm
min z
cij xij
j1 i1
n
xij
1,i 1,2,, m
j1
m
xij
1, j 1,2,, n
i1 xij 0,1; i 1,2,, m;
3
7
1
Ø
找到 3 个独立零元素
但 m =3 <n=4
第三步,作最少的直线覆盖所有0元素:
4 5 4 ◎ √
◎ 1 Ø 4
2 ◎ 4 3
3
7
1
Ø
√
√
独立零元素的个数m等于最少直线数l,即l=m=3<n=4;
第四步,变换矩阵(bij)以增加0元素:没有被直线 覆盖的所有元素中的最小元素为1,然后打√各行都减 去1;打√各列都加上1,得如下矩阵,并转第二步进 行试指派:
(1)从只有一个0元素的行(列)开始,给这个0元素加 圈,记作◎ 。然后划去◎ 所在列(行)的其它0元素,记 作Ø ;这表示这列所代表的任务已指派完,不必再考 虑别人了。
(2)给只有一个0元素的列(行)中的0元素加圈,记作 ◎;然后划去◎ 所在行的0元素,记作Ø .
(3)反复进行(1),(2)两步,直到尽可能多的0元素都 被圈出和划掉为止。
指派问题
指派问题是一种特殊的整数规划问题 一、问题的提出
设有m个工人,能做n件事,但效率不 同,并规定每个工人做且只能做一件事, 每件事有且只能有一个工人做,问应该如 何安排他们的工作,使花费的总时间(成 本)最少或效率最高?
二、指派问题的数学模型
设第i个工人做第j件事的时间是 cij ,决策
在调整行中寻找最小的元素,将它作为调 整量;
将调整行各元素减去调整量,对调整列中 各元素加上调整量。
再次执行“圈零”和“划零”的操作,并 循环以上的步骤,直到圈起的零数等于n 为止。
匈牙利法解例3.3
时间矩阵 2 10 3 7
15
4
14
8
13 14 16 11
丁
2
10 4 14 15 4
9 14 16 13 9
7
8
11
9
7
0 13 11 2
6 0 10 11
0 5 7 4
0 1
4
2
0 13 11 2
6 0 10 11
0 5 7 4
0
1
4
2
42
0 13 7 0 6 0 6 9 0 5 3 2 0 1 0 0
0Ø 13 7 ◎0 6 0◎ 6 9 0◎ 5 3 2 0Ø 1 0◎ Ø0
0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 0
例二、有一份中文说明书,需译成英、日、德、俄四种
√√
√
l =m=4 < n=5
1 ◎0 3 1 3 √
2 6 ◎0 3 Ø0 √
4 2 Ø0 1 3 √ 3 Ø0 2 4 ◎0 √
◎0 3 3 Ø0 5
√√
√
0 0 3 0 3 1 6 0 2 0 3 2 0 0 3 2 0 2 3 0 0 4 4 0 6
(xij
)
0 0
1 0
0 0
0 1
1 0 0 0
最小总时间为22。
再看一例
请求解如下矩阵表达的指派问题
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
减去最小元素
5 0 2 0 2
4
7
13
9
各行各列减去最小元素后得
0 11
8 0
0 9
5 4
2 3 4 0
0
3
8
5
圈零划零
0 8 0 5
11 0 9 4
2 3 4 0
0
3
8
5
得最优解
将圈起的零改为1,其它元素改为0,即得 最优解如下
0 0 1 0
任务
人员
A
B
C
D
甲
6
7
11
2
乙
4
5
9
8
丙
3
1
10
4
丁
5
9
8
2
求解过程如下:
第一步,变换系数矩阵:
6 7 11 2 2
(cij
)
4 3
5 1
0 10 5 7 2 √
9 8 0 0 10
0 6 3 6 5 √
√
调整可行解
7 0 2 0 2
4
30
0
0
0 8 3 5 0
11 8 0 0 10
0 4 1 4 3
再圈零划零
7 0 2 0 2
4
300
0
0 8 3 5 0
0 0 3 0 3 1 6 0 2 0 3 2 0 0 3 2 0 2 3 0 0 4 4 0 6
0Ø ◎0 3 0Ø 3 1 6 0◎ 2 Ø0 3 2 0Ø 0◎ 3 2 Ø0 2 3 ◎0 ◎0 4 4 0Ø 6
0 1 0 5
2 0 4 4
2
6
0
0
0 0 0 1 1 0 0 0 0 1 0 0 0 0 1 0
15
练习:
费 工作
用
人员
A
B
C
D
E
甲
7
5
9
8
11
乙
9
12
7
11
9
丙
8
5
4
6
8
丁
7
3
6
9
6
戊
4
6
7
5
11
7 5 9 8 11 5
9
12
7
11
9
11 8 0 0 10
0 4 1 4 3
得最优解
0 1 0 0 0
0 0 1 0 0
( xij
)
0 0
0 0
0 0
0 1
1 0
1 0 0 0 0
另一最优解
0 1 0 0 0
0 0 0 1 0
(
xij
)
0 0
0 0
0 1
0 0
7
8 5 4 6 9 4
7
3
6
9
6
3
4 6 7 5 11 4
2 0 4 3 6 2 5 0 4 2 4 1 0 2 5 4 0 3 6 3 0 2 3 1 7
-1 -2
2 0 4 2 4 2 5 0 3 0 4 1 0 1 3 4 0 3 5 1 0 2 3 0 5
1 0 3 1 3 2 6 0 3 0 4 2 0 1 3 3 0 2 4 0 0 3 3 0 5
1 ◎0 3 1 3 √
2 6 ◎0 3 Ø0 √
4 2 Ø0 1 3 √ 3 Ø0 2 4 ◎0 √
◎0 3 3 Ø0 5
√√
√
1 ◎0 3 1 3 √ 2 6 ◎0 3 Ø0 √ 4 2 Ø0 1 3 √ 3 Ø0 2 4 ◎0 √ ◎0 3 3 Ø0 5
1 0
1 0 0 0 0
最小时间(成本)min z=32
匈牙利算法示例
(二)、解题步骤: 指派问题是0-1 规划的特例,也是运输问题的特例,
当然可用整数规划,0-1 规划或运输问题的解法去求 解,这就如同用单纯型法求解运输问题一样是不合算 的。利用指派问题的特点可有更简便的解法,这就是 匈牙利法,即系数矩阵中独立 0 元素的最多个数等于 能覆盖所有 0 元素的最少直线数。
9 10
8 4 4 1
5 9 8 2 2
4 5 9 0 0 1 5 4 2 0 9 3 3 7 6 0
4 5 4 0 0 1 0 4 2 0 4 3 3 7 1 0
第二步,试指派:
-5
4 5 4 ◎
◎ 1 Ø 4
2 ◎ 4 3
2 ◎0 4 2 4 2 5 Ø0 3 ◎0 4 1 ◎0 1 3 4 Ø0 3 5 1 ◎0 2 3 0Ø 5
2 ◎0 4 2 4 √ 2 5 Ø0 3 ◎0 4 1 ◎0 1 3 4 Ø0 3 5 1 √ ◎0 2 3 0Ø 5
√
(4)若仍有没有划圈的0元素,且同行(列)的0元素至 少有两个,则从剩有0元素最少的行(列)开始,比较这 行各0元素所在列中0元素的数目,选择0元素少的那列 的这个0元素加圈(表示选择性多的要“礼让”选择性 少的)。然后划掉同行同列的其它0元素。可反复进行, 直到所有0元素都已圈出和划掉为止。
(5)若◎ 元素的数目m 等于矩阵的阶数n,那么这指 派问题的最优解已得到。若m < n, 则转入下一步。
4 5 4 ◎ √
◎ 1 Ø 4
2 ◎ 4 3
3
7
1
Ø
√
√
3 4 3 ◎
◎ 1 Ø 5
2 ◎ 4 4
2
6
0
Ø
3 4 3 ◎
◎ 1 Ø 5
2 ◎ 4 4
2
6
◎
Ø
得到4个独 立零元素, 所以最优解 矩阵为:
3 4 3 0
j 1,2,, n
举例说明
1)表上作业法
2)匈牙利法
例 有四个工人和四台不同的机床,每位工人在不 同的机床上完成给定的任务的工时如表5.12所示, 问安排哪位工人操作哪一台机床可使总工时最少?
工人1 工人2 工人3 工人4
任务1 2 15 13 4
任务2 10 4 14 7
任务3 3 14 16 13
2
3
00
0
0 10 5 7 2
9 8 0 0 10
0 6 3 6 5
圈零划零
5 0 2 0 2
2
3
00
0
0 10 5 7 2
9 8 0 0 10
0 6 3 6 5
打勾划线确定调整行和列
5 0 2 0 2
2
3
00
0
第三步:作最少的直线覆盖所有0元素。 (1)对没有◎的行打√号; (2)对已打√号的行中所有含Ø元素的列打√号; (3)再对打有√号的列中含◎ 元素的行打√号;
(4)重复(2),(3)直到得不出新的打√号的行、列为止; (5)对没有打√号的行画横线,有打√号的列画纵线, 这就得到覆盖所有0元素的最少直线数 l 。l 应等于m, 若不相等,说明试指派过程有误,回到第二步(4),另 行试指派;若 l=m < n,须再变换当前的系数矩阵, 以找到n个独立的0元素,为此转第四步。
l =m=4 < n=5
2 ◎0 4 2 4 2 5 Ø0 3 ◎0 4 1 ◎0 1 3 4 Ø0 3 5 1 ◎0 2 3 0Ø 5
1 0 3 1 3 2 6 0 3 0 4 2 0 1 3 3 0 2 4 0 0 3 3 0 5
确定调整行和列
在没有圈起的零所在行上打“√”; 在打“√”行中所有零所在的列打“√”; 在打“√”列中含有圈起零的行上打“√”, 反复执行2)和3)两步,直到不能打“√”为止; 用直线划去打“√”的列和不打“√”的行,没
有划去的行构成调整的行,划去的列构成调整 列。
调整可行解的方法
第四步:变换矩阵(bij)以增加0元素。 在没有被直线覆盖的所有元素中找出最小元素,然后 打√各行都减去这最小元素;打√各列都加上这最小元 素(以保证系数矩阵中不出现负元素)。新系数矩阵 的最优解和原问题仍相同。转回第二步。
例一:
任务
人员
A
B
C
D
甲
2
15 13
4
乙 10
4
14 15
丙
9
14 16 13
第一步:变换指派问题的系数矩阵(cij)为(bij),使 在(bij)的各行各列中都出现0元素,即
(1) 从(cij)的每行元素都减去该行的最小元素; (2) 再从所得新系数矩阵的每列元素中减去该列的最 小元素。
第二步:进行试指派,以寻求最优解。
在(bij)中找尽可能多的独立0元素,若能找出n个独 立0元素,就以这n个独立0元素对应解矩阵(xij)中的元 素为1,其余为0,这就得到最优解。找独立0元素,常 用的步骤为:
任务4 7 8 11 9
获得初始解:圈零/划零操作
将时间矩阵C的每一行都减去相应行的最小元素 和每一列都减去相应列的最小元素,使每一行 和每一列都含有零;
从最少零数的行或列开始,将“零”圈起来, 并划去它所在行和所在列的其它零;
反复做2),直到所有零被圈起或被划掉为止。 得到初始解。
判断是否为最优解:圈起的零的个数是否等于n。
变量是
1, 第i个工人做第j件事 xij 0, 第i个工人不做第j件事
则数学模型如下
nm
min z
cij xij
j1 i1
n
xij
1,i 1,2,, m
j1
m
xij
1, j 1,2,, n
i1 xij 0,1; i 1,2,, m;
3
7
1
Ø
找到 3 个独立零元素
但 m =3 <n=4
第三步,作最少的直线覆盖所有0元素:
4 5 4 ◎ √
◎ 1 Ø 4
2 ◎ 4 3
3
7
1
Ø
√
√
独立零元素的个数m等于最少直线数l,即l=m=3<n=4;
第四步,变换矩阵(bij)以增加0元素:没有被直线 覆盖的所有元素中的最小元素为1,然后打√各行都减 去1;打√各列都加上1,得如下矩阵,并转第二步进 行试指派:
(1)从只有一个0元素的行(列)开始,给这个0元素加 圈,记作◎ 。然后划去◎ 所在列(行)的其它0元素,记 作Ø ;这表示这列所代表的任务已指派完,不必再考 虑别人了。
(2)给只有一个0元素的列(行)中的0元素加圈,记作 ◎;然后划去◎ 所在行的0元素,记作Ø .
(3)反复进行(1),(2)两步,直到尽可能多的0元素都 被圈出和划掉为止。
指派问题
指派问题是一种特殊的整数规划问题 一、问题的提出
设有m个工人,能做n件事,但效率不 同,并规定每个工人做且只能做一件事, 每件事有且只能有一个工人做,问应该如 何安排他们的工作,使花费的总时间(成 本)最少或效率最高?
二、指派问题的数学模型
设第i个工人做第j件事的时间是 cij ,决策
在调整行中寻找最小的元素,将它作为调 整量;
将调整行各元素减去调整量,对调整列中 各元素加上调整量。
再次执行“圈零”和“划零”的操作,并 循环以上的步骤,直到圈起的零数等于n 为止。
匈牙利法解例3.3
时间矩阵 2 10 3 7
15
4
14
8
13 14 16 11
丁
2
10 4 14 15 4
9 14 16 13 9
7
8
11
9
7
0 13 11 2
6 0 10 11
0 5 7 4
0 1
4
2
0 13 11 2
6 0 10 11
0 5 7 4
0
1
4
2
42
0 13 7 0 6 0 6 9 0 5 3 2 0 1 0 0
0Ø 13 7 ◎0 6 0◎ 6 9 0◎ 5 3 2 0Ø 1 0◎ Ø0
0 0 0 1 0 1 0 0 1 0 0 0 0 0 1 0
例二、有一份中文说明书,需译成英、日、德、俄四种
√√
√
l =m=4 < n=5
1 ◎0 3 1 3 √
2 6 ◎0 3 Ø0 √
4 2 Ø0 1 3 √ 3 Ø0 2 4 ◎0 √
◎0 3 3 Ø0 5
√√
√
0 0 3 0 3 1 6 0 2 0 3 2 0 0 3 2 0 2 3 0 0 4 4 0 6
(xij
)
0 0
1 0
0 0
0 1
1 0 0 0
最小总时间为22。
再看一例
请求解如下矩阵表达的指派问题
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
减去最小元素
5 0 2 0 2
4
7
13
9
各行各列减去最小元素后得
0 11
8 0
0 9
5 4
2 3 4 0
0
3
8
5
圈零划零
0 8 0 5
11 0 9 4
2 3 4 0
0
3
8
5
得最优解
将圈起的零改为1,其它元素改为0,即得 最优解如下
0 0 1 0