原文视频:https://www.bilibili.com/video/BV194411y7sA?p=19
匈牙利法
第一步:
(1)写出工作效率矩阵
先找出行最小值,并用每个数减掉,再找出列最小值,并进一步减去
(2)需要找出N个独立的“0元素”,满足 从行上看,只有1个0,从列上看,也只有1个0,此时令这些独立的0取1,其余元素取0,得到新的矩阵
一般只适用于 小于等于4的情况
第二步:
(1)扫描每一行,找仅含一个“0元素” 所在的行(记做
),然后对该列其他“0元素”记做(
)(同一行或列只能取一个数)
(2)扫描每一列,同样寻找 仅含一个“0元素” 所在的列(记做
),然后对该列其他“0元素”记做(
)
(1)(2)步骤每次仅找一行/一列
循环(1)(2),知道所有“0元素”都为 和
。 结束
如果出现行/列中包含 2 个 0 , 我们就需要人为指派:
(1)选 0 的个数最少的行开始
(2) 观察列,哪一列的 0 少,就选哪一列(多数礼让少数原则)
的个数m 与 矩阵的阶数 n ,满足
为最优解
若 (第三步)
第三步:划线法
(1)对没有
的行,做标记 √
(2) 找到(1)中的 √ 行中的
,并对
所在列 , 做标记√
(3) 对 (2)中 √ 列中的
所在的行, 做标记√
重复循环(2)(3) 知道再也不能 √
(4) 对没有 √ 的行,画一条横线; 对 √ 的列,画一条竖线
记画出的直线数 L, 若 L< n , 说明要对矩阵进行处理(第四步)
若 L= n, 说明(第二步)有问题,需要重新对第二步重新指派
第四步:
(1)从划线矩阵中,把被线划的元素全拿掉,得到一个新的小矩阵,并找到最小元素
(2)把划线矩阵,回归到初始形态(本质:对非零元素进行调整)
1. √ 行减去 最小元素
2. √ 列加上 最小元素
3. 原来的“0元素” 不进行运算
得到的新矩阵,作为指派问题的起点,重新开始第二步运算
如果问题是 max Z?
令 M 理论上是一个很大很大的数(一般令 M 为
中最大的那一个)
从而求