运筹学04-整数规划-匈牙利解法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
匈牙利数学家考尼格(Konig)提出的,得名匈牙利解法 (the Hungarian Method of Assignment) 1、匈牙利解法的基本思想---适用条件 基于任务分配问题的标准型,标准型要满足下述三个条件: (1)目标要求为min (2)效率矩阵{aij}为n阶方阵 (3)阵中所有元素aij≥0,且为常数
表
非最优阵的变换
第四章 整数规划
3、匈牙利解法的计算步骤: 第四步:重新标号
抹掉原来的标号,回到最优性检验,并进行重新标号,直到得到最优解
表
0 2 1 // 0
// 0
试分配过程
// 0
7
4 0 2
0
2 4
2 4 0 0
0 2 1 0 //
/ 0
7
第四章 整数规划
最优性检验后可能可能出现的情况
① 每行都有一个零元素标有括号,显然这些括号零在不同行 和不同列,因此得到最优解。 ②每行、每列都有两个或更多的零,这是从剩有零元素最少的 行开始,比较这行各零元素所在列中零元素的个数,选择零 元素少的那列的这个零元素打括号,划掉同行同列的其他零 元素,然后重复以上步骤,直到所有零都做了标记。 ③矩阵中所有零都做了标记,但标有()的零元素个数少于 m,此时就可以找出能覆盖矩阵中所有零元素的最少直线的 集合。 步骤如下:
即甲安排做第二项工作、乙做第一项、丙做第四项、丁做 第三项, 最高总分Z=92+95+90+80=357
分配问题与匈牙利法
2. 不平衡的指派问题
当人数m大于工作数n时,加上m-n项虚拟工作,例如:
5 11 8 6 3 9 6 14 4 2 10 3 17 5 1 5 11 8 6 3 9 6 14 4 2 10 3 17 5 1 0 0 0 0 0 0 0 0 0 0
由于maxf(x)与求 -min[-f(x)]相同,所以将 max型的效率矩阵{aij}变为{ — aij}求min问 题,如下页表
第四章 整数规划
表
任务分配的权益表
表
变换为求最大问题
机器 人员 甲 乙 丙 丁 机器
A 14 11 13 17 1
B 9 7 2 9 1
C 4 9 10 15 1
D 15 10 5 13 1
m
m
a ij x ij
这样得到新效率矩阵的最优解,根据定理 1,他也是原问题的最优解。 (3)验证最优解的方法:设法用最少的直线数覆盖方阵中位于不同行、 不同列的零元素。 如果覆盖所有零元素的最少直线数等于m,则得到最优解,否则不是
第四章 整数规划
3、匈牙利解法的计算步骤: 第一步:效率矩阵的初始变换----零元素的获得 (1)行变换:找出每行的最小元素,该行各元素减去这个最小元素。 (2)列变换:找出每列的最小元素,该列各元素减去这个最小元素。
7
4
0
4
0 2
2
2 4 // 0 0
0 2 1 0//
// 0
7
4
0
4
0 2
2
2 4 // 0 0
第四章 整数规划
D、目标函数为最大的任务分配问题
如果目标函数为MAX型,则不属于标准的任务分配模型,不 能直接运用匈牙利解法求解,这就需要先对max模型进行变换, 然后再求解。 例:有甲、乙、丙、丁4人分别操作4台机器,每个工人操作不 同机器时的产值如表,求对4个工人分配不同机器时总产 值最大的方案。
分配问题与匈牙利法
4. 某事一定不能由某人做的指派问题
将该人做此事的效率系数取做足够大的数,可用M表示
。
例 分配甲、乙、丙、丁四个人去完成A、B、C、D、E五 项任务。每个人完成各项任务的时间如表所示。由于任务 数多于人数,考虑任务E必须完成,其他4项中可任选3项完 成。试确定最优分配方案,使完成任务的总时间最少。
分配问题与匈牙利法
1. 最大化指派问题
处理方法:设m为最大化指派问题系数矩阵C中最大元素。
令矩阵B=(m-cij)nn则以B为系数矩阵的最小化指派问题 和原问题有相同的最优解。
例 某人事部门拟招聘4人任职4项工作,对他们综合 考评的 得分如下表(满分100分),如何安排工作使 总分最多。
甲 85 乙 95 C= 丙 82 丁 86 92 87 83 90 73 78 79 80 90 95 90 88
若某人可做几件事,则将该人化作相同的几个“人”来接受 指派,且费用系数取值相同。 例如:丙可以同时任职A和C工作,求最优指派方案。
甲 乙 丙 15 6 10 20 5 13 10 4 16 9 7 17
15 6 10 10 20 5 13 13 10 4 16 16 9 7 17 17
2、匈牙利解法的基本思路:
(1)按照定理1中所述方法不断变化效率,设法在原有效率矩阵基础上经 变换后找出一组有m个不同行、不同列零元素的新效率矩阵。 (2)新效率矩阵中,令对应于不同行、不同列的的那组零元素所对应的 xij=1,其余xij=0,由此计算出目标函数为:
minf(x)
i 1 j 1
第四章 整数规划
例:有甲、乙、丙、丁四个熟练工人,他们都是多面手, 有4个任务要他们完成,若规定每人只分配一次任务, 而每项任务只能由一个人完成,每人未完成每项任务的 工时耗费如表所示,问如何分配使完成任务的总工时耗 费最少?
表 零件机床 甲 乙 丙 丁 零件 A 4 9 8 6 1 任务分配工时耗费表 B 1 8 4 5 1 C 8 4 6 7 1 D 2 7 3 2 1 机床 1 1 1 1
minf
m
x
i 1 j 1
m m
a ij x ij
x 1 ij j 1 m x ij 1 i 1 x 0 ij
i 1,2, , m j 1,2, , m
或1
第四章 整数规划
C、任务分配问题的解法-----匈牙利解法
经变换后的效率矩阵,其每行、每列至少有一个零元素。
4 9 8 6
1
8 4 5
8
4
6 7
2 3 7 5 3 5 2 4
0 4 1 3
7 0 3 5
1 0 3 2 0 2 1 0
0 4 1 3
7 0 3 5
1 3 0 0
表 效ቤተ መጻሕፍቲ ባይዱ 矩阵 的 初始 变换
第二步:最优性检验
检查能否找到m个位于不同行、不同列的零元素,即检查覆盖所有零元 素的直线是否为m条
第四章 整数规划
3、匈牙利解法的计算步骤: (1)逐行检查:从第一行开始,如果该行只有一个零元素,就在这个
第四章 整数规划
步骤如下: 对无()的行打√ 对打√行上所有零元素的列打√ 在打√的列上有()的行打√ 重复步骤,直到过程结束 对没有打√的行划横线,对所有打√的列划垂线,这时得 到覆盖矩阵中所有零的最少直线数
( 0) 2 2 1 1 4 (0) 3 1 3 (0) // 3 5 0 0// 7 ( 0) 2 2 1 1 4 (0) 3 1 3 (0) 3 5 0 0 7
0
1 8 4
0
7 4
0
表所示,最终表为最优解,此时甲→D,乙→B,丙→A,丁→C 目标函数为 maxf(x)=15+7+13+15=50
分配问题与匈牙利法
非标准型的指派问题: 匈牙利法的条件是:模型求最小值、效率cij≥0。 当遇到各种非标准形式的指派问题时,处理方 法是先将其转化为标准形式,然后用匈牙利法 来求解。
第四章 整数规划
B、任务分配问题的数学模型
设:xij为第i个工人分配去做第j项任务 aij为第i个工人为完成第 j 项任务时的工时消耗。则
1 当分配第j项任务给第i个工人时 x ij 0 当不分配第j项任务给第i个工人时
i,j=1,2,…,n
由于每人只允许分 配一项任务, 且每项任务只能由 一人来完成, 故其数学模型、目 标函数及约束条件 如下:
人员 任务 A 25 B 29 C 31 D 42 E 37
甲
乙
丙 丁
39
34 24
38
27 42
26
28 36
20
40 23
33
32 45
分配问题与匈牙利法
解: 1) 这是不平衡的指派问题,首先转换为标准型,再用 匈牙利法求解。 2) 由于任务数多于人数,所以假定一名虚拟人,设为戊。 因为工作E必须完成,故设戊完成E的时间为M(M为非 常大的数),其余效率系数为0,则标准型的效率矩阵表 示为:
13 8 7 2
2
1 7 0 12 0 0 4 2
6
11
0
4 2
11 8 9 0 1 3 2
1 8 4
0 1 1 0 8 0 0 4
④ 只有一条直线覆盖的元素的值保持不变。 由此,得到新的效率矩阵,以此更易标出m个不同的行和列的零元素。
0 2 2 1
0 4 1 3
7 0 3 5
1 0 3 2 0 1 0 0
0 4 0 2
7 0 2 4
2 4 0 0
分配问题与匈牙利法
C (95 c ij )
解: M=95,令
10 0 C = 13 9
0 1 X= 0 0
3 8 12 5
22 17 16 15
5 0 5 7
0 0 1 0
用匈牙利法求解C’,最优解为:
1 0 0 0 0 0 0 1
第四章 整数规划
3、匈牙利解法的计算步骤: 第三步:非最优阵的变换——零元素的移动
当表中的覆盖所有零的直线数小于m时,得到的不是最优解,因此需要 对表中矩阵进一步进行变换,过程如下: ① 在未被直线覆盖的所有元素中找出最小元素 ② 所有未被直线覆盖的元素都减去这个最小元素 ③ 覆盖线十字交叉处的元素都加上这个最小元素
人 员 1 1 1 1
机器 人员
A
B
C
D
甲
乙 丙 丁
-14
-11 -13 -17
-9
-7 -2 -9
-4
-9 -10 -15
-15
-10 -5 -13
第四章 整数规划
求解过程
3 6 4 0 1 0 0 0 2 0 7 4
8 10 15 8 9 0 1 0
当人数m小于工作数n时,加上n-m个人,例如
15 6 10 20 5 13 10 4 16 9 7 17
15 6 10 0 20 5 13 0 10 4 16 0 9 7 17 0
分配问题与匈牙利法
3. 一个人可做几件事的指派问题
定理1
设一个任务分配问题的效率矩阵为{aij},若{aij}中每一行元素分别减去 一个常数ui,每一列元素分别减去一个常数vj,得到一个新的效率矩阵{bij}, 其中一个元素bij=aij-ui-vj,则{bij}的最优解等价于{aij}的最优解。
第四章 整数规划
定理2
若一个方阵中的一部分元素为零,一部分元素非零,则覆盖方阵中所 有元素的最少直线等于位于不同行、不同列的零元素最多个数。
零元素上打上括号,并划去打括号零元素同列的其他零元素。 如果该行没有零元素,或有两个或多个零元素(已划去的不记在 内),则转下行 (2)逐列检查:依照行检查的方法从第一列开始逐列检查。
表 最优性检验
0 2 2 1 0 7 1 (0) 4 0 3 2 1 3 0 2 3 5 0 1 1 4 (0) 3 1 3 ( 0) 3 5 0 /
人员 任务 A 25 B 29 C 31 D 42 E 37
表
非最优阵的变换
第四章 整数规划
3、匈牙利解法的计算步骤: 第四步:重新标号
抹掉原来的标号,回到最优性检验,并进行重新标号,直到得到最优解
表
0 2 1 // 0
// 0
试分配过程
// 0
7
4 0 2
0
2 4
2 4 0 0
0 2 1 0 //
/ 0
7
第四章 整数规划
最优性检验后可能可能出现的情况
① 每行都有一个零元素标有括号,显然这些括号零在不同行 和不同列,因此得到最优解。 ②每行、每列都有两个或更多的零,这是从剩有零元素最少的 行开始,比较这行各零元素所在列中零元素的个数,选择零 元素少的那列的这个零元素打括号,划掉同行同列的其他零 元素,然后重复以上步骤,直到所有零都做了标记。 ③矩阵中所有零都做了标记,但标有()的零元素个数少于 m,此时就可以找出能覆盖矩阵中所有零元素的最少直线的 集合。 步骤如下:
即甲安排做第二项工作、乙做第一项、丙做第四项、丁做 第三项, 最高总分Z=92+95+90+80=357
分配问题与匈牙利法
2. 不平衡的指派问题
当人数m大于工作数n时,加上m-n项虚拟工作,例如:
5 11 8 6 3 9 6 14 4 2 10 3 17 5 1 5 11 8 6 3 9 6 14 4 2 10 3 17 5 1 0 0 0 0 0 0 0 0 0 0
由于maxf(x)与求 -min[-f(x)]相同,所以将 max型的效率矩阵{aij}变为{ — aij}求min问 题,如下页表
第四章 整数规划
表
任务分配的权益表
表
变换为求最大问题
机器 人员 甲 乙 丙 丁 机器
A 14 11 13 17 1
B 9 7 2 9 1
C 4 9 10 15 1
D 15 10 5 13 1
m
m
a ij x ij
这样得到新效率矩阵的最优解,根据定理 1,他也是原问题的最优解。 (3)验证最优解的方法:设法用最少的直线数覆盖方阵中位于不同行、 不同列的零元素。 如果覆盖所有零元素的最少直线数等于m,则得到最优解,否则不是
第四章 整数规划
3、匈牙利解法的计算步骤: 第一步:效率矩阵的初始变换----零元素的获得 (1)行变换:找出每行的最小元素,该行各元素减去这个最小元素。 (2)列变换:找出每列的最小元素,该列各元素减去这个最小元素。
7
4
0
4
0 2
2
2 4 // 0 0
0 2 1 0//
// 0
7
4
0
4
0 2
2
2 4 // 0 0
第四章 整数规划
D、目标函数为最大的任务分配问题
如果目标函数为MAX型,则不属于标准的任务分配模型,不 能直接运用匈牙利解法求解,这就需要先对max模型进行变换, 然后再求解。 例:有甲、乙、丙、丁4人分别操作4台机器,每个工人操作不 同机器时的产值如表,求对4个工人分配不同机器时总产 值最大的方案。
分配问题与匈牙利法
4. 某事一定不能由某人做的指派问题
将该人做此事的效率系数取做足够大的数,可用M表示
。
例 分配甲、乙、丙、丁四个人去完成A、B、C、D、E五 项任务。每个人完成各项任务的时间如表所示。由于任务 数多于人数,考虑任务E必须完成,其他4项中可任选3项完 成。试确定最优分配方案,使完成任务的总时间最少。
分配问题与匈牙利法
1. 最大化指派问题
处理方法:设m为最大化指派问题系数矩阵C中最大元素。
令矩阵B=(m-cij)nn则以B为系数矩阵的最小化指派问题 和原问题有相同的最优解。
例 某人事部门拟招聘4人任职4项工作,对他们综合 考评的 得分如下表(满分100分),如何安排工作使 总分最多。
甲 85 乙 95 C= 丙 82 丁 86 92 87 83 90 73 78 79 80 90 95 90 88
若某人可做几件事,则将该人化作相同的几个“人”来接受 指派,且费用系数取值相同。 例如:丙可以同时任职A和C工作,求最优指派方案。
甲 乙 丙 15 6 10 20 5 13 10 4 16 9 7 17
15 6 10 10 20 5 13 13 10 4 16 16 9 7 17 17
2、匈牙利解法的基本思路:
(1)按照定理1中所述方法不断变化效率,设法在原有效率矩阵基础上经 变换后找出一组有m个不同行、不同列零元素的新效率矩阵。 (2)新效率矩阵中,令对应于不同行、不同列的的那组零元素所对应的 xij=1,其余xij=0,由此计算出目标函数为:
minf(x)
i 1 j 1
第四章 整数规划
例:有甲、乙、丙、丁四个熟练工人,他们都是多面手, 有4个任务要他们完成,若规定每人只分配一次任务, 而每项任务只能由一个人完成,每人未完成每项任务的 工时耗费如表所示,问如何分配使完成任务的总工时耗 费最少?
表 零件机床 甲 乙 丙 丁 零件 A 4 9 8 6 1 任务分配工时耗费表 B 1 8 4 5 1 C 8 4 6 7 1 D 2 7 3 2 1 机床 1 1 1 1
minf
m
x
i 1 j 1
m m
a ij x ij
x 1 ij j 1 m x ij 1 i 1 x 0 ij
i 1,2, , m j 1,2, , m
或1
第四章 整数规划
C、任务分配问题的解法-----匈牙利解法
经变换后的效率矩阵,其每行、每列至少有一个零元素。
4 9 8 6
1
8 4 5
8
4
6 7
2 3 7 5 3 5 2 4
0 4 1 3
7 0 3 5
1 0 3 2 0 2 1 0
0 4 1 3
7 0 3 5
1 3 0 0
表 效ቤተ መጻሕፍቲ ባይዱ 矩阵 的 初始 变换
第二步:最优性检验
检查能否找到m个位于不同行、不同列的零元素,即检查覆盖所有零元 素的直线是否为m条
第四章 整数规划
3、匈牙利解法的计算步骤: (1)逐行检查:从第一行开始,如果该行只有一个零元素,就在这个
第四章 整数规划
步骤如下: 对无()的行打√ 对打√行上所有零元素的列打√ 在打√的列上有()的行打√ 重复步骤,直到过程结束 对没有打√的行划横线,对所有打√的列划垂线,这时得 到覆盖矩阵中所有零的最少直线数
( 0) 2 2 1 1 4 (0) 3 1 3 (0) // 3 5 0 0// 7 ( 0) 2 2 1 1 4 (0) 3 1 3 (0) 3 5 0 0 7
0
1 8 4
0
7 4
0
表所示,最终表为最优解,此时甲→D,乙→B,丙→A,丁→C 目标函数为 maxf(x)=15+7+13+15=50
分配问题与匈牙利法
非标准型的指派问题: 匈牙利法的条件是:模型求最小值、效率cij≥0。 当遇到各种非标准形式的指派问题时,处理方 法是先将其转化为标准形式,然后用匈牙利法 来求解。
第四章 整数规划
B、任务分配问题的数学模型
设:xij为第i个工人分配去做第j项任务 aij为第i个工人为完成第 j 项任务时的工时消耗。则
1 当分配第j项任务给第i个工人时 x ij 0 当不分配第j项任务给第i个工人时
i,j=1,2,…,n
由于每人只允许分 配一项任务, 且每项任务只能由 一人来完成, 故其数学模型、目 标函数及约束条件 如下:
人员 任务 A 25 B 29 C 31 D 42 E 37
甲
乙
丙 丁
39
34 24
38
27 42
26
28 36
20
40 23
33
32 45
分配问题与匈牙利法
解: 1) 这是不平衡的指派问题,首先转换为标准型,再用 匈牙利法求解。 2) 由于任务数多于人数,所以假定一名虚拟人,设为戊。 因为工作E必须完成,故设戊完成E的时间为M(M为非 常大的数),其余效率系数为0,则标准型的效率矩阵表 示为:
13 8 7 2
2
1 7 0 12 0 0 4 2
6
11
0
4 2
11 8 9 0 1 3 2
1 8 4
0 1 1 0 8 0 0 4
④ 只有一条直线覆盖的元素的值保持不变。 由此,得到新的效率矩阵,以此更易标出m个不同的行和列的零元素。
0 2 2 1
0 4 1 3
7 0 3 5
1 0 3 2 0 1 0 0
0 4 0 2
7 0 2 4
2 4 0 0
分配问题与匈牙利法
C (95 c ij )
解: M=95,令
10 0 C = 13 9
0 1 X= 0 0
3 8 12 5
22 17 16 15
5 0 5 7
0 0 1 0
用匈牙利法求解C’,最优解为:
1 0 0 0 0 0 0 1
第四章 整数规划
3、匈牙利解法的计算步骤: 第三步:非最优阵的变换——零元素的移动
当表中的覆盖所有零的直线数小于m时,得到的不是最优解,因此需要 对表中矩阵进一步进行变换,过程如下: ① 在未被直线覆盖的所有元素中找出最小元素 ② 所有未被直线覆盖的元素都减去这个最小元素 ③ 覆盖线十字交叉处的元素都加上这个最小元素
人 员 1 1 1 1
机器 人员
A
B
C
D
甲
乙 丙 丁
-14
-11 -13 -17
-9
-7 -2 -9
-4
-9 -10 -15
-15
-10 -5 -13
第四章 整数规划
求解过程
3 6 4 0 1 0 0 0 2 0 7 4
8 10 15 8 9 0 1 0
当人数m小于工作数n时,加上n-m个人,例如
15 6 10 20 5 13 10 4 16 9 7 17
15 6 10 0 20 5 13 0 10 4 16 0 9 7 17 0
分配问题与匈牙利法
3. 一个人可做几件事的指派问题
定理1
设一个任务分配问题的效率矩阵为{aij},若{aij}中每一行元素分别减去 一个常数ui,每一列元素分别减去一个常数vj,得到一个新的效率矩阵{bij}, 其中一个元素bij=aij-ui-vj,则{bij}的最优解等价于{aij}的最优解。
第四章 整数规划
定理2
若一个方阵中的一部分元素为零,一部分元素非零,则覆盖方阵中所 有元素的最少直线等于位于不同行、不同列的零元素最多个数。
零元素上打上括号,并划去打括号零元素同列的其他零元素。 如果该行没有零元素,或有两个或多个零元素(已划去的不记在 内),则转下行 (2)逐列检查:依照行检查的方法从第一列开始逐列检查。
表 最优性检验
0 2 2 1 0 7 1 (0) 4 0 3 2 1 3 0 2 3 5 0 1 1 4 (0) 3 1 3 ( 0) 3 5 0 /
人员 任务 A 25 B 29 C 31 D 42 E 37