指派问题_匈牙利算法

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

清华算法的步骤:例4.6.1
c. 所有零都已标记,但标有( )的零的个数少于m;
开始划线过程:
对没有标记 ( ) 的行打
对打 行上所有其它零元素对应的列打 再对打 列上有 ( ) 标记的零元素对应的行打 重复 ,直至无法继续 对没有打 的行划横线,对所有打 的列划垂线
6
4.6 任务分配问题
例4.6.1 有四个熟练工人,他们都是多面手,有四项任务要他 们完成。若规定每人必须完成且只完成一项任务,而每人 完成每项任务的工时耗费如表4.6.1,问如何分配任务使完 成四项任务的总工时耗费最少?
任务 工时 人员 甲 乙 丙 丁 任务
A 10 5 5 2 1
B 9 8 4 3 1
答:最优分配方案为 x13= x21= x34 = x42 =1,其余为0, 即甲C,乙A,丙D,丁B,OBJ=20
14
4.6.2 关于清华算法的适用条件 • 要求所有aij 0
– 若某些 aij <0 ,则利用定理 1 进行变换,使所有 bij 0
• 目标函数为min型
– 对于max型目标函数,将效率矩阵中所有 aij 反号,则等 效于求min型问题;再利用定理 1 进行变换,使所有 bij 0,则可采用清华算法
2 ( 0) 0 * 3 2 1 ( 0) 3 1 ( 0) 2 0 * 0* 1 2 2



划线后会出现两种情况: (1) 标记( )的零少于m个,但划有 m 条直线,说明矩阵中已存在 m 个不 同行不同列的零,但打破僵局时选 择不合理,没能找到。回到 b 重新 标记; (2) 少于m条直线,到第三步;
2 3 0 1
0 2 2 2
(1) 列 3 变 2 换 0 1 1 3 0
2 3 0 1
0 2 2 2
0 1 0 2
第二步:检查覆盖所有零元素的直线是否为m条
划线规则
1、逐行检查,若该行只有一个未标记的零,对其加( )标记,将 ( )标记元素同行同列上其它的零打上*标记。若该行有二个以上 未标记的零,暂不标记,转下一行检查,直到所有行检查完;
打破僵局时选择不当的结果:
1 1 0 0 0* * 0 0* * 0

打 打 破 破 僵 僵 局 局
(0 0)
ຫໍສະໝຸດ Baidu
0 0* * ( 0 0) 4 4 2 2

2 2 2 00 * 0 * 3 3 3 00 0 0 * ( 0 ( 0 0 )) 55 5 5 0 0* * 66 6 6
4 (0) 2 0*
打 破 僵 局
2 2 0 0
0 1 2 1
0 列 4 标 记 0 0 2 0 1 0
2 2 0 0
( 0) 1 2 1
0 * 0 0 1
2 2 0 0
(0) 1 2 1
0 * 逐 2 ( 0) 0 * 行 4 逐 最 0 * 列 ( 0) 2 1 0* 优 0 标 2 0 * 2 ( 0) 记 解 1 0 * ( 0 ) 1 1
解:松弛问题的最优解为 x1=2.5, x2=2, OBJ=23
由 x1=2.5 得到两个分枝如下:
max f ( x ) 6 x1 4 x2
max f ( x ) 6 x1 4 x2
2 x1 4 x2 13 2 x1 4 x2 13 2 x1 x2 7 2 x1 x2 7 问题II 问题I x1 3 x1 2 x1 , x2 0 且为整数5 x1 , x2 0 且为整数
任务分配问题的数学模型
模型中:xij 为第 i 个工人分配去做第 j 项任务; aij 为第 i 个工人为完成第 j 项任务时的工时消耗;
{aij}mm 称为效率矩阵
1 当第i个工人分配去做第j项任务 xij 0 当第i个工人未分配去做第j项任务 i, j 1,2,, m
证明:略
定理 2 若方阵中一部分元素为零,一部分元素非零,则覆盖方 阵内所有零元素的最少直线数等于位于不同行、不同列的零 元素的最多个数。
证明:略 清华算法的基本思路: • 根据定理 1 变换效率矩阵,使矩阵中有足够多的零。若 矩阵中存在 m 个不同行不同列的零,就找到了最优解 • 若覆盖变换后的效率矩阵零元素的直线少于m 条,就尚 未找到最优解,设法进一步变换矩阵,增加新的零 9
清华算法的步骤:例4.6.1
第一步:变换效率矩阵,使每行每列至少有一个零
– 行变换:找出每行最小元素,从该行各元素中减去之 – 列变换:找出每列最小元素,从该列各元素中减去之
10 (5) 5 ( 2)
9 8 ( 4) 3
( 7) 7 6 4
8 行 3 变 7 换 0 5 1 5 0
12
清华算法的步骤:例4.6.1
第三步:进一步变换;
在未划线的元素中找最小者,设为
对未被直线覆盖的各元素减去
对两条直线交叉点覆盖的元素加上 只有一条直线覆盖的元素保持不变 以上步骤实际上仍是利用 定理 1
2 ( 0) 0 * 3 4 2 1 1 0 ( 0) 3 1 ( 0) 2 0 * 2 0* 1 0 2 2
n
max(min) f ( x ) c j x j
j 1
n aij x j ( , )bi , i 1,2,, m s.t. j 1 x j 0 且为整数 , j 1,2,, n
2
4.2 整数规划的分枝定解法
4.2.1 思路与解题步骤 • 只解松弛问题
运输问题是任务分配问题的松弛问题 任务分配问题不但是整数规划,而且是01规划 任务分配问题有2m个约束条件,但有且只有m个非零解, 是自然高度退化的 任务分配是两部图的匹配问题,有著名的匈牙利算法 下面介绍一种适合手算的算法(出自清华教科书)
8
4.6.1 清华算法
定理 1 如果从效率矩阵{aij}mm中每行元素分别减去一个常数 ui, 从每列元素分别减去一个常数 vj ,所得新的效率矩阵{bij}mm 的任务分配问题的最优解等价于原问题的最优解。
0 3 1 (0) 0 1 2 0*
逐 列 检 查
2 3 (0) 1
(0) 2 2 2
0 * 1 0 * 2
3、重复1、2后,可能出现三种情况; a. 每行都有一个 (0),显然已找到最优解,令对应(0)位置的 xij=1; b. 仍有零元素未标记,此时,一定存在某些行和列同时有多个零, 称为僵局状态,因为无法采用 1. 2 中的方法继续标记。 4、打破僵局。令未标记零对应的同行同列上其它未标记零的个数为 该零的指数,选指数最小的先标记 ( );采用这种方法直至所有零都 被标记,或出现 情况 a,或 情况 c 。 11
C 7 7 6 4 1
D 人员 8 7 5 5 1 1 1 1 1
min f ( x ) aij xij
i 1 j 1
m m
m xij 1 i 1,2,, m j 1 m xij 1 j 1,2,, m i 1 xij 0,1
7
10
清华算法的步骤:例4.6.1
2、逐列检查,若该列只有一个未标记的零,对其加( )标记,将( )标 记元素同行同列上其它的零打上*标记。若该列有二个以上未标记的 零,暂不标记,转下一列检查,直到所有列检查完;
3 (0) 1 0*
逐 行 检 查
2 3 0 1
0 2 2 2
3、求解分枝的松弛问题 — 定界过程
– 设两个分枝的松弛问题分别为问题 1 和问题 2 ,它 们的最优解有如下情况 3
表4.2.1 分枝问题解可能出现的情况
序号 问题 1 问题 2 无可行解 无可行解 1 无可行解 整数解 2 无可行解 非整数解 3 整数解 整数解 4 非整数解 5 整数解,目标函 数优于问题 2 整数解 非整数解,目标 6 函数优于问题 1 说 明 整数规划无可行解 此整数解即最优解 对问题 2 继续分枝 较优的一个为最优解 问题 1 的解即最优解 问题 1 停止分枝(剪 枝), 其整数解 为 界, 对问题 2 继续分枝
情况 2, 4, 5 找到最优解 情况 3 在缩减的域上继续分枝定界法 情况 6 问题 1 的整数解作为界被保留,用于以后与问题 2 的后 续分枝所得到的整数解进行比较,结论如情况 4
4
4.2.2 分枝定界法举例
例4.1.1
max f ( x ) 6 x1 4 x2 2 x1 4 x2 13 2 x1 x2 7 x , x 0 且为整数 1 2
©管理与人文学院
1999,4
忻展红
第四章 整数规划
整数规划的难度远大于一般线性规划
4.1 整数规划简介
• 要求所有 xj 的解为整数,称为纯整数规划 • 要求部分 xj 的解为整数,称为混合整数规划 • 对应没有整数解要求的线性规划称之为松弛问题 • 整数规划的解是可数个的,最优解不一定发生在极点 • 整数规划的最优解不会优于其松弛问题的最优解
1、在全部可行性域上解松弛问题
– 若松弛问题最优解为整数解,则其也是整数规划的 最优解
2、分枝过程
– 若松弛问题最优解中某个 xk=bk 不是整数,令 bk 为 bk 的整数部分 – 构造两个新的约束条件 xk bk 和 xk bk +1,分 别加于原松弛问题,形成两个新的整数规划
2 2 0 0
0 1 2 1
0 0 0 1
第四步:抹除所有标记,回到第二步,重新标记;
13
清华算法的步骤:例4.6.1
2 ( 0) 0 * 3 4 2 1 1 0 ( 0) 3 1 ( 0) 2 0 * 2 0* 1 0 2 2
表4.2.3 分枝问题的松弛解
x1 x2 f(x) 问题 I 2 9/4 21 问题 II 3 1 22
问题II的解即原整数问题的最优解
可能存在两个分枝都是非整数解的情况,则需要两边同时继续 分枝,直到有整数解出现,就可以进行定界过程 当有很多变量有整数约束时,分枝即广又深,在最坏情况下相 当于组合所有可能的整数解 一般整数规划问题属于一类未解决的难题,NP-complete,只有 少数特殊问题有好的算法,如任务分配问题、匹配问题


15
结果仅出现 3 个标记 ( ),但却划出 4 条线, 说明什么?!
线性规划有关的英文词汇
• • • • • • • • • • • • • Operational/operations research 运筹学 Linear programming 线性规划 Feasible domain 可行域 Convex set 凸集 Basic feasible solutions 基础可行解 Simplex algorithm 单纯型法 Pivot 主元 Pivoting 主元变换 Revised, dual simplex algorithm 修正、对偶单纯型法 Relative cost 相对成本(机会成本) Shadow price 影子价格 Slack, Surplus, Artificial variable 松弛,剩余,人工变量 Unbounded, Infeasible, Degenerate solution 无界解, 无可行解, 退化解 Duality 对偶性 Primal, dual problem 原问题,对偶问题 Complementary slackness 互补松弛 Sensitivity analysis 灵敏度分析 Ttransportation problem 运输问题 Assignment problem 任务分配(指派) 问题 Bipartite matching 两部图匹配 Hungarian method 匈牙利算法
相关文档
最新文档