匈牙利法解决人数及任务数不等的指派问题

合集下载

匈牙利法求解指派问题

匈牙利法求解指派问题

然后划去所在的列的其他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 Ø
➢给最后一个0元素加圈, 记。
Ø 13 7 6 6 9 5 3 2 Ø 1 Ø
可见m=n=4,得到最优解。
0001 0100 1000 0010
即甲译俄文、乙译日文、丙 译英文、丁译德文所需时间 最少。Z=28小时
例6 分配问题效率矩阵
任务 A B C D E 人员
甲 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
12 7 9 7 9 7 89666 6 7 17 12 14 9 7 15 14 6 6 10 6 4 10 7 10 9 4
50202 23000 0 10 5 7 2 98004 06365
➢从只有一个0元素的行开始,给 这个0元素加圈,记
50202 23000
10 5 7 2
98004 06365
然后划去所在的列的其他0元素,记 作Ø。
70202 4 3 000 Ø 8350 11 8 0 0 4 4 1 4 3
➢从只有一个0元素的行开始,给这个0 元素加圈,记
70202 4 3 000 Ø 8 3 5 11 8 0 0 4 4 1 4 3
然后划去所在的列的其他0元素,记 作Ø。
70202 4 3 00Ø Ø 8 3 5 11 8 0 0 4 4 1 4 3

指派问题的求解方法

指派问题的求解方法

指派问题的求解方法嘿,咱今儿就来聊聊指派问题的求解方法。

你说这指派问题啊,就好像是给一群小伙伴分任务,得让每个人都能分到最合适的事儿,这可不容易嘞!咱先来说说啥是指派问题。

就好比有一堆工作,有几个人可以去做,每个人对不同工作的效率或者效果不一样。

那咱就得想办法,怎么把这些工作分配给这些人,才能让总的效果达到最好呀。

那咋求解呢?有一种方法叫匈牙利算法。

这就好比是一把神奇的钥匙,能打开指派问题的大门。

咱就把那些工作和人当成一个个小格子,通过一些计算和摆弄,找到最合适的搭配。

你想想啊,如果随便分,那可能就浪费了某些人的特长,或者让一些工作没被最合适的人去做,那不就亏大啦?用了这个匈牙利算法,就能一点点地把最合适的工作和人配对起来。

就像你去拼图,得找到每一块的正确位置,才能拼成一幅完整漂亮的图。

这匈牙利算法就是帮咱找到那些正确位置的好帮手呀!它能让那些工作和人都找到自己的“最佳搭档”。

还有啊,咱在生活中也经常会遇到类似的指派问题呢。

比如说,家里要打扫卫生,每个人擅长打扫的地方不一样,那怎么分配任务才能又快又好地打扫完呢?这不就是个小小的指派问题嘛。

或者说在公司里,有几个项目要分给不同的团队,哪个团队最适合哪个项目,这也得好好琢磨琢磨,才能让项目都顺利完成,取得好成果呀。

总之呢,指派问题的求解方法可重要啦,就像我们走路需要一双好鞋一样。

掌握了这些方法,咱就能在面对各种指派问题的时候,不慌不忙,轻松应对,找到那个最优解。

你说是不是很厉害呀?所以啊,可别小瞧了这指派问题的求解方法哦,说不定啥时候就能派上大用场呢!。

分配问题指派问题与匈牙利法课件

分配问题指派问题与匈牙利法课件
➢现问:如何确定一个分派工人去工作的方案,使得工人们 完成工作的总时间为最少。
分派方案满足下述两个条件:
• 任一个工人都不能去做两件或两件以上的工作 1.任一件工作都不能同时接受两个及以上的工人去做
分配问题指派问题与匈牙利法课件
标准形式的分配问题
n个人 n件事
每件事必有且只有一个人去做 每个人必做且只做一件事
5 0 2 0 2
2
3
0
0
0
0 10 5 7 2
9
8
0
0
4
0 6 3 6 5
圈0个数4 < n=5
5 0 2 0 2
2
3
0
0
0
0 10 5 7 2
9
8
0
0
4
0 6 3 6 5
分配问题指派问题与匈牙利法课件
⑥找未被直线覆盖的最小数字k;
⑦对矩阵的每行:当该行有直线覆盖时,令ui=0; 当 该 行 无 直 线 覆 盖 时 , 令 ui=k 。
⑩再次寻找独立零元素
逐列检验
4 8 7 15 12
7 9 17 14 10
6
9
12
8
7
6 7 14 6 10
6
9
12
10
6
0 3 0 11 8
0 0 6 6 2
0
1
2
1
0
0 0 5 0 4
0
2
3
4
0
0 0 1 0 0
0 1 0 0 0
0
0
0
0
1
0 0 0 1 0
分配问题指派问题与匈牙利法课件
数学模型

第五章 匈牙利法与最佳指派问题

第五章 匈牙利法与最佳指派问题

7 2 2
4
3
8 3 5 3
11 8
4
4 1 4
情况一出现,即得到了最优解,其相应的解矩阵为:
0 1 0 0 0
0 0 1 0 0
xij
1
0
0
0
0
0 0 0 1 0
0 0 0 0 1
由此得知最优指派方案为甲完成任务B,乙完成任务
C,丙完成任务A,丁完成任务D,戊完成任务E,最少时
间为
min z 7 6 7 6 6 32
而总的最少时间为32天.
当然,由于方法中的第二步4中的情况二的出现,造成 指派问题的最优解常常是不唯一的,但不同最优解的 最优值总是相同的.
第三节 非标准指派问题
前一节的匈牙利法只适用于目标函数为极小、价值 系数矩阵为方阵且价值系数矩阵中元素均为非负的情况。 当指派问题不满足上述三个条件时,就应先化成标准的 指派问题,然后再用匈牙利法求解.
解:
ABC DEF
甲 16 10 12 15 0 0 8 2
甲 16 10 12 15 0 0
8
2
乙 11 12 10 18 0 0 3 2 3

11
12
10
18
0
0
3
2
3
丙 8 17 13 16 0 0 7 3 1

8
17 13 16
0
0
7
3
1
8 10 10 15
本例经过反复的行、列检验后得到如下矩阵:
5 2 2
2
3
10 5 7 5
9
8
4
6 3 6 2
情况三出现,亦即未得到完全分配方案,求解过程 按以下步骤继续进行。

匈牙利算法求解教学任务指派问题

匈牙利算法求解教学任务指派问题

Xij
(1)
使得总效益最高(时间最少、成本最小、收益最大等),
即目标函数
。当

时, 为
一对一指派问题;否则为多人协作或兼职问题。 求解指派问题的方法通常有分支定界法、隐枚举法、
匈 牙 利 法 等 [1]。 匈 牙 利 算 法 由 匈 牙 利 数 学 家 Edmonds 于 1965 年提出,是基于 Hall 定理中充分性证明的思想,用增 广路径求二分图最大匹配的算法,算法的核心是寻找增广 路径,也可用于指派问题的求解 [2]。
指派问题的数学模型通常是:设 n 个人(或机器)被 分配去做 m 件工作,由于工作性质和各人(或机器)的专 长不同,完成不同工作的效益(时间、成本、收益等)将有 差别,用系数矩阵 C 表示,Cij 表示第 i 个人完成第 j 件工作 的效益,Cij ≥ 0(i=1,...,n;j=1,...,m)。当 n=m 时,为 平衡状态下的标准指派问题;当 n > m 时,人数多于任务数, 属于不平衡状态下择优录用问题;当 n < m 时,人数少于 任务数,可以分为某些任务不管和一人完成多项任务两种 情况,属于不平衡状态下指派问题的拓展。求解指派矩阵 X:
针对多人执行多项工作的指派问题,张云华采用匈牙 利算法的基本思想和步骤进行了研究 [3]。目标分配问题作 为指派问题的一种类型,谷稳综合匈牙利算法及其进化算 法的特点,对机器人足球的目标分配问题进行了研究 [4]。 为避免匈牙利算法多次试分配导致处理速度慢的不足,周 莉等人对寻找独立零的次序进行改进,得到匈牙利算法求 解指派问题的一次性分配算法 [5]。李延鹏等人提出利用虚 拟工作代替并联环境,将具有并联环节的人员指派问题转
本文基于匈牙利算法,建立教学任务指派优化模型, 分析如何分配教师承担教学任务以使系统整体现求解。

指派问题——匈牙利法

指派问题——匈牙利法

i1 j1
j1
ik
z (s)
指派问题的匈牙利解法
根据此定理,可以对 做如下改变,目的是找出C 中的 n个不同行不同 列的0元素:
将 C的每一行减去该行中的最小元素,得到C’矩阵 ,则C’ 的每行中 均至少出现一个0元素,且所有cij0 。同样,对C 的列亦进行如此计 算,由此,我们完全可以从原效率矩阵 出发,得到一个新的效率矩 阵 ,使 C的每行每列中均至少存在一个0元素,而不改变问题的最优 解。
(1) 最大化指派问题
设效率矩阵为
,其中最大元素为 m,令矩阵
C (c ) ,则以 B为效率矩阵的最小化指派问题和以C为效率矩阵的原最大化指
派问题有相同的最优解;
ij nn
B (bij )nn , bij m cij
非标准形式的指派问题
(2) 资源数量(人数等)与事件数不等的指派
若资源少,事件多,则增加一些虚拟 的资源点,这些虚拟的资源做事件的效 率系数为0,可理解为这些费用(成本)实 际上不会发生;
2
指派问题的匈牙利解法—例
得到新的矩阵,再次试派,得解
7 (0) 2 0 2
4
3 (0) 0
0
0 8 3 5 (0)
11
8
0
(0)
4
(0) 4 1 4 3
x* x* x* x* x* 1
12
23
35
44
51
f * 7 6 9 6 4 32
指派问题——匈牙利法
4
20 15 13 M 8
5
M0 00 0
Min z=15x11+18x12+21x13+24x14+19x21+23x22 +22x23+18x24+26x31+17x32+16x33+19x34 +19x41 +21x42+23x43+17x44

指派问题的匈牙利法

指派问题的匈牙利法

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
例二、有一份中文说明书,需译成英、日、德、俄四种
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
第四步:变换矩阵(bij)以增加0元素。 在没有被直线覆盖的所有元素中找出最小元素,然后 打√各行都减去这最小元素;打√各列都加上这最小元 素(以保证系数矩阵中不出现负元素)。新系数矩阵 的最优解和原问题仍相同。转回第二步。
例一:
任务
人员
A
B
C
D

2
15 13
4
乙 10
4
14 15

9
14 16 13
ቤተ መጻሕፍቲ ባይዱ
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
圈零划零

指派问题与匈牙利解法

指派问题与匈牙利解法

指派问题与匈⽛利解法指派问题概述:实际中,会遇到这样的问题,有n项不同的任务,需要n个⼈分别完成其中的1项,每个⼈完成任务的时间不⼀样。

于是就有⼀个问题,如何分配任务使得花费时间最少。

通俗来讲,就是n*n矩阵中,选取n个元素,每⾏每列各有1个元素,使得和最⼩。

如下图:指派问题性质:指派问题的最优解有这样⼀个性质,若从矩阵的⼀⾏(列)各元素中分别减去该⾏(列)的最⼩元素,得到归约矩阵,其最优解和原矩阵的最优解相同.匈⽛利法:12797989666717121491514661041071091.⾏归约:每⾏元素减去该⾏的最⼩元素502022300001057298004063652.列归约:每列元素减去该列的最⼩元素502022300001057298004063653.试指派:(1)找到未被画线的含0元素最少的⾏列,即,遍历所有未被画线的0元素,看下该0元素所在的⾏列⼀共有多少个0,最终选取最少个数的那个0元素。

(2)找到该⾏列中未被画线的0元素,这就是⼀个独⽴0元素。

对该0元素所在⾏和列画线。

50202230000105729800406365502022300001057298004063655020223000010572980040636550202230000105729800406365(3)暂时不看被线覆盖的元素,重复(1)(2)直到没有线可以画。

(4)根据(2)找到的0元素个数判断,找到n个独⽴0元素则Success,⼩于n个则Fail.(本例⼦中,n=5,可以看到,第⼀次试指派之后,独⽴0元素有4个,不符合)4.画盖0线:⽬标:做最少的直线数覆盖所有0元素,直线数就是独⽴0元素的个数。

注意:这跟3的线不同;不能⽤贪⼼法去画线,⽐如1 0 01 1 01 0 1若先画横的,则得画3条线,实际只需2条;若先画竖的,将矩阵转置后同理。

步骤3得出的独⽴0元素的位置50202230000105729800406365(1)对没有独⽴0元素的⾏打勾、(2)对打勾的⾏所含0元素的列打勾(3)对所有打勾的列中所含独⽴0元素的⾏打勾(4)重复(2)(3)直到没有不能再打勾(5)对打勾的列和没有打勾的⾏画画线,这就是最⼩盖0线。

最短路径、指派、运输问题

最短路径、指派、运输问题

第二步:进行试指派以寻求最优解。
(1)进行行检验:从只有一个0元素的行开始,给这 个0元素加(),记作(0);再划去(0)所在列的其它 0元素,记作φ。若遇到有两个0元素以上的行,先放下。 (2)进行列检验:给只有一个0元素的列0元素加() ,记作(0);然后划去(0)所在行的0元素,记作φ。 (3)再对两个以上0元素的行和列标记,任意取一个 加()。
B1 A1 A2 A3 4 7 6
B2 8 9 9
B3 7 17 12
B4 15 14 8
B5 12 10 7
A4
A5
6
6
7
9
14
12
6
10
10
6
三、其它指派问题
(1)目标函数求最大值的指派问 题 对于此问题可做一个新的 矩阵B=(bij)。找出原矩阵的最 大元素m,令B=(bij)=m-cij

产 量 与 销 量 平 衡
解: 设产地Ai到销地Bi的运量为xij,由问题构造运量平衡表
可以知道:
(1)产销平衡 (2)Ai运出量等于产量 (3)Bj运入量等于销量
a b
i 1 i j1
m
n
j
x
j 1
n
ij
ai
x
i 1
m
ij
bj
运量平衡表
销地Bi 运价 产地Ai A1 A2 C11 C21 C12 C22 B1 B2
4 2 (cij ) 4 3 3 3 3 2 4 6 5 6 1 - 1 3 5 - 2 0 1 4 - 3 5 -2 1 2 1 0 0 3 0 - 1 3 4 3 - 2 0 1 2 1-3 4 3 -2 1 -2 2 1 0 0 1 2 0 2 0 3 (b ) ij 1 3

指派问题的算法

指派问题的算法

指派问题的算法分析与实现摘要在企业、公司的运营与管理中,管理者总是希望把人员最佳分派以发挥其最大工作效率,从而降低成本、提高效益。

然而,如果没有科学的方法是很难实现优化管理的,由此我们引入了指派问题。

指派问题多是求项目的工时最少,而很多情况下人们并不关心项目总工时的多少,而只关心项目能否在最短的时间内完成,即历时最少的指派问题。

这类问题研究的是n个人执行n项任务,执行每项任务的人数以及总的指派人项数均有限制,要求最优指派。

在运筹学中求解整数规划的指派问题通常是通过匈牙利算法来求解,但指派问题也可以归结为一个0-1整数规划问题,本文先对指派问题进行陈述,引出对实际问题的求解。

在指派问题的背景、描述中充分理解该问题,先运用匈牙利算法实现指派问题,然后再建立一个0-1整数规划模型,并运用matlab和lingo编译程序对问题进行编译,运用软件解决模型问题,最终实现指派问题在实际问题中的运用。

通过运用匈牙利算法和0-1整数规划同时对指派问题求解,我们发现用0-1整数规划的方法来求解可以更简单,也更方便程序的阅读和理解。

与此同时,我们还对0-1整数规划问题由整数数据深入研究到小数数据。

最后通过实例来说明运用matlab,lingo编译程序来解决整数规划问题的简便和有效性。

关键词:指派问题;匈牙利算法;0-1整数规划;matlab模型;lingo模型1. 问题陈述指派问题又称分配问题,其用途非常广泛,比如某公司指派n个人去做n 件事,各人做不同的事,如何安排人员使得总费用最少?若考虑每个职工对工作效率(如熟练程度等),怎样安排会使总销量达到最大?这些都是一个企业经营管理者必须考虑的问题,所以该问题有重要的应用价值。

假设有n 件工作分派给n 个人来做,每项工作只能由一人来做,每个人只能做一项工作。

若给出各人对各项工作所具有的工作效率。

问应该如何安排人选,及发挥个人特长又能使总的效率最大。

为此用0-1整数规划来实现指派问题即如何安排人选。

匈牙利法解决人数及任务数不等的指派问题

匈牙利法解决人数及任务数不等的指派问题

匈牙利法解决人数与任务数不等的指派问题于凯重庆科技学院经济管理学院物流专业重庆沙坪坝区摘要:本文将讨论运筹学中的指派问题,而且属于非标准指派问题,即人数与任务数不相等的指派问题,应当视为一个多目标决策问题,首先要求指派给个人任务数目两两之间相差不能超过1,其次要求所需总时间最少,并且给出了该类问题的求解方法。

关键词:运筹学指派问题匈牙利算法系数矩阵解矩阵引言:在日常的生产生活中常遇到这样的问题:有n项任务,有n个人员可以去承担这n 项任务,但由于每位人员的特点与专长不同,各对象完成各项任务所用的时间费用或效益不同;有因任务性质要求和管理上需要等原因,每项任务只能由一个人员承担来完成,这就涉及到应该指派哪个人员去完成哪项任务,才能使完成n项任务花费总时间最短,总费用最少,产生的总效益最佳。

我们把这类最优匹配问题称为指派问题或分配问题。

1.指派问题的解法——匈牙利法早在1955年库恩(w.w.ku.hn)就提出了指派问题的解法,该方法是以匈牙利数学家康尼格(koning)提出的一个关于矩阵中0元素的定理为基础,因此得名匈牙利法(The Hungonrian Method of Assignment)1.1匈牙利解法的基本原理和解题思路直观的讲,求指派问题的最优方案就是要在n阶系数矩阵中找出n个分布于不用行不同列的元素使得他们的和最小。

而指派问题的最优解又有这样的性质:若从系数矩阵C(ij)的一行(列)各元素都减去该行(列)的最小元素,得到新矩阵CB(ij),那么以CB(ij)为系数矩阵求得的最优解和原系数矩阵C(ij)求得的最优解相同。

由于经过初等变换得到的新矩阵CB(ij)中每行(列)的最小元素均为“○”,因此求原指派问题C(ij)的最优方案就等于在新矩阵CB(ij)中找出n个分布于不同行不同列的“○”元素(简称为“独立○元素”),这些独立○元素就是CB(ij)的最优解,同时与其对应的原系数矩阵的最优解。

浅析指派问题的匈牙利解法成稿讲解

浅析指派问题的匈牙利解法成稿讲解

浅析指派问题的匈牙利解法胡小芹数学科学学院数学与应用数学学号:040414057指导教师:苏孟龙摘要:对于指派问题,可以利用许多理论进行建模并加以解决,但匈牙利解法是解决指派问题的一种非常简单有效的方法,并且可以解决多种形式的指派问题,但匈牙利算法本身存在着一些问题,本文主要介绍了匈牙利算法的基本思想,基本步骤,以及它的改进方法.在匈牙利算法的基础上,本文还介绍了两种更简便实用的寻找独立零元素的方法——最小零元素消耗法和对角线法.关键词:指派问题;匈牙利解法;最小零元素消耗法;对角线法0 引言在现实生活中经常会遇到把几个任务分派给几个不同的对象去完成,由于每个对象的条件不同,完成任务的效率和效益亦不同.指派问题的目标就是如何分派使所消耗的总资源最少(或总效益最优),如给工人分派工作,给车辆分配道路,给工人分配机床等等,同时许多网络问题(如旅行问题,任务分配问题,运输问题等),都可以演化成指派问题来解决.在现实生活中,指派问题是十分常见的问题,而匈牙利解法是解决指派问题的一种非常简单有效的方法.本文主要介绍匈牙利解法的基本原理及思想,解题步骤,不足与改进,以使匈牙利法更能有效地解决指派问题.1 指派问题及其数学模型指派问题是指由m项任务,需要n个人来承担,每人只能承担一项任务,且每项任务只能有一人来承担,由于各人的专长不同,各人完成的任务不同,导致其效率也各不相同.因此,就产生怎样科学地指派任务,才能使完成各项任务所消耗的总资源最少(或总成本最低等),由于n m ,不同,指派问题可分为以下三种情况:第一、当n m =时,即为每人指派一项任务.第二、当n m >时,即任务数〉人数,这时可虚设)(n m -个人构成m m ⨯的 效率矩阵,并且这)(n m -个人在执行这m 项任务时的效率应该是效率最高. 第三、当n m <时,即配置人数〉任务数,这时应虚设)(m n -项任务,并且这n 个人在执行这)(m n -项任务时的成本最低.通过虚设任务或人,指派问题的效率矩阵都可以转化成方阵.匈牙利解法要求指派问题最小化,其数学模型为设用0ij c >(,1,2,,)i j n =表示指派第i 个人去完成第j 项任务时所用的时间,定义决策变量 10ij i j x i j ⎧=⎨⎩表示第个人完成第项任务, 表示不指派第个人完成第项任务.则问题可转化为0-1线性规划问题:∑∑===n j ij n i c Z 11mint s ⋅ 111,1,2,,,1,1,2,,,01,i,j 1,2,,n nij i nij j ijx j n x i n x ==⎧==⎪⎪⎪==⎨⎪⎪==⎪⎩∑∑或.如果指派问题要求的是最大化问题如F max ,则可以转化为最小化问题,一般方法是:取max (,1,2),ij M c i j n ==令(,1,2,)ij ij b M c i j n =-=,则11min ,n n ij i j f b ===∑∑,max F nM f F =-有从而求. 2 指派问题的解法——匈牙利解法“匈牙利解法”最早是由匈牙利数学家 D.Konig 用来求矩阵中0元素的一种方法,由此他证明了“矩阵中独立0元素的最大个数等于能覆盖所有0元素的最少直线数”.1955年由W.W.Knhu 在求解著名的指派问题时引用了这一结论,并对具体解法做了改进,仍称为匈牙利解法.2.1 匈牙利解法的基本原理和解题思想从根本上讲,求指派问题的最优解就是要在n 阶方阵中找到n 个这样的元素,它们分布在不同行不同列上,并且这些元素之和为最小,而要使这些元素之和为最小,就要使其中的每一个元素尽可能的小——最好这些元素都是其所在行所在列上的最小元素.而指派问题的最优解又具有这样的性质(定理1):若从系数矩阵)(ij c 的每行(列)各元素中分别减去该行(列)的最小元素,得到的新矩阵()ij b ,那么以()ij b 为系数矩阵求得的最优解与用()ij c 求得最优解相同.由于新矩阵()ij b 中每行每列都有最小元“0”,因此,求原指派问题的最优解转化为在()ij b 中指出n 个分布在不同行不同列上的“0”元素(简称为独立0元素),而根据考尼格(Konig )证明的定理(定理2):矩阵中独立元素的0最多个数等于能覆盖所有零元素的最少直线数,利用这一定理,就可以通过寻找“能覆盖所有零元素的最少直线数”来确定()ij b 中独立元0素的具体数量.若()ij b 中独立0元素的个数少于矩阵的阶数n ,就要继续对矩阵()ij b 进行化简,直到找到n 个独立0元素为止,这就是匈牙利解法的基本原理和解题思想.2.2 匈牙利解法的解题步骤第一步:变换效益矩阵,使新矩阵中的每行每列至少有一个0.(1)行变换:找出每行最小元素,再从该行各元素中减去这个最小元素.(2)列变换:从所得新矩阵中找出每列中的最小元素,再从该列各元素中减去这个最小元素.第二步:进行试指派,以寻找最优解.(1)逐行检查从第一行开始,如果该行只有一个零元素,就对这个零元素打上括号,划去与打括号零元素同在一列的其他零元素,如果该行没有零元素,或有两个或多个零元素(已划去的不计在内),则转下行.打括号的意义可理解为该项任务已分配给某人.如果该行只有一个0,说明只能有唯一分配.划掉同列括号零元素可理解为该任务已分配,此后不再考虑分配给他人.当该行有两个或更多的零元素时,不计括号内的,其理由是至少有两个分配方案,为使以后分配时具有一定的灵活性,故暂不分配.(2)逐列检查在行检查的基础上,由第一列开始检查,如果该列只有一个零元素,就对这个零元素打括号,再划去与打括号零元素同行的其它零元素.若该列没有零元素或有两个以上零元素,则转下一列.(3)重复(1)、(2)两步后,可能出现以下三种情况:①每行都有一个零元素标出括号,显然打括号的零元素必然位于不同行不同列,因此得到最优解.②每行每列都有两个或两个以上的零,这表示对这个人可以分配不同任务中的任意一个.这时可以从所剩零元素最少的行开始,比较这行各零元素所在列中元素的个数,选择零元素少的那列这个零元素打括号,划掉同行同列的其他它零元素,然后重复前面的步骤,直到所有0都作了标记.③矩阵中所有零都作了标记,但标有(0)的元素个数少于m个,则转下步.第三步:做最少的直线覆盖所有零元素,以确定该系数矩阵中能找到最多的独立0元素.·对没有()的行打√;·对打√的行上所有含0元素的列打√;·再对打√的列上有()的行打√;·重复上两步,直到过程结束;·对没有打√的行划横线,对所有打√的列划垂线.这就得到了能覆盖矩阵中所有0元素的最少直线数.第四步:非最优阵的变换——零元素的移动.(1)在没有被直线覆盖的所有元素中,找出最小元素;(2)所有未被直线覆盖的元素都减去这个最小元素;(3)覆盖线十字交叉处的元素都加上这个最小元素;(4)只有一条直线覆盖的元素的值保持不变.第五步:回到第二步,反复进行,直到矩阵中每行每列都有一个打()的0元素为止,即找到最优解.2.3 匈牙利算法的一点注记(1)匈牙利算法第一步变换效益矩阵使每行每列都出现零元素,一般方法是先行变换,再列变换,但先列变换再行变换最优解不变.(2)有些时候先行后列变换后不能得到最优解,但先列后行变换时却能直接找到最优解,从而减少了计算步骤,使计算简明.如下所示:先行变换,再列变换得2109715414813141611415139B ⎡⎤⎢⎥⎢⎥=→⎢⎥⎢⎥⎣⎦(0)82511(0)5423(0)001145B ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦只找到三个独立0元素,不是最优解.那么先列变换,后行变换得2109715414813141611415139B ⎡⎤⎢⎥⎢⎥=→⎢⎥⎢⎥⎣⎦06(0)013(0)51763(0)(0)920B ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦ 每行每列都有“(0)”,得到最优解.3 匈牙利法的不足与改进3.1 不足和改进(一)以上是匈牙利法的常规解题方法,虽然能有效地解决指派问题,但是其解题过程中还存在以下两点不足:第一、在匈牙利算法的第二步中用“试指派”的方法寻找独立0元素,道理简单,也能很快找到独立0元素,但对于一个n 阶方阵,这些独立0元素在矩阵中可能有n 种排列方式,这样在矩阵中标出来的独立0元素排列很乱,没有规律.另外,对于某些矩阵0元素排列的比较有规律,本可以用别的更简单的方法寻找独立0元素,而用这种“一般性”的方法比较麻烦.第二、在匈牙利算法的第三步“做最少的直线覆盖所有0元素”过程中,一会儿针行,一会儿针对列,一会儿对没有()的打√,一会儿又对有()的打√,一会对没有打√号的(行)划线,一会又对打√号的(列)划线,这样变来变去令人晕头转向,稍不注意就会出错,特别是对于这种画法每一步的意图以及内在原理,大多数人难以理解,具体步骤很难记住,难以掌握,这就影响了这一理论在实际工作中的应用.算法的改进:第一、寻找独立0元素的一种新方法——对角线法.对角线法的原理:根据要在指派问题化简后的系数矩阵(ijb)中找出n个独立0元素,而这些独立0元素又分布在方阵的不同行不同列上,利用这一特点,我们可以对矩阵(ijb)的行(或列)进行某种调换,就一定可以使这些独立0元素按矩阵的对角线排列,这样凡是出现在对角线上的零元素一定是独立0元素,而非对角线上的零元素也一定是非独立0元素,这样我们既能很快找到所有独立0元素,又能直观地发现矩阵中独立0元素的个数.方法:从0元素数量最少的行开始,选择该列第一个0元素,根据该0元素所在行的位置确定该列元素在新矩阵中列的位置(若该0元素所在行是第i行,那么就将该0元素所在列放在新矩阵的第i列),并在原矩阵中划去这一列,并划掉同行其它0元素,再在剩下的矩阵中重新比较各列0元素的数量,并按前面方法进行,直至完成.这样就可以将所有独立0元素集中放在新矩阵的对角线上,当对角线上全为0时,就得到了指派问题的最优解,如果对角线上某一处不为0,说明该矩阵中独立0元素数量不足,这时需要对矩阵作进一步化简.应用示例: 寻找矩阵B中的独立0元素B=5050200304400401⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦→B=5050200304400401⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦→10505003244004010B⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦(第一列与第四列交换)或25050 2300 0044 0104B⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦(第二列与第四列交换)第二、最少直线的一种简单画法.画法原理:根据定理“矩阵中独立0元素的最多个数恰好等于能覆盖所有0元素的最少直线数”,也就是说矩阵中有多少个独立0元素,就需要多少条直线将所有0元素覆盖,而从匈牙利法解题步骤看矩阵中独立0元素的数量m 及位置,在划线前是已知,所以覆盖0元素的最少直线数m 也是已知的.由于任意两个独立0元素“(0)”都不同行且不同列,而盖0线也只能按矩阵的行或列来划,因此,一条盖0线只能覆盖一个“(0)”,要覆盖m 个“(0)”就需要m 个直线.基于“盖0线”与独立0元素“(0)”之间数量的一对一关系,只要我们始终围绕着独立0元素“(0)”来画线,首先就能用最少的直线覆盖所有的独立0元素.另外,由于矩阵中的非独立0元素总是和某个独立0元素在同一行或同一列,因此画盖“(0)”线时,只要我们能使每条盖0线都尽可能多的附带非独立0元素,那我们就能实现用最少的直线覆盖所有0元线.具体画法:(1)标记——对“(0)”所在行和列上的0元素数量在行列旁予以标注,对没有“(0)”的行与列的打×号予以标记.(2)画线——从有“(0)”的行与列中找出0元素最多的行(或列)画一横(或纵)线覆盖这些0元素.(3)修正——从“(0)”所在行与列上的0元素数量减去已被覆盖的0元素数.(4)重复上述过程,直至覆盖所有0元素.上述方法的关键是紧紧抓住独立0元素其所在行与列上的0元素的多少决定盖0线的画法(即画线的先后和方向,横向还是纵向),使每条线都能覆盖尽可能多的0元素.另外,因某些非独立0元素处在可被两条盖0线同时覆盖的交叉点上,为减少重复性覆盖,每画一条线后都要对各行各列0元素数予以修正(从中减去已被覆盖的0元素数).示例: 试用最少的直线覆盖下列矩阵中的所有0元素5(0)202230(0)0(0)1057298(0)0406365B ⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎣⎦→ 5(0)2022230(0)03(0)10572198(0)04206365B ⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⨯⎣⎦2 1 23 ×5(0)2022230(0)00(0)10572198(0)04206365B ⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⨯⎣⎦→ 5(0)2020230(0)00(0)10572198(0)04206365B ⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⨯⎣⎦→ 2 1 1 × × 2 × 1 × ×5(0)2020230(0)00(0)10572198(0)04006365B ⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⨯⎣⎦ 2 × × × ×注意:当矩阵中的行和列旁标的0元素的数量相等时,我们从中任意选择一个画线,但是当此行(或列)中的0元素所对列(或行)中无“(0)”时,只能先划去此行(或列).比如上面的矩阵B 中,第二行和第四列中0元素相等,都是最多(3个),若先划去第四列,则第二行中第五列中的0元素用这种方法无法划去,若要划去这个0元素,则直线增多.3.2 不足和改进(二)用于解决指派问题的匈牙利解法,在运算过程中存在着两个问题:第一、算法不完善.从未标零元素最少的行取定0元素,不能保证0元素所在的列未标零元素最少.因此,系数矩阵已存在最大匹配,但无法取得最大匹配,而算法中途停止.第二、计算步骤烦琐.当0元素不够又没有未标零元素时,作直线覆盖,移动零元素,然后再取定0元素,反复进行.一 改进算法1 完善匈牙利算法选取零元素时,若被划行未标零元素多于一个,则要保证所标的零元素所在的列未标零元素最少.利用此方法可以解决问题一.2 改进算法步骤(1)利用匈牙利算法,由系数矩阵()ij c 得到各行各列都有零元素的等效矩阵()ij b .(2)若有未划零元素,则选有未划零元素最多的行或列作直线覆盖,直到没有未划零元素为止.(3)若直线数目小于n ,则在未划元素中选取最小元素,未划的各元素减去最小元素,直线交叉处的元素均加最小元素,转2.否则转4.(4)选取有未标零元素最少的行(或列)取未标零元素,记(0),同行同列的未标零元素记 φ;若该行(或列)未标零元素多于一个,则选列(或行)中未标零元素最少的本行未标零元素为(0),直到(0)元素个数等于n 为止.(5)结束算法,得到最大匹配.令对应于(0)的1ij x =,其余的0ij x =,并计算目标函数值.二 定义及定理定义1 作直线覆盖时,被直线覆盖的元素,称为已划元素.未被直线覆盖的元素,称为未划元素.定义2 求最大匹配时,已作记号(0)和φ的零元素称为已标元素,未作记号的零元素称为未标零元素.定理 矩阵()ij b 中已存在最大匹配的充要条件是直线覆盖其中全部零元素的最少数目为n .证明 必要性 若()ij b 中有最大匹配,则()ij b 中存在n 个不同行不同列的零元素,故至少n 条直线才能覆盖全部元素.充分性 若覆盖全部零元素的最少直线数目为n ,则()ij b 中有n 个不同行不同列的零元素.否则可以用少于n 条的直线能覆盖全部元素.此算法的优点是,先求具有最大匹配的等效矩阵,再求最大匹配.求解过程中可以减少迭代次数,降低计算量,并且对某些用匈牙利算法无法得到最大匹配的矩阵利用此改进的算法可以得到最大匹配,例如效益矩阵010()002003ij b ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦. 3.3 不足和改进(三)3.3.1 匈牙利法存在的问题我们用“匈牙利法”处理了许多与分配问题相关的运输、调度问题,大多数情况下算法是收敛的,得到了最优解,而处理一些特殊数据时算法不收敛,无法找出最优解,矩阵阶数越大的分配问题,不收敛的情况越多.试验中,发现了一个较小阶不收敛的系数矩阵,下面用“匈牙利法”对该矩阵进行分析2 2 4 1 4 4 4 4 12 2 1 1 23 3 3 12 3 1 4 4 2 4 3 42 1 1 4 13 1 1 23 1 1 1 2 2 1 3 11 3 1 42 23 1 33 4 2 1 1 1 3 3 13 24 1 3 1 4 1 21 4 12 1 43 1 4经过算法第一步,得到修正的系数矩阵1 1 3 0 3 3 3 3 01 1 0 0 12 2 2 01 2 0 3 3 1 3 2 31 0 0 3 02 0 0 12 0 0 0 1 1 0 2 00 2 0 3 1 1 2 0 22 3 1 0 0 0 2 2 02 13 0 2 0 3 0 10 3 0 1 0 3 2 0 3进行算法第二步,做分配方案,最终第2行无(0)标记,使得第2行第2列没有分配1 1 3 (0) 3 3 3 3 ×1 1 ×× 12 2 2 ×1 2 (0) 3 3 1 3 2 31 ×× 3 (0)2 ×× 12 ××× 1 1 (0) 2 ×(0) 2 × 3 1 1 2 × 22 3 1 ××× 2 2 (0)2 13 × 2 × 3 × 1× 3 × 1 × 3 2 (0) 3进行算法第三步,最终所有的行和所有的列都有∨标记,所有的行末画一条横线,所有的列都画上了竖线,各行列作标记的顺序如下∨∨∨∨∨∨∨∨∨⒄⑿⑵⑶⑻⑼⒀⒁⑷1 1 3 (0) 3 3 3 3 ×⑹∨1 1 ×× 12 2 2 ×⑴∨1 2 (0) 3 3 1 3 2 3 ⑸∨1 ×× 3 (0)2 ×× 1 ⑽∨2 ××× 1 1 (0) 2 ×⒂∨(0) 2 × 3 1 1 2 × 2 ⒅∨2 3 1 ××× 2 2 (0) ⑺∨2 13 × 2 (0) 3 × 1 ⑾∨× 3 × 1 × 3 2 (0) 3 ⒃∨进行算法第四步,没有找到未被直线覆盖的元素,所以也就无法找到最小的元素,也就不能产生新的效能矩阵,算法进入死循环.这就否定了“匈牙利法”主要过程的算法基础.若算法第二步未完成一个完全分配时,则一定能生成一个新的效能矩阵,出现新的零元素,再重新进行完全分配,最终一定能得到一个完全的最优解.3.3.2 匈牙利算法的改进为了使“匈牙利法”对任意数据都能有效的找到最优解,我们在原算法的基础上增加第六步,以及在第三步后面增加判断功能:若生成n条直线,无法生成新的效能矩阵,则退出“匈牙利法”,进行第六步.第六步:产生新的小系数矩阵,使原矩阵分解.(1)从第二步算法中,记下有(0)标记的行号和列号,作为部分解进行保存.(2)从系数矩阵中抽取行列都没有(0)标记的数据,组成一个新的小系数矩 阵:[]ij E ,1,2,,,1,2,,,i m j m m n ==<.(3)将小系数矩阵再代入“匈牙利法”, 继续计算, 得到小系数矩阵的分配解, 把它添加到部分解的结果中去,组合得到一个新的解,如果新的解仍然不是完全解,则转(1)继续处理.(4)对已分配的元素,两两一对组成任意一个矩形的斜对角顶点, 相加后生成一个基础量, 再将矩形的另一对斜对角顶点的元素相加,生成一个改变量,有n 个已分配的元素将产生12321n n ++++-+-对基础量和改变量.(5)对于每对基础量和改变量,如果存在基础量大于改变量的情况,则找出基础量与改变量差值最大的一对,由改变量取代基础量,转(4)继续处理.(6)得到整个分配的最优解,输出分配结果.在上例中,新的小系数矩阵仅为第2行和第2列,m 为1.另外,也没有找到改变量小于基础量的两对值,所以无须进行优化,直接将该元素添加到部分解中去,通常新的小系数矩阵的阶数都很小.文献[]5中给出了一个2222*的系数矩阵,存在上述问题,利用改进的匈牙利算法最终得到最优解.3.4 匈牙利算法的推广匈牙利算法的关键是在变换后的系数矩阵中找出n 个分布在不同行不同列的独立0元素,而匈牙利算法计算过程比较麻烦,文献[]8,文献[]9在匈牙利算法的基础上提出了两种比较简单的寻找独立0元素的方法:最小零元素消耗法及对角线法.3.4.1 最小零元素消耗法基本思想:对于一个给定的矩阵,其中0元素的数目是一定的,这一定的0元素最多能分配出多少个0元素来?当分配出一个0元素时,该0元素所在行和列上的其它0元素就无法再分配,失去了作用,也就是说,分配出该0元素要用去0元素的个数为:该0元素本身+该0元素所在行上的其它0元素+该0元素所在列上的其它0元素,称此数为该0元素的0消耗数.对于给定矩阵中的所有0元素,可以很容易地找出其0消耗数,根据动态规划的最优化原理,如果第1次分配出0消耗数最少的0元素,将消耗的0元素去掉,在余下的0元素中再分配0消耗最少的0元素,重复这样的过程,最终结果必将得到最多次数的分配即最大分配,这就是最小0元素消耗法.基本方法:利用匈牙利算法变换系数矩阵,使每行每列出现0元素,计算出各个0元素的消耗数,分配处0消耗数最少的那个0元素,以(0)标记.此0元素所在行所在列以不起作用,再计算余下的个各个0元素的消耗数,重复上述步骤,直至每行每列的0元素都标记完,最终得到最大匹配,若标记(0)的个数等于矩阵阶数,得到最优解.在应用此方法的时候,当遇到0消耗相同的0元素不止一个,此时应先分配哪个0元素呢?有以下三种情况:(1)0消耗数相同,但0元素在同一行或同一列上,如下所示:120(,)0(,)i j ij120(,)0(,)i j ij现就0元素在同一行的情况说,如果分配其任何一个,另一个则被消耗掉,他们的0消耗数实际上是相同的,只能表示一个分配,要么分配10(,)i j ,要么分配20(,)i j ,但第i 行则可以确定下来,等其它0元素分配完以后,如12,j j 列中有一列确定,则第i 行可以具体确定出0元素,若12,j j 列仍未确定,则说明最大分配小于n ,或者有多种最优分配方案.对于同一列的情况,可以确定第j 列,具体分配哪一个,视其它0元素的分配而定.(2)0消耗数相同且互相影响,但0元素不同行不同列,此时0元素的消耗数必共同消耗一个或两个0元素,如下所示:11220(,)00(,)i j ij 11220(,)000(,)i j ij110(,)i j 、220(,)i j 的0消耗相同,设为q ,他们的0消耗因共有0元素而相互影响,若先分配110(,)i j ,则在余下的0元素中220(,)i j 的0消耗数为1q -或2q -,必为最小,应予与分配.反之也是,因此这种情况两者应同时分配.(3)0消耗数相同但互不影响,此时必为下图所示:11220(,)0(,)i j ij此时若先分配110(,)i j ,则在余下的0元素中,220(,)i j 的0消耗必为最少,应予与分配,反之也是.这种情况可将它们同时分配.综合上述三种情况,当遇到0消耗数相同的0元素时,如果它们不在同一行同一列,可以将其同时分配;如果在同一行同一列上,可将该行或该列分配,分配数加1,具体分配视其它0元素分配结果而定.3.4.2 对角线法匈牙利算法的实质就是寻找n 个分布在不同行不同列的零元素,而匈牙利算法本身计算过程较复杂,下面给出一种使系数矩阵对角线为零的算法——对角线法.基本步骤:第一步:变换系数矩阵使每行每列都出现零元素,同匈牙利算法第一步.第二步:进行行排序,即(1)在变换后的系数矩阵()ij b 的第j 列元素中(1,2,,)j n =,从第,1,,j j n +行中选取最小元素,记为0b i j .(2)将0i 行元素与j 行进行交换.通过步骤二可使每列中的零元素或最小元素尽量出现在对角线上.若这样选取的最小元素有两个以上时,则取这些最小元素所在行中第n 个元素大者所对应的元素为最小元素;若第n 个元素也相同,则取第1n -个元素中大者对应的元素为最小元素,以此类推;若这些最小元素后各行对应元素都相同,则取这些最小元素所在行中第1j -个元素小者对应元素为最小元素;若第1j -个元素相同,则取再前一个元素中小者对应元素为最小元素,以此类推.若这些最小元素所在行的对应元素均相同,则可任选一最小元素所在行与第j 行元素交换.第三步:检验——若0ii b =(1,2,,)i n =,则以得最优解,过程结束.否则进行第四步.第四步:进行行排序,排序过程类似于第二步,只须将第二步中的“列”改为“行”.而“行”改为“列”,“后”改为“下”,“前”改为“上”即可.第五步:若0ii b =(1,2,,)i n =,则已得到最优解,迭代过程停止,否则进行第六步.第六步:,1,2,,ij ij ii b b b j n =-=. 第七步:若0,1,2,,ij b j n ≥=,则返回第五步.否则,若0ik b <,则令,1,2,,jk jk ik b b b j n =-=,返回第一步.从上述过程来看,整个过程包括两个基本部分,第一部分是通过一系列矩阵的行列变换,把零元素排列在对角线上;第二部分是最解的检验,即所有0ii b =时,已得到最优解.对于此算法的收敛性分析,文献[]9中给出了几个定理,并进行了证明,可以看出此改进算法的收敛性极好,可以有效地解决指派问题.4 对最大化指派问题的匈牙利解法的一点改进对最大化的指派问题的解法,一般方法是找出系数矩阵()ij c 中的最大元素,即1nij i M max c ==∑),,2,1(n j =,做矩阵B ,其元素为),,2,1;,,2,1(n j n i b ij ==且ij ij c M b -=,然后利用匈牙利解法最小化求B 的最优解.下面我们在此基础上对其提出一点改进,直接在原系数矩阵上进行修改.修改的原则是:在最小化问题中,系数矩阵不能出现负数,在最大化问题中,修改后的不能出现正元素,可出现零.基本步骤:第一步:修改系数矩阵.。

匈牙利指派1

匈牙利指派1

一、指派模型许多管理部门可能经常面临这样的问题:有若干项任务需要完成,又有若干对象能够完成其中的每项任务。

由于每个对象的特点与能力不同,完成各项任务的效益也各不同。

又因任务性质的要求和管理上的需要等,每项任务只能由一人完成。

则应如何分配人员去完成所有任务,能使完成各项任务的总效益最佳?这类问题就称之为指派模型或分配模型。

当岗位数(m)与人员数(n)相等时,指派模型为:C=(cij )为n阶方阵,称为指派模型(P)的效益矩阵;若xij0为(P)的最优解,则n阶方阵X=(xij0)称为(P)的最优解方阵。

事实上方阵X的每一行、每一列只有一个“1”。

二、匈牙利方法解决指派模型的方法是匈牙利数学家考尼格(konig)提出的,因此得名匈牙利法(The Hungarian Method of Assignment)。

(一)匈牙利方法基本原理匈牙利法基于下面两个性质:[性质5.2.1]设一个指派模型的效益矩阵为(cij ). 若(cij)的第i行元素均减去一个常数ui (i=1,2,…,n),第j列元素均减去一个常数vj(j=1,2,…,n),得到一个新的效益矩阵(bij ),其中每一元素bij=cij-ui-vj,则以(bij )为效益矩阵的指派模型的最优解也是以(cij)为效益矩阵的指派模型的最优解。

如果取ui (I=1,2,…,n)为第i行元素的最小值,vj(j=1,2,…,n)为第j行元素的最小值,则得到新的效益矩阵(bij)为非负矩阵(即所有元去均为非负数)。

性质3.1说明可以通过求以(bij)为效益矩阵的指派模型的最优解得到原指派模型的最优解。

直观地讲,求指派模型的最优解方阵就是在效益矩阵中找到n个元素,要求在不同行、不同列上,使这些元素之和最小。

将这n个元素所在位置赋值为“1”,其他元素均为“0”,就得到最优解方阵。

效益矩阵(bij)中每行、每列的最小元素为“0”,因此,求指派模型(P)的最优解又转化为在矩阵(bij)中找出n个在不同行、不同列上的“0”元素,这就是匈牙利法的基本思路。

第五讲 分配问题(指派问题)与匈牙利法

第五讲 分配问题(指派问题)与匈牙利法

n 件工作
y1 , y2 , … , yn 。 已 知 工 人 xi 完 成 工 作 yj 所 需 时 间 为 cij
分派方案满足下述两个条件: 分派方案满足下述两个条件:
1.任一个工人都不能去做两件或两件以上的工作 1.任一个工人都不能去做两件或两件以上的工作 2.任一件工作都不能同时接受两个及以上的工人去做 2.任一件工作都不能同时接受两个及以上的工人去做
min
4 7 6 6 6
8 7 15 12 4 0 4 3 11 8 0 3 0 11 8 9 17 14 10 7 0 2 10 7 3 0 1 7 7 3 9 12 8 7 6 ⇒ 0 3 6 2 1 ⇒ 0 2 3 2 1 7 14 6 10 6 0 1 8 0 4 0 0 5 0 4 0 3 6 4 0 0 2 3 4 0 9 12 10 6 6 min 0 1 3 0 0
5 0 2 0 2 3 0 0 0 10 5 7 9 8 0 0 0 6 3 6
9 8 5 4 0
尝试对所有零元素做标记,确定独立零元素。 尝试对所有零元素做标记,确定独立零元素。 标记 独立零元素
(2)逐列检验 )
与行检验类似:对只有一个未标记的零元素的列 用记号O将该 与行检验类似:对只有一个未标记的零元素的列,用记号 将该 零元素圈起,然后将被圈起的零元素所在行 零元素圈起,然后将被圈起的零元素所在行的其他未标记的零元 素用记号/划去 划去。 素用记号 划去。 重复列检验,直到没有未被标记的零元素或至少有两个未被标记 没有未被标记的零元素 重复列检验,直到没有未被标记的零元素或 的零元素为止。 的零元素为止。
分配问题(指派问题) 第5讲 分配问题(指派问题)与匈牙利法

运筹学匈牙利法

运筹学匈牙利法

满足约束条件(是∨ 否×) (1) (2) (3) (4)
过滤 条件
√√√ √ 0
√√√ √ 5
-2
3
3
√√√ √ 8
1
6
max Z 3 x 1 2 x 2 5 x 3
x 1 2 x 2 x 3 2 (1)
x1 x1
4
x2 x2
x3
4 3
(2) (3)
4 x 2 x 3 6 (4)
1 0 7
0 4 1
4
3
0 √

找(1到)对3没个有独独立立零零元元素素,的但行m打√= 号3 <;n = 4 (2)对已打√号的行中所有含划掉零元素的列打√号;
(3)再对打有√号的列中含独立零元素的行打√号;
(4)重复(2),(3)直到得不出新的打√号的行、列为止;
(5)对没有打√号的行画横线,有打√号的列画纵线,这就 得到覆盖所有零元素的最少直线数
xij
n
0不分配i个 第人取完j成 项第 任务
x ij 1
( i 1 .2 . .n )
j1
n
x ij 1 ( j 1 . 2 . . n )
i1
x ij 0 或 1( i , j 1 . 2 . . n )
典型问题
例1:有一份说明书,要分别译成英、日、 德、俄四种文字,交与甲、乙、丙、丁四个 人去完成,因各人专长不同,他们完成翻译 不同文字所需要的时间(小时)如表所示。 规定每项工作只能交与其中的一个人完成, 每个人只能完成其中的一项工作。
工作 人 甲 乙 丙 丁
译英文 译日文 译德文 译俄文
2 10 15 4 13 14 4 15
97 14 8 16 11 13 9

关于几种不平衡指派问题的修正匈牙利解法

关于几种不平衡指派问题的修正匈牙利解法

关于几种不平衡指派问题的修正匈牙利解法作者:杜金玲;周杰来源:《价值工程》2010年第13期摘要:本文利用实例验证了在用匈牙利算法求解指派问题时,不平衡的指派问题转化为平衡指派问题的必要性;总结对于几种不平衡的指派问题转化为平衡指派问题的方法,从理论上作出解释,并给出了相应的例题,特别对于任务数多于人数的指派问题,本文提出了新的更有针对性的转化方法,如“一人化成p人法”、“加边补小法”、“加边补零(M)法”等。

Abstract: In this paper, the necessity of the transformation of the unbalanced assignment problem to the balanced assignment problem is tested with examples. The methods of transformation are summarized and explained from theory; and gived an example of the problem, especially, the methods of the transformation are brought up. For example, the method of "one to p persons", the method of "the adding rows with zero or M",the method of "the adding rows with min" and so on.关键词:指派问题;匈牙利算法;一人化成p人法;加边补小法;加边补零(M)法Key words: assignment problem;the Hungaryalgorithm;the method of "one to p persons";the method of "the adding rows with min";the method of “the adding rows with zero or M”中图分类号:TP301.6文献标识码:A文章编号:1006-4311(2010)13-0120-030引言在实际生活和生产安排中,经常遇到要指派不同的工作人员去完成不同的工作。

匈牙利算法在企业员工指派问题的应用(最终版)

匈牙利算法在企业员工指派问题的应用(最终版)

闽江学院本科毕业论文题目匈牙利算法在企业员工指派问题的应用学生姓名张雯学号************系别数学系年级2008级专业数学与应用数学指导教师林耿职称讲师完成日期2012年4月10日闽江学院毕业论文诚信声明书本人郑重声明:兹提交的毕业论文(设计)《匈牙利算法在企业员工指派问题的应用》,是本人在指导老师林耿的指导下独立研究、撰写的成果;论文(设计)未剽窃、抄袭他人的学术观点、思想和成果,未篡改研究数据,论文(设计)中所引用的文字、研究成果均已在论文(设计)中以明确的方式标明;在毕业论文(设计)工作过程中,本人恪守学术规范,遵守学校有关规定,依法享有和承担由此论文(设计)产生的权利和责任.声明人(签名):2012年4月10日摘要在当今社会,竞争无处不在,企业的竞争也是如此.而员工指派问题又是企业不得不面对的问题.因此,企业员工指派问题就显得非常重要了,谁能够在这方面做的好,谁就能在竞争中多一分胜算.企业员工指派问题是指企业安排若干人员去完成若干项任务(任务和人数不一定相等),并且要求完成的效率最高.对于这一问题,匈牙利算法就是一个很好的解法.本文首先给出企业员工指派问题的数学模型,它分为两大类,一类是标准指派问题(即企业指派员工数与任务数相等),另一类是非标准指派问题(即企业指派员工数与任务数不相等),其次,在对匈牙利算法及其原理深入理解的基础上,利用匈牙利算法对企业员工指派问题的数学模型进行求解.其中,用标准的匈牙利算法求解标准的指派问题,对于非标准的指派问题,先把它进行适当的变换,然后用标准的匈牙利算法求解.再次,讲述了匈牙利算法的一些缺点及其改进,把匈牙利算法用C语言表示出来,并把它运用到实际的企业员工指派问题当中.最后,讲述了匈牙利算法的应用推广.关键词:匈牙利算法;员工指派问题;运筹学;效益矩阵AbstractIn modern society, competition exists everywhere, so does the competition among enterprises. Staff assignment is of great importance to enterprises. Those who do well in it will get more chances to win in the competition. Enterprise staff assignment is that enterprises assign a number of employees to accomplish some tasks in high efficiency ( The number of tasks is not necessarily equivalent to that of assigned staff ).To solve this problem, the hungary algorithm is the best choice. In this thesis, the author firstly illustrates the enterprise staff assignment, which includes normal assignment problem and abnormal assignment problem. Secondly, the author solves the enterprise staff assignment with the hungary algorithm in two ways: one is normal hungary algorithm used to solve the normal assignment problem, the other is abnormal hungary algorithm used to solve the abnormal assignment problem. Thirdly, the author points out some defects and offers some improvements of the hungary algorithm, and write it in C language. At last, the author gives some examples of the application of the hungary algorithm.Key words:hungary algorithm ;staff assignment problem; Operations Research; profit matrix目录1. 引言 (1)2.指派问题的数学模型 (1)2.1 指派问题 (1)2.2指派问题的数学模型 (2)3.匈牙利算法的基本原理及解题步骤 (2)3.1 匈牙利算法的基本原理 (2)3.2匈牙利算法的解题步骤 (3)4.匈牙利算法求解员工指派问题的模型假设与符号说明 (3)4.1 匈牙利算法解员工指派问题的模型假设 (3)4.2 符号说明 (4)5.企业员工指派问题的模型建立与求解 (4)5.1标准指派问题(当m=n时,即为每个人都被指派一项任务) (4)5.2非标准指派问题 (6)6.匈牙利算法的缺点、改进以及C语言实现 (12)6.1 匈牙利算法的缺点 (12)6.2 匈牙利算法的改进 (14)6.3 匈牙利算法的C语言实现(附录) (15)7.匈牙利算法的应用推广 (15)8.结束语 (17)参考文献 (18)附录 (19)致谢 (22)匈牙利算法在企业员工指派问题的应用张雯(闽江学院 数学系;福建 福州 350108)1. 引言当今社会,人力资源规划在企业人力资源管理活动中具有重要的地位和作用.人力资源规划是指为实施企业的发展战略,完成企业的生产经营目标,根据企业内外环境和条件的变化,运用科学的方法,使企业的人力资源和需求达到平衡,实现人力资源的合理配置,有效激励员工的过程.而企业员工指派问题在人力资源规划中又是必不可少的,为了使人力资源管理的“大才大用,小才小用,人尽其才,岗得其人,能位匹配”的基本原则[4]得以实现.因此,企业员工指派问题就显得很重要了,而匈牙利算法就是求解人员与工作任务配置合理化、科学化的一个好方法.“匈牙利算法”最早是由匈牙利数学家考尼格(D.Koning )用来求矩阵中0元素的个数的一种方法,由此他证明了“矩阵中独立0元素的最多个数等于能覆盖所有0元素的最少直线数”.[7]1955年由库恩(W.W.Kuhn )在求解著名的指派问题时引用了这一结论,并对具体算法做了改进,仍然称为“匈牙利算法”.解指派问题的匈牙利算法是从这样一个明显的事实出发的:如果效率矩阵的所有元素0ij a ≥,而其中存在一组位于不同行不同列的零元素,则只要令对应于这些零元素位置的1ij x =,其余的0ij x =,则11m m ij ij i j z a x ===∑∑就是问题的最优解.2.指派问题的数学模型2.1 指派问题从运筹学中,我们知道工作中常遇到这样的问题:有m 项任务需要n 个人来承担,每个人都能完成其中的每项任务,只是由于每个人的特点与专长不同,每个人完成各项任务所需的时间、费用或所产生的效益各不相同,又因为任务性质的要求和管理上的需要等原因,每项任务只能由一个人来完成,每个人也只能承担其中的一项任务.问应指派哪个人去完成哪项任务才能使完成各项任务花费的总时间最短或总费用最少,或所产生的总效益最佳.我们把这类最优匹配问题称为指派问题.[10]2.2指派问题的数学模型设用()ij 0,1,2,,C i j n >=表示指派第i 人去完成第j 项任务时所用的时间,定义决策变量1,0ij x ⎧=⎨⎩当指派第i 人去完成第j 项任务时,当不指派第i 人去完成第j 项任务,则指派问题可转化为0-1线性规划问题: i 1111min 1,1,2,,.1,1,2,10,,1,2,,n n ij ijj n ij i n ij i ij Z C x x j n s t x j n x i j n ====⎧=⎪⎪⎪==⎪⎨⎪⎪==⎪⎪==⎩∑∑∑∑或3.匈牙利算法的基本原理及解题步骤3.1 匈牙利算法的基本原理简要地讲,求指派问题的最优解就是要在n 阶系数方阵中找到n 个这样的元素:它们分布在方阵的不同行、不同列上,并且这些元素之和为最小[1].而要使这些元素之和为最小,就要使其中的每一个元素尽可能的小——最好这些元素都是其所在行和列上的最小元素.而指派问题的最优解又有这样的性质(定理1)[2]:如果从分配问题效率矩阵ij C ⎡⎤⎣⎦的一行(列)各元素中分别减去该行(列)的最小元素,得到新的矩阵ij B ⎡⎤⎣⎦为效率矩阵求得的最优解和用原效率矩阵ij C ⎡⎤⎣⎦求得的最优解相同.由于新矩阵ij B ⎡⎤⎣⎦中每行、每列的最小元素均为“0”,因此,求原指派问题的最优解就转化为在新矩阵ij B ⎡⎤⎣⎦中找出n 个分布在不同行、不同列上的“0”元素(简称为独立0元素[8]),这些独立0元素就是新矩阵ij B ⎡⎤⎣⎦的最优解,找到新矩阵的最优解也就找到原矩阵的最优解了.要在矩阵ij B ⎡⎤⎣⎦中找到几个分布在不同行、不同列上的“0”元素,前提首先是在矩阵ij B ⎡⎤⎣⎦中确定存在几个这样的“0”元素.那么,如何判断在矩阵ij B ⎡⎤⎣⎦中是否存在n 个这样的独立0元素呢?考尼格(Koning )证明了这样一个定理(定理2)[3]:“覆盖所有’0’元素的最少直线数等于矩阵中独立0元素的最多个数.”利用这一定理,就可以通过寻找“能覆盖所有0元素的最少直线”来确定矩阵ij B ⎡⎤⎣⎦中独立0元素的具体数量。

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

匈牙利法解决人数与任务数不等的指派问题于凯重庆科技学院经济管理学院物流专业重庆沙坪坝区摘要:本文将讨论运筹学中的指派问题,而且属于非标准指派问题,即人数与任务数不相等的指派问题,应当视为一个多目标决策问题,首先要求指派给个人任务数目两两之间相差不能超过1,其次要求所需总时间最少,并且给出了该类问题的求解方法。

关键词:运筹学指派问题匈牙利算法系数矩阵解矩阵引言:在日常的生产生活中常遇到这样的问题:有n项任务,有n个人员可以去承担这n 项任务,但由于每位人员的特点与专长不同,各对象完成各项任务所用的时间费用或效益不同;有因任务性质要求和管理上需要等原因,每项任务只能由一个人员承担来完成,这就涉及到应该指派哪个人员去完成哪项任务,才能使完成n项任务花费总时间最短,总费用最少,产生的总效益最佳。

我们把这类最优匹配问题称为指派问题或分配问题。

1.指派问题的解法——匈牙利法早在1955年库恩(,该方法是以匈牙利数学家康尼格(koning)提出的一个关于矩阵中0元素的定理为基础,因此得名匈牙利法(The Hungonrian Method of Assignment)1.1匈牙利解法的基本原理和解题思路直观的讲,求指派问题的最优方案就是要在n阶系数矩阵中找出n个分布于不用行不同列的元素使得他们的和最小。

而指派问题的最优解又有这样的性质:若从系数矩阵C(ij)的一行(列)各元素都减去该行(列)的最小元素,得到新矩阵CB(ij),那么以CB(ij)为系数矩阵求得的最优解和原系数矩阵C(ij)求得的最优解相同。

由于经过初等变换得到的新矩阵CB(ij)中每行(列)的最小元素均为“○”,因此求原指派问题C(ij)的最优方案就等于在新矩阵CB(ij)中找出n个分布于不同行不同列的“○”元素(简称为“独立○元素”),这些独立○元素就是CB(ij)的最优解,同时与其对应的原系数矩阵的最优解。

1.2匈牙利法的具体步骤第一步:使指派问题的系数矩阵经过变换在各行各列中都出现○元素。

(1)先将系数矩阵的每行中的每个元素减去本行中的最小元素。

(2)再从系数矩阵的每列中的每个元素减去本列的最小元素。

第二步:进行试指派,以寻求最优解。

(1)从含有○元素个数最少的行(列)开始,给某个○元素加圈,记作◎,然后划去与◎所在同行(列)杂其他○元素,记作∅。

(注:从含元素少的开始标记◎的原则)(2)重复进行(1)的操作,直到所有○元素都记作◎或∅,称作“礼让原则”。

(3)按以上方法操作后,若◎元素数目m’等于矩阵阶数n,那么指派问题最优解已得到。

若m﹤n,则转入下一步。

第三步:做最少的直线覆盖所有的○元素,以确定该系数矩阵中能找到最多的独立○元素。

(1)对没有◎的行打√号;(2)对已打√号的行中含有∅元素所在的列打√号;(3)对已打√号的列中含有◎元素所在的行打√号;(4)重复(2)、(3)直到得不到新√号的行和列为止;(5)对没有√号的行画一横线,有√号的列画一竖线。

如此便可以覆盖所有的○元素(注:这里的○元素是指◎或∅)第四步:以上画线的目的是为了选取新的最小元素,以便增加○元素,最后达到◎元素个数m=n 。

(1) 为此在没有被直线覆盖的所有元素中找出最小元素,然后将没有被直线覆盖的每个元素都减去该最小元素,同时把打“√”的列中的每个元素加上该最小元素,以保证原○元素不变。

(2) 再按照第二步原则进行选取独立○元素。

若得到n 个◎元素,则已是该矩阵的最优解(同时也是原矩阵的最优解);否则,回到第三步重复进行。

第五步:在第四步得到的最优解情况下的系数矩阵变换为解矩阵。

将系数矩阵中的所有◎都变成元素1,而其他元素均变成0元素,得到的新矩阵便为原指派问题的解矩阵,根据解矩阵中1元素所在的行、列数,去确定派哪个人员去做哪项任务。

(注:在解矩阵(ij X )中,Xij=0元素表示不派第i 个人去完成第j 项任务,Xij=1表示指派第i 个人去完成第j 项任务)需要对匈牙利法的第二步画∅行的说明:当指派问题的系数矩阵经过变换得到了同行和同列中都有两个或两个以上○元素时,这时可以任选一行(列)中某个○元素,再划去同行(列)其他○元素。

这时会出现多重优化解,对应着多种最优的指派方案。

如果出现此种情况,各位读者不必疑惑。

2. 极大化指派问题以上讨论的均限于极小化的指派问题,对于极大化的问题,即求ijijMaxZ C X=∑∑(例如:如何安排n 个工程队去完成n 个项目才能使总收益最大) 以下是解决该问题的原理部分:可令 ij ij b M c =-(其中M 是原系数矩阵(ij c )中最大的元素)则原系数矩阵变换成新矩阵(ij b ),这时ij b ≥0,符合匈牙利法的条件,而且等式()ij ijijijijijb x Mc x =-∑∑∑∑恒成立,所以,当新的系数矩阵取到极小化指派问题的解矩阵时,就对应着原问题的最大化指派方案的最优指派方案。

3. 人员数不等于任务数的指派问题:以上我们讨论的问题均是标准型指派问题,但在实际生活中可能出现人手不够或者任务较少人员较多的情况,该类问题当然也可以利用匈牙利法求解。

从以上讨论了匈牙利法的原理可知匈牙利法适用于系数矩阵为方阵的指派问题,从这个基本原则出发,给系数矩阵并非方阵的问题,添加虚拟人员或任务使其构成标准型指派问题,从而进一步利用匈牙利法求解最优解,而且构造的方阵的最优解同时也是原问题的最优解。

3.1 人数大于任务数的指派问题下面结合例子说明人数m 大于任务数n 的指派问题的解法。

例1:设有三项任务1T 、2T 、3T ,可以安排的的人为1M 、2M 、3M 、4M 去完成,各人完成各项工作所花费的时间ij c 如表3.1所示,问应如何指派所用的总时间解:第一步:添加M-N 个虚拟任务,并赋予各人完成这些虚拟任务的时间为0.此时将问题转化为人数与任务相等的指派问题(注:本题M=4,N=3) 第二步:运用匈牙利法求解215130104140()91416078110ij C ⎛⎫ ⎪ ⎪= ⎪ ⎪⎝⎭→011208030710505400⎛⎫ ⎪ ⎪ ⎪ ⎪⎝⎭→min 2=−−−→已找出四个独立元素。

故例1的解矩阵为10000100()00010010ij X ⎛⎫⎪⎪= ⎪ ⎪⎝⎭所以最优指派方案为1M 完成1T ,2M 完成2T ,4M 完成3T ,而3M 没有任务。

花费总时间最少为min z=11C +22C +43C =2+4+11=17(小时)4. 任务数大于人数的指派问题下面结合例2说明任务数n 大于人数m 的指派问题的解法。

、例2 设有四项任务1T 、2T 、3T 、4T ,可以安排三个人1M 、2M 、3M 去完成,各人完成各项工作所需的时间ij c 如表4.1所示,问应该指派哪个人去完成哪项任务所用的总时间最少?解:第一步:添加N-M 个虚拟的人员,并赋予各虚拟人员完成各项任务所用的时间为+。

此时问题转化成人员与任务数相等的指派问题。

构造系数矩阵ij 0000000000000000000000000000=000000000000000000000000000000X ⎛⎫⎛⎫⎪⎪⎪ ⎪ ⎪ ⎪⎪⎪ ⎪ ⎪ ⎪ ⎪⎪ ⎪⎪ ⎪⎝⎭⎝⎭11111010()或111111第二步:运用匈牙利法求解2151341041415()9141613ij C ⎛⎫⎪⎪= ⎪ ⎪∞∞∞∞⎝⎭01311260101105740000⎛⎫⎪⎪→→ ⎪ ⎪⎝⎭min 2=−−−→119810113522∅⎛⎫ ⎪ ⎪ ⎪ ⎪∅∅⎝⎭◎◎◎◎=故解矩阵()ij C 的解矩阵为00010100()10000010ij X ⎛⎫⎪⎪= ⎪⎪⎝⎭对应的原指派问题的方案为:1M 完成4T ,2M 完成2T ,3M 完成1T 。

而任务3T 没有分配,为了使四项任务都完成,需要进行二次指派。

原系数矩阵为21513410414159141613⎛⎫⎪⎪ ⎪⎝⎭,显然3T 列最小元素位于第一行,即3T 任务让1M 做。

所以最终指派方案为1M 完成3T 、4T 两项,2M 完成2T ,3M 完成1T 。

所需要的总时间为min z=14223113C C C C +++=4+4+9+13=30 (小时)例3.(2006年北京大学考研题)某房地产公司计划在一住宅小区建5栋不同型号的楼房j B (j=1、2、···5),现有三个工程队i A (i=1、2、3),允许每个工程队承接1—2栋楼。

招投标得出工程队i A (i=1、2、3)对新楼j B (j=1、2、···5)的预算费用为ij C ,见表4-2,求总费用最小的分派方案。

各完成1项项目的最优费用,还有2项任务没有工程队承接。

接下来还要添加1项虚拟任务,然后进行第二次指派,确定第一次指派剩下来的2项任务由哪两个工程队再次承接。

考虑到以上做法较为繁琐,我们寻求一次性寻找出最优指派方案的解法。

由施工队数3与项目数5的关系考虑到,只有1个施工队承担单个任务,而其他两个施工队均承担2项项目。

因此我们可以添加一个虚拟项目,以便让每个工程队都可以承担2项项目。

但又考虑到要一次性指派完成求解,则不能有虚拟工程队,而且利用匈牙利法一定要是方阵才行。

于是构造如下新系数矩阵6*6[]ij C c =。

解:第一步:将工程队重排一次形成6支工程队,添加一项虚拟项目。

最终形成方阵。

构造的系数矩阵=0=ij ij c c ∞或第二步:匈牙利法求解该矩阵的指派问题38715110791014120691312170[]38715110791014120691312170ij c ⎛⎫⎪⎪ ⎪=⎪⎪ ⎪⎪⎪⎝⎭min 1=−−−→413222541322255∅∅∅⎛⎫⎪∅∅ ⎪ ⎪∅∅⎪∅∅∅ ⎪ ⎪∅∅ ⎪ ⎪∅∅⎝⎭◎◎◎5◎◎◎413222541322255∅∅∅⎛⎫ ⎪∅∅⎪ ⎪∅∅ ⎪∅∅∅ ⎪ ⎪∅∅ ⎪ ⎪∅∅⎝⎭◎◎◎5或◎◎◎对应的两个解矩阵为ij =X ()0000000000000000000000000000000000000000000000000000000000⎛⎫⎛⎫⎪⎪⎪ ⎪ ⎪ ⎪⎪⎪ ⎪ ⎪ ⎪ ⎪⎪ ⎪⎪ ⎪⎝⎭⎝⎭11111010或111111则原指派问题最佳的指派方案为113A →B B 和,225A →B B 和,34A →B 。

第二种方案:113A →B B 和,25A →B ,324A →B B 和。

其总费用最小为min z=3+7+12+9+12=43 (货币单位)5. 结束语在整篇论文中主要是讨论如何用匈牙利算法来求解最优指派的问题。

而且重点是人数与任务不等的问题的解决,更重要的方面是引进虚拟任务或人数构造方阵的思想。

相关文档
最新文档