运筹学__指派问题1

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

二 匈牙利算法
思路 算法原理 算法步骤
(一) 思路
匈牙利法基于这样一个明显的事实: 如果在m阶效率矩阵中,所有元素cij≥0, 而其中有m个位于不同行不同列的一组0元 素, 则在解矩阵中,只要令对应于这些0元素 位置的xij=1,其余的xij=0,就得到最优 解。 此时的最优解为0
•如效率矩阵为 •恰有4个不同行 不同列的0系数
利用这个性质,可使原系数矩阵变换为含有很多
0元素的新系数矩阵,而最优解保持不变,
在系数矩阵(bij)中,把位于不同行不同列的0元素, 简称为独立的0元素。
问题是:
能否找到位于不同行、不同列的m个0元素?
若能在系数矩阵(bij)中找出m个独立的0元素; 则令 解矩阵(xij)中对应这m个独立的0元素的xij 取值为1, 其他元素取值为0。
0 13 7 0
66 9 5 3 2
010 0
然后划去所在的列的其他0 元素,记作Ø,得
Ø 13 7 0 6 6 9 5 3 2 Ø1 0 0
➢给只有一个0元素的列的0 元素加圈,记,得
Ø 13 7 0 6 6 9 5 3 2 Ø 1 0
然后划去所在的行的其他0元 素,记作Ø,得
Ø 13 7 0 6 6 9 5 3 2 Ø 1 Ø
(三) 匈牙利算法的步骤
例7:
任务 人员
甲 乙 丙 丁
E
J
G
R
2 15 13 4
10 4 14 15
9 14 16 13
7
8 11 9
第一步:变换系数矩阵,使指派问题的 系数 矩阵经变换,在各行各列中都出现0元素: ➢从系数矩阵的每行元素减去该行的最小元素。 ➢再从所得系数矩阵的每列元素减去该列的最小元素。 若某行已经有0元素,就不必再减了。
将其代入目标函数中得到zb=0,它一定是最小值。 这就是以(bij)为系数矩阵的指派问题的最优解。
从而也就得到了原问题的最优解。
库恩(W.W.Kuhn)于1955年给出了指派 问题的 解法,
他引用匈牙利数学家狄·康尼格(d.konig)关于矩 阵中独立零元素的定理(即定理2):
系数矩阵中独立的“0”元素的最多个数等于覆盖 所有“0”元素的最少直线数
(i 1, ,n; j 1, ,m)
则指派问题的数学模型一般形式为:
mm
xij
为第
i
个人指派
min (或 max)z
cijxij
去做第 j 项任务;
i1 j1
m
xij 1 (i 1, ,n)
cij 为第 i 个人为完 成第 j 项任务时
j1
s.t.
n
xij 1
(j 1, ,m)
覆盖所有“0”元素的最少直线数 = 独立的“0”元素 的最多个数
推论1:覆盖所有“0”元素的直线数≥ 不同行不同列的“0”元素的最多个数(m)
推论2:覆盖所有“0”元素的最少直线数≥ 不同行不同列的“0”元素的个数
定理2说明: 1. 只要表中含有不同行或不同列的“0”元素,
都可以通过直线覆盖的方式来找到它们 2. 当覆盖直线的最少条数达到m条时,
➢给最后一个0元素加圈, 记,得
Ø 13 7 6 6 9 5 3 2 Ø 1 Ø
可得独立的0元素的个数就是矩阵的阶 数,即n=m=4, 故得到最优解:
0 0
1 0
0 0
0 0 0 1
指派问题的解矩阵应具有如下特点:
(1)解矩阵(xij)中各行各列的元素之和都是1; (2)可行解(最优解)中恰含有4个非零元,即4个1;
(3)可行解(最优解)矩阵中的1恰取于不同行不同列。
人 工作



丁 人数
译成英文 2 10 9 7 1
译成日文 15 4 14 8 1
每件工作只有一个人去做。
▪ 已知第i个人去做第j 件工作的的效率( 时间或 费用)
为cij (i=1.2…m;j=1.2…m) ,并假设cij ≥0。 问应如何指派才能使总效率最高或总时间﹑ 总费用最低 ?
2. 指派问题数学模型—一般形式
设[cij]表示指派问题的效率矩阵,令
1, 分配第i个人去完成第j项任务 xij 0, 不分配第i个人去完成第j项任务
译成德文 13 14 16 11 1
译成俄文 4 15 13 9 1
任务 1
1ห้องสมุดไป่ตู้
1
1
可以看到指派问题既是0-1 规划问题,也是运输问题, 所以也可用整数规划,0-1 规划, 或运输问题的解法去求解。
(二)指派问题的数学模型
1. 指派问题的一般提法: ▪ 设m个人被指派去做m件工作,
规定每个人只做一件工作,
求解题时通常需引入0-1变量:
1, 分配第i个人去完成第j项任务 xij 0, 不分配第i个人去完成第j项任务
(i 1, ,4; j 1, ,4)
则该指派问题的数学模型为:
min z 2x11 15x12 13x13 4x14 L 11x43 9x44
4
xij
1
(i 1,L
, 4)
∑xij=1 (i=1,2,3,4) 表示第i人只能完成一项任务
2 15 13 4 2
10 4 14 15 4
(cij)= 9 14 16 13
9
7 8 11 9 7
0 13 7 0 606 9 053 2 010 0
0 13 11 2 6 0 10 11 057 4 014 2
42
▪ 第二步:圈出不同行且不同列的0元 素,进行试指派,以寻找最优解。
经第一步变换后,系数矩阵中每行每列都已有了0元素 但需找出m个独立的0元素。 若能找出,就以这些独立0元素对应解矩阵(xij)中 的元素为1,其余为0,这就得到最优解。 当m较小时,可用观察法、试探法去找出m个独立0元素。 若m较大时,就必须按一定的步骤去找, 常用的步骤为:
j1
s.t.
4
xij
1
( j 1,L
, 4)
i1
xij=1 (j=1,2,3,4) 表示第j 项任务只能由一人去完成。
x
ij 0或1
(i,j 1,L
, 4)
满足约束条件的解称为可行解, 可写成矩阵形式,叫作解矩阵。
如本例的一个可行解矩阵(但不一定是最优解)
0 1 0 0
xij
0 1
即m个值取为1,其余取为0, 是自然高度退化的。
指派问题是0-1 规划的特例, 也是运输问题的特例,所以可用整数规 划,0-1 规划或运输问题的解法去求解, 但这就如同用单纯形法去求解运输问题 一样,
是不合算的。 根据指派问题的特点可以有更简便的解 法, 就是匈牙利算法, 其重要依据是: 系数矩阵中独立 0 元素的最多个数等 于能覆盖所有 0 元素的最少直线数。
则[bij]的最优解的结构等价于[cij]的最优解的结构.
证明:将从[bij]中得到的解 代入分配问题模型的目标函数式,有
mm
mm
z
bijxij
(cij ui v j )xij
i1 j1
i1 j1
mm
m
m
m
m
cijxij
ui
xij
vj
xij
i1 j1
i1
j1
j1
i 1
▪ 其元素cij>0(i,j=1,2,…n),
▪ 表示指派第i人去完成第j 项任务时的效率(或时间、成
本等)
c11 c12 … c1n
效率
C=(cij)n×n= c21 c22 … c2n
矩阵 或
………………
系数
c c …c
矩阵
C=(cij )4×4=
2 15 13 4 10 4 14 15 9 14 16 13 7 8 11 9
4. 指派模型的标准形的特点: 含有m×m个决策变量,均为0-1变量 m+m=2m个约束方程
给定一个指派问题时,必须给出效率矩阵(系数矩阵) C=(cij)mxm,且cij0,因此必有最优解 。
mm
MinZ
cijxij 0
i1 j1
指派问题有2m个约束条件,
但可行解(即解矩阵)中有且只有m个是非零值,
➢从只有一个0元素的行(或列)开始, 给这个0元素加圈,记,
这表示对这行所 代表的人,只有一种任务可指派。 然后划去所在的列(或行)的其他0元素,记作Ø。 这表示这列所代表的任务已指派完,不必再考虑别人
0 13 7 0 6 6 9 5 3 2
01 0 0
➢给只有一个0元素的列(或行)中的0元素加圈, 记,
0 14 9 3
9
20
0
23
23 0 3 8
0
12 14
0
令x11=1,x23=1,x32=1,x44=1,即可得最优解,
其解矩阵为
min Z=Z*=0
1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1
问题是如何找到位于不同行、不同列的m个0元素?
匈牙利算法基本思想: 对同一工作i来说, 所有人的效率都提高或降低同一常数, 不会影响最优分配; 同样,对同一人j来说, 做所有工作的效率都提高或降低同一常数, 也不会影响最优分配。
然后划去所在的行(或列)的其他0元素,记作Ø。 这表示这行所代表的人已指派完, 不必再考虑他做别的任务了。
➢反复进行上述两步,直到所有的0元素都被圈出和 划掉为止。
➢从只有一个0元素的行(或列)开 始,给这个0元素加圈,记。
0 13 7 0
66 9
053 2 010 0
➢再给第三行的这个唯一的0元素 加圈,记,得
任务 E
J
G
R
人员

2 15 13 4

10 4 14 15

9 14 16 13

7
8 11 9
▪ 这是一个标准型的指派问题
▪ 类似有:有n项加工任务,怎样指派到n台机床上分别完 成;
有n条航线,怎样指定n艘船分别去航行….. 等。
▪ 对应每个指派问题,需有类似上表那样的数表,
表中数据称为效率矩阵或系数矩阵,
i1
的工时消耗,或称 效率;
xij 0或1
(i 1, ,n;j 1, ,m){cij}
nm
为效率矩阵
3. 指派问题数学模型—标准形式
如果一个指派模型满足以下三个条件: 1)目标要求为min 2)效率矩阵(cij)为m阶方阵 3)效率矩阵中所有元素cij≥0,且为常数
则称上面的数学模型为指派问题的标准形.
一、指派问题的数学模型
(一)举例
例7: 有一份中文说明书, 要分别译成英、日、德、俄四种文字, 分 成别. 记作E 、 J 、 G 、 R ,交与甲、乙、丙、丁 四个人去完 因个人专长不同, 他们完成翻译不同语种的说明书所需的时间(h)如表所示. 应如何指派,使四个人分别完成这四项任务总时间为最小?
mm
m
m
cijxij ui v j
i1 j1
i1
j1
指派问题最优解的性质: 若从效率矩阵(cij)的一行(列)各元素中 分别减去该行(列)的最小元素得到的新矩阵(bij), 那么以(bij)为效率矩阵求得的最优解的结构 和用原来的效率矩阵(cij)求得的最优解的结构相同。
---匈牙利算法基本思想1
(二)算法的基本原理 匈牙利数学家狄·康尼格(D·Konig)证明的两个定理
定理1 如果从指派问题效率矩阵[cij]的每一行元素中分别 减去(或加上)一个常数ui(被称为该行的位势), 从每一列分别减去(或加上)一个常数vj(称为该列的位势) 得到一个新的效率矩阵[bij], 若其中bij=cij-ui-vj,
在实际中经常会遇到这样的问题,
有n 项不同的任务, 需要n 个人分别完成其中的一项,
但由于任务的性质和各人的专长不同, 因此各人去完成不同的任务的效率 (或花费的时间或费用)也就不同。 于是产生了一个问题: 应指派哪个人去完成哪项任务,
使完成 n 项任务的总效率最高(或所需时间最少),
这类问题称为指派问题或分派问题。
---匈牙利算法基本思想2
库恩给出的指派问题的解法称为匈牙利算法
定理2 若效率矩阵C的元素可分成“0”与非“0”两部分,则
覆盖所有“0”元素的最少直线数=独立的“0”元素的最多个数
证明: 已知矩阵中有若干0元素,设覆盖全部0元素最少需 m条直线,又设位于不同行不同列的0有M个.
•因覆盖M中的每个0至少用一条直线,故有mM
•下面要证明M m. 如图假定覆盖所有0元素的m条直线 有r行、c列,m=r+c.
所有r行上不在j1,…,jc列上的0元 素个数≥ r,这些0元素至少有r个位 于不同列
同理:所有c列上不在i1,…,ir行上 的0元素个数≥c ,且这些0元素至 少有c个位于不同
j1 j2
ii12
ir jc
若上述两部分0个数总和为S,则S≥m;其中有m 个,又它们必无重复元素,彼此独立,则SM,故 有m≤M, 故可得M=m.
必恰有m个独立“0”元素存在于表中
匈牙利算法依据:
1.若从效率矩阵(cij)的一行(列)各元素中 分别减去该行(列)的最小元素得到的新 矩阵(bij), 那么以(bij)为效率矩阵求得的最优解的结构 和用原来的效率矩阵(cij)求得的最优解的结 构相同。
2.系数矩阵中独立0元素的最多个数等 于能覆盖所有0元素的最少直线数。
相关文档
最新文档