指派问题的匈牙利解法

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

指派问题的匈牙利解法
1、 把各行元素分别减去本行元素的最小值;然后在此基础上再把每列元素减去本列中的最小值。

⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⇒⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛0 4 3 2 04 0 5 0 01 2 3 2 03 7 7 1 08 11 0 3 06 10 12 9 610 6 14 7 67 8 12 9 610
14 17 9 712 15 7 8 4 此时每行及每列中肯定都有0元素了。

2、 确定独立零元素,并作标记。

(1)、首先逐行判断是否有含有独立0元素的行,如果有,则按行继续处理;如没有,则要逐列判断是否有含有独立0元素的列,若有,则按列继续处理。

若既没有含有独立0元素的行,也没有含有独立0元素的列,则仍然按行继续处理。

(2)在按行处理时,若某行有独立0元素,把该0元素标记为a ,把该0所在的列中的其余0元素标记为b ;否则,暂时越过本行,处理后面的行。

把所有含有独立0元素的行处理完毕后,再回来处理含有2个以及2个以上的0元素的行:任选一个0做a 标记,再把该0所在行中的其余0元素及所在列中的其余0元素都标记为b 。

(3)在按列处理时,若某列有独立0元素,把该0元素标记为a ,把该0所在的行中的其余0元素标记为b ;否则,暂时越过本列,处理后面的列。

把所有含有独立0元素的列处理完毕后,再回来处理含有2个以及2个以上的0元素的列:任选一个0做a 标记,再把该0所在列中的其余0元素及所在行中的其余0元素都标记为b 。

(4)、重复上述过程,即得到独立零元素(标记a 的“0”)
⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛a b b a b b a 0
4 3 2 04 0
5 0 01 2 3 2 03
7 7 1 08 11 0 3 0a b 3、 若独立零元素等于矩阵阶数,则已经得到最优解,若小于矩阵阶数,则继续以下步骤:
(1)、对没有标记a 的行作标记c
(2)、在已作标记c 的行中,对标记b 所在列作标记c
(3)、在已作标记c 的列中,对标记a 所在的行作标记c
(4)、对没有标记c 的行划线,对有标记c 的列划线
4、 在未被直线覆盖的所有元素中找出一个最小元素(Xmin ),未被直线覆盖的行(或列)中所有元素都减去这个数。

(注:若未被直线覆盖部分是行数<列数,则是按行减,反之则按列)。

⎪⎪⎪⎪⎪⎪⎭
⎫ ⎝⎛--04320405000121126601
811030 5、 这样必然出现负元素,所以对负元素所在列(或行)中各元素都加上这一最小元素(Xmin )以消除负数。

这样,再返回步骤2,确定独立零元素个数。

重复上述操作,直到找出最优解。

\/
⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛04320405001232037710811030 /
/ / / / \/ \/
特殊问题:
1、
若人数和工作数不等,则用“0
”来补全空位 2、 若一个人可作几件事,则可化为相同的“几个人”来接受指派,费用系数相同。

3、 ⎪⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛0 4 3 2 14 0 5 0 1 0 1 2 102 6 6 0 08 11 0 3 0/ / /。

相关文档
最新文档