匈牙利算法示例ppt

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
匈牙利算的优化

指派问题及其解法
有甲、乙、丙、丁、戊五位工人被指派去 完成A、B 、 C 、 D 、 E五项任务,每个 人完成任务所需的工时各不相同,见下表。 求应如何指派人员才能使得所用工时最少?

1, xij 0,
分配第i个人做j工作时 不分配第i个人做j工作时
目标函数为
12 x
11
7 x12 9 x13 7 x14 9 x15 8 x21 9 x22
6 x23 6 x24 6 x25 7 x31 17 x32 12 x33 14 x34 9 x35 15 x41 14 x42 6 x43 6 x44 10 x45 4 x51 10 x 52 7 x53 10 x54 9 x55
7 ◎ 2 Ø 2 4 3 ◎ Ø Ø Ø 8 3 5 ◎ 11 8 Ø ◎ 4 ◎ 4 1 4 3

7 ◎ 2 Ø 2 4 3 Ø◎ Ø Ø 8 3 5 ◎ 11 8 ◎ Ø 4 4 1 4 3 ◎
8 0 3 1 4 2 0 0 3 10 6 8 11 7 0 0 0 3 1 4
3 0 3 0 3
0 0
3 0 0
8 4 0 11 0
0 3 1 3 2 0 0 0 7 3 5 0 7 0 0 0 3 1 4 3
解矩阵得到2个最优指派方案;(1)甲-B,乙-C, 丙--E,丁-D,戊-A;(2)甲-B,乙-D,丙-E,丁-C, 戊-A。所需时间为minz=7+6+9+6+4=32
3 匈牙利法的改进
实际上很多效率矩阵用上述匈牙利法进行求解时必 须经要经历第(3)和第(4),但在这些效率矩阵 中有很大部分用改进后的匈牙利法就不需要经历第 (3)和第(4)步即可求解。
0 5 ◎ 2 2 3 0 Ø 0 10 5 ◎ 9 8 ◎ 0 Ø 6 3 0 ×
0 Ø 2 0 0 Ø◎

7 2 √ -2 0 Ø 4 6 5 -2 √
+2
第四步;在没有被直线覆盖的部分中找出 最小元素。然后在行打√行每个元素减去这 一最小元素,而在打√列的每个元素都加上 这一最小元素,以保证原来0元素不变。这 样得到新系数矩阵。若得到n个独立的0元素, 则已得到最优解,否则回到第3)。
上面矩阵有5个独立0元素,这就得到相应的最优解。
0 0 0 0 1
1 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0

0 0 0 0 1
1 0 0 0 0 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0
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
Min 4 7 6 6 6
从上面可以看到列中最小个数之和为7,而行中最小个数之 和为9,。即应该先从系数矩阵的每列元素中减去该列的最小 元素。
第二步:进行试指派,以寻求最优解。 在(bij)中找尽可能多的独立0元素,若能找出n个 独立0元素,就以这n个独立0元素对应解矩阵(xij)中的 元素为1,其余为0,这就得到最优解。找独立0元素, 常用的步骤为: (1)从只有一个0元素的行(列)开始,给这个0元素 加圈,记作◎ 。然后划去◎ 所在列(行)的其它0元素, 记作Ø ;这表示这列所代表的任务已指派完,不必再 考虑别人了。 (2)给只有一个0元素的列(行)中的0元素加圈,记 作◎;然后划去◎ 所在行的0元素,记作Ø . (3)反复进行(1),(2)两步,直到尽可能多的0元素 都被圈出和划掉为止。
由解矩阵得到2个最优指派方案;(1)甲-B, 乙-D,丙-E,丁-C,戊-A;(2)甲-B,乙-C,丙E,丁-C,戊-A。所需总时间 Minz=7+6+9+6+4=32
4 结论
• a 改进后的匈牙利法比原来的匈牙利法大大 减少了计算量,并节省了一些很累赘的步 骤,在实际工作中可以为决策者与决策团 队节约宝贵的时间以及信息的时效性。 • b 2种方法计算结果完全一致,说明改进的 匈牙利法可以达到与原匈牙利法一样的效 果。 • c即使遇上了少数改进的匈牙利法无法改进 的系数矩阵时,也可按原匈牙利法的步骤 进行解析,不影响结果的正确性。
5 0 2 0 2 3 0 0 0 10 5 7 9 8 0 0 0 6 3 6
2 0 2 4 5
5 2 ◎ 9 Ø

3 10 8 6
2 Ø Ø ◎ 5 7 2 ◎ Ø 4 3 6 5 2
Ø
第三步;作最少的直线覆盖所有0元素,以确 定该系数矩阵中能找到最多的独立元素数。 (1)对没有◎的行打√ (2)在已经打√的行中所含有的0元素打√号(3) √ 在已经打√号的列中含◎元素的行打√;(4)重复 (2)(3)直到得不出打√的行列为止(5)对没有 打√的行画一横线,有打√的列画一纵线,这就覆盖 所有0元素的最少直线数。令这一直线数为l。若 l<n,说明必须再换当前的系数矩阵,才能找到n个 独立的0元素,为此转到第四步;若l=n,而m<n, 应回到(2)(4)另行试探。
BBiblioteka Baidu
7 9 17
C
9 6 12
D
7 6 14
E
9 6 9
甲 乙 丙


15
4
14
10
6
7
6
10
10
9
(二)、匈牙利法的解题步骤:


第一步:变换指派问题的系数矩阵(cij)为 (bij),使在(bij)的各行各列中都出现0元素,即 (1) 从(cij)的每行元素都减去该行的最小 元素; (2) 再从所得新系数矩阵的每列元素中减去 该列的最小元素。
(1);查看每行的最小元素的个数总和r和每列的最小元素 的个数总和c。并比较r和c的大小。 (2)使指派问题的系数矩阵经变换,在各行各列中都出现0元 素。当r≥c,则先从系数矩阵的每列减去该列的最小元素,再从 所得系数矩阵的每行元素中减去该行的最小元素。反之如果当 r≤c,则先从系数矩阵的每行中减去该行的最小元素,再从所得 系数矩阵的每行元素中减去该列的最小元素。其他步奏同匈牙利 法。
再从得到系数矩阵的每行元素中减 去该行的最小元素。
根据匈牙利法第二步,很容易得到下面的矩 阵
8 4 Ø 11
◎3

1 3 2 Ø Ø 7 3 5 7 ØØ 3 1 4 3
◎ ◎ 或 ◎
8 4 Ø 11

◎ 3 1 3 2 ◎Ø Ø 7 3 5 ◎ 7 Ø ◎Ø
bij
12 8 (cij ) 7 15 4
7 9 17 14 10
9 7 9 6 6 6 12 14 9 6 6 10 7 10 9
5 0 2 0 2 3 0 0 0 10 5 7 9 8 0 0 0 6 3 6
2 0 2 4 5
要求每人做一项工作,约束条件为
x
j 1
n
ij
1
(i 1, 2, , n)
要求每项工作只能安排一人,约束条件为
x
i 1
n
ij
1
( j 1, 2, , n)
变量约束为
xij 0或1
(i, j 1, 2,3, 4)
下表所示效率矩阵的指派问题
时间 任务 人员
A
12 8 7
3 1 4 3
它具有n个独立0元素,这就得到了最优解,相应的解矩阵为
0 0 0 0 1
1 0 0 0 0 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0

0 0 0 0 1
1 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0
相关文档
最新文档