文章目录

  • 一、克尼格定理
  • 二、匈牙利法引入
  • 三、指派问题求解步骤
  • 四、匈牙利法示例 1
    • 1、第一步 : 使行列出现 000 元素示例
    • 2、第二步 : 试指派操作示例 ( 方法一 :克尼格定理 )
    • 3、打 √ ( 方法二 : 直线覆盖 )
    • 4、直线覆盖 ( 方法二 : 直线覆盖 )
  • 五、匈牙利法示例 2
    • 1、第一步 : 变换系数矩阵 ( 每行每列都出现 0 元素 )
    • 2、第二步 : 试指派 ( 找独立 0 元素 )
  • 六、匈牙利法示例 3
    • 1、使用匈牙利法求解下面的指派问题
    • 2、第一步 : 变换系数矩阵 ( 每行每列都出现 0 元素 )
    • 3、第二步 : 试指派 ( 找独立 0 元素 )
    • 4、第二步 : 试指派 ( 打 √ )
    • 5、第二步 : 试指派 ( 直线覆盖 )
    • 6、第二步 : 试指派 ( 第二轮 )

一、克尼格定理


匈牙利法 主要用于解决指派问题 , 其主要依据是 克尼格定理 ;

指派问题 参考 【运筹学】整数规划 ( 整数规划求解方法 | 指派问题 ) 博客 ;

克尼格定理 :

分配问题 效率矩阵 [aij][a_{ij}][aij​] 中 ,

每一行元素 中加上或减去一个常数 uiu_iui​ ,

每一列元素 中加上或减去一个常数 vjv_jvj​ ,

得到新的效率矩阵 [bij][b_{ij}][bij​] ,

两个效率矩阵 [aij][a_{ij}][aij​] 与 [bij][b_{ij}][bij​] 分配问题的 最优解相同 ;

克尼格定理示例 : 指派问题 , 给 444 个人指派 444 个岗位 , 每个人在不同的岗位产生的利润不同 , 如何安排使得利润最高 ;

AAA BBB CCC DDD
858585 929292 737373 909090
959595 878787 787878 959595
828282 838383 797979 909090
868686 909090 808080 888888

给 甲 对应的行加上所有表格都加上 555 , 变为如下表格 ,

AAA BBB CCC DDD
909090 979797 787878 959595
959595 878787 787878 959595
828282 838383 797979 909090
868686 909090 808080 888888

甲 今天状态好 , 不管四个工作 , 哪个分配给 甲 , 其产生的利润都会增加 ;

最终计算出来的指派问题的最优解是不变的 ;

二、匈牙利法引入


给 甲乙丙丁 四人分配 ABCDABCDABCD 四项工作 , 每人做每项工作的耗时如下 , 如何指派问题使得耗时最小 ;

AAA BBB CCC DDD
666 777 111111 222
444 555 999 888
333 111 101010 444
555 999 888 222

分派任务时 , 给每个人分配其所用时间最小的工作 ,

  • 给 甲 分配 DDD 任务 , 其只用 2 时间即可完成该任务 , 耗时最小 ;
  • 给 乙 分配 AAA 任务 , 其只用 4 时间即可完成该任务 , 耗时最小 ;
  • 给 丙 分配 BBB 任务 , 其只用 1 时间即可完成该任务 , 耗时最小 ;
  • 给 丁 分配 CCC 任务 , ABDABDABD 任务已经分配给了其它人 , 只能给 丁 分配 CCC 任务 ;

如果 为每个人选择了耗时最小的任务 , 正好位于不同行 , 不同列 , 那么当前的指派 , 就是该问题的 最优解 ;

但是上述示例中 , 给 丁 分配任务时 , 合适的任务都分配给了甲乙丙 , 只能分配 CCC 任务 ;

这时就需要讨论给 丁 指派 CCC 任务是否是最优的 ;

这里就需要 引入 匈牙利法 解决上述问题 ;

三、指派问题求解步骤


指派问题求解步骤 :

1 . 使行列出现 000 元素 : 指派问题系数矩阵 (cij)(c_{ij})(cij​) 变换为 (bij)(b_{ij})(bij​) 系数矩阵 , 在 (bij)(b_{ij})(bij​) 矩阵中 每行 每列 都出现 000 元素 ;

  • 每行都出现 000 元素 : (cij)(c_{ij})(cij​) 系数矩阵中 , 每行都 减去该行最小元素 ;

  • 每列都出现 000 元素 : 在上述变换的基础上 , 每列元素中 减去该列最小元素 ;

注意必须先变行 , 然后再变列 , 行列不能同时进行改变 ; 否则矩阵中会出现负数 , 该矩阵中 不能出现负数 ;

2 . 试指派 : 进行尝试指派 , 寻求最优解 ;

在 (bij)(b_{ij})(bij​) 系数矩阵 中找到尽可能多的 独立 000 元素 , 如果能找到 nnn 个独立 000 元素 , 以这 nnn 个独立 000 元素对应解矩阵 (xij)(x_{ij})(xij​) 中的元素为 111 , 其余元素为 000 , 这样就得到最优解 ;

四、匈牙利法示例 1


1、第一步 : 使行列出现 000 元素示例

上一篇博客 【运筹学】匈牙利法 ( 克尼格定理 | 匈牙利法引入 ) 中的指派问题 :

AAA BBB CCC DDD
666 777 111111 222
444 555 999 888
333 111 101010 444
555 999 888 222

系数矩阵 (cij)=[671124598311045982](c_{ij}) =\begin{bmatrix} & 6 & 7 & 11 & 2 & \\\\ & 4 & 5 & 9 & 8 & \\\\ & 3 & 1 & 10 & 4 & \\\\ & 5 & 9 & 8 & 2 & \\ \end{bmatrix}(cij​)=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡​​6435​7519​119108​2842​​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤​

使每行都出现 000 元素 : (cij)(c_{ij})(cij​) 系数矩阵中 , 每行都 减去该行最小元素 ;

第 111 行减去 222 ,
第 222 行减去 444 ,
第 333 行减去 111 ,
第 444 行减去 222 ,

得到新的系数矩阵 系数矩阵 [4590015420933760]\begin{bmatrix} & 4 & 5 & 9 & 0 & \\\\ & 0 & 1 & 5 & 4 & \\\\ & 2 & 0 & 9 & 3 & \\\\ & 3 & 7 & 6 & 0 & \\ \end{bmatrix}⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡​​4023​5107​9596​0430​​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤​

每列都出现 000 元素 : 在上述变换的基础上 , 每列元素中 减去该列最小元素 ; 观察矩阵后发现 , 只有第三列没有 000 元素 , 这里将第 333 列 , 都减去最小值 555 , 得到如下矩阵 :

(bij)=[4540010420433710](b_{ij}) = \begin{bmatrix} & 4 & 5 & 4 & 0 & \\\\ & 0 & 1 & 0 & 4 & \\\\ & 2 & 0 & 4 & 3 & \\\\ & 3 & 7 & 1 & 0 & \\ \end{bmatrix}(bij​)=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡​​4023​5107​4041​0430​​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤​

这样就得到每行每列都有 000 元素的矩阵 ;

2、第二步 : 试指派操作示例 ( 方法一 :克尼格定理 )

在 【运筹学】匈牙利法 ( 匈牙利法步骤 | 第一步 : 使行列出现 0 元素示例 ) 博客示例基础上 , 已经得到了行列都有 000 元素的系数矩阵 :

(bij)=[4540010420433710](b_{ij}) = \begin{bmatrix} & 4 & 5 & 4 & 0 & \\\\ & 0 & 1 & 0 & 4 & \\\\ & 2 & 0 & 4 & 3 & \\\\ & 3 & 7 & 1 & 0 & \\ \end{bmatrix}(bij​)=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡​​4023​5107​4041​0430​​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤​

下面进行试指派操作 , 试指派就是找独立 000 元素 , 独立 000 元素就是位于不同行不同列的 000 元素 ;

第 111 行只有 111 个 000 , 选第 444 个 ; 每行每列只能选择 111 个 , 第 444 行第 444 列的 000 元素就不能再用了 ;

第 333 行只有 111 个 000 , 选第 222 个 ;

第 222 行有 222 个 000 , 都可以选择 , 这里选择第 111 个 ;

最终试指派结果 :

上面只找到了 333 个独立的 000 元素 , 应该找出 444 个独立 000 元素 ;

调整上述系数矩阵 (bij)(b_{ij})(bij​) , 每行每列同时增加或减去一个数 , 且不能出现负数 ;

第 444 行都减去 111 , 得到如下矩阵 :

(bij)=[454001042043260−1](b_{ij}) = \begin{bmatrix} & 4 & 5 & 4 & 0 & \\\\ & 0 & 1 & 0 & 4 & \\\\ & 2 & 0 & 4 & 3 & \\\\ & 2 & 6 & 0 & -1 & \\ \end{bmatrix}(bij​)=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡​​4022​5106​4040​043−1​​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤​

第 444 行第 444 列出现了 −1-1−1 , 这里在将第 444 列都加上 111 , 得到如下矩阵 :

(bij)=[4541010520442600](b_{ij}) = \begin{bmatrix} & 4 & 5 & 4 & 1 & \\\\ & 0 & 1 & 0 & 5 & \\\\ & 2 & 0 & 4 & 4 & \\\\ & 2 & 6 & 0 & 0 & \\ \end{bmatrix}(bij​)=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡​​4022​5106​4040​1540​​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤​

第一行此时没有独立的 000 了 , 第一行再减去 111 , 得到如下矩阵 :

(bij)=[3430010520442600](b_{ij}) = \begin{bmatrix} & 3 & 4 & 3 & 0 & \\\\ & 0 & 1 & 0 & 5 & \\\\ & 2 & 0 & 4 & 4 & \\\\ & 2 & 6 & 0 & 0 & \\ \end{bmatrix}(bij​)=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡​​3022​4106​3040​0540​​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤​

再次进行试指派 , 找到了如下独立 000 元素 ;

在上述没有找到 444 个独立 000 元素后 , 由于在第 444 行没有找到 000 元素 , 开始从第 444 行进行调整 ,

调整时将非 000 的最小值转为 000 , 这样本行就多出一个 000 , 以及负数 , 负数有需要再对应列加上一个值 , 保持矩阵中所有的值都是非负的 ;

3、打 √ ( 方法二 : 直线覆盖 )

分析 【运筹学】匈牙利法 ( 匈牙利法步骤 | 第二步 : 试指派操作示例 ) 博客中试指派调整矩阵的原理 ;

下面的矩阵是完成第一步操作后 , 得到的行列都有 000 的元素的系数矩阵 (bij)(b_{ij})(bij​) :

(bij)=[4540010420433710](b_{ij}) = \begin{bmatrix} & 4 & 5 & 4 & 0 & \\\\ & 0 & 1 & 0 & 4 & \\\\ & 2 & 0 & 4 & 3 & \\\\ & 3 & 7 & 1 & 0 & \\ \end{bmatrix}(bij​)=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡​​4023​5107​4041​0430​​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤​

试指派后的结果如下 :

定位一个没有独立 000 元素的行 : 先对没有 000 元素的行打钩 √ : 第 444 行没有独立 000 元素 , 第 444 行打 √ ;

讨论第 444 行 : 第 444 行没有独立的 000 元素 , 但是有废弃的 000 元素 , 因为在第一步已经保证了每行每列都有 000 元素 ;

在第 444 行 000 元素所在列 , 即第 444 列 , 打 √ ;

讨论第 444 列 : 上述打钩的列中 , 查看是否有 独立的 000 元素 , 如果有对应的行就打 √ ;

第 111 行有独立的 000 元素 , 在第 111 行位置打 √ ;

讨论第 111 行 : 查看第 111 行是否有废弃的 000 元素 , 如果有就继续打 √ , 如果没有就停止 ;

第 111 行没有废弃的 000 元素 , 直接停止 ;

讨论 行 的时候讨论的是 废弃的 000 元素 ,

讨论 列 的时候讨论的是 独立的 000 元素 ;

4、直线覆盖 ( 方法二 : 直线覆盖 )

打 √ 完毕 , 开始讨论覆盖 ,

没有 打 √ 的行划线 , 打 √ 的列划线 , 三条线就将所有的 000 元素覆盖了 ,

在没有被覆盖的元素中 , 找最小的元素 111 , 将没有覆盖的行 −1-1−1 , 覆盖的列 +1+1+1 ; 这里的情况是没有覆盖的行 ;

第 1,41,41,4 行 −1-1−1 ,
第 444 列 +1+1+1 ;

最终得到如下矩阵 :

(bij)=[3430010520442600](b_{ij}) = \begin{bmatrix} & 3 & 4 & 3 & 0 & \\\\ & 0 & 1 & 0 & 5 & \\\\ & 2 & 0 & 4 & 4 & \\\\ & 2 & 6 & 0 & 0 & \\ \end{bmatrix}(bij​)=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡​​3022​4106​3040​0540​​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤​

五、匈牙利法示例 2


四人分别完成四项工作所用时间 :

AAA BBB CCC DDD
222 151515 131313 444
101010 444 141414 151515
999 141414 161616 131313
777 888 111111 999

1、第一步 : 变换系数矩阵 ( 每行每列都出现 0 元素 )

先写出指派问题的系数矩阵 :

(cij)=[2151341041415914161378119](c_{ij}) =\begin{bmatrix} & 2 & 15 & 13 & 4 & \\\\ & 10 & 4 & 14 & 15 & \\\\ & 9 & 14 & 16 & 13 & \\\\ & 7 & 8 & 11 & 9 & \\ \end{bmatrix}(cij​)=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡​​21097​154148​13141611​415139​​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤​

使每行都出现 000 元素 : (cij)(c_{ij})(cij​) 系数矩阵中 , 每行都 减去该行最小元素 ;

  • 第 111 行减去最小值 222 ;
  • 第 222 行减去最小值 444 ;
  • 第 333 行减去最小值 999 ;
  • 第 444 行减去最小值 777 ;

(cij′)=[01311260101105740142](c_{ij}') =\begin{bmatrix} & 0 & 13 & 11 & 2 & \\\\ & 6 & 0 & 10 & 11 & \\\\ & 0 & 5 & 7 & 4 & \\\\ & 0 & 1 & 4 & 2 & \\ \end{bmatrix}(cij′​)=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡​​0600​13051​111074​21142​​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤​

此时发现有两列 , 第 444 列 , 第 555 列 , 没有 000 元素 , 这两列每列都减去最小值 :

  • 第 333 列减去最小值 444 ;
  • 第 444 列减去最小值 222 ;

最终得到行列都有 000 元素的系数矩阵 (bij)(b_{ij})(bij​) :

(bij)=[01370606905320100](b_{ij}) =\begin{bmatrix} & 0 & 13 & 7 & 0 & \\\\ & 6 & 0 & 6 & 9 & \\\\ & 0 & 5 & 3 & 2 & \\\\ & 0 & 1 & 0 & 0 & \\ \end{bmatrix}(bij​)=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡​​0600​13051​7630​0920​​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤​

2、第二步 : 试指派 ( 找独立 0 元素 )

基于上一步的行列都有 000 元素的系数矩阵 ,

(bij)=[01370606905320100](b_{ij}) =\begin{bmatrix} & 0 & 13 & 7 & 0 & \\\\ & 6 & 0 & 6 & 9 & \\\\ & 0 & 5 & 3 & 2 & \\\\ & 0 & 1 & 0 & 0 & \\ \end{bmatrix}(bij​)=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎡​​0600​13051​7630​0920​​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎤​

进行试指派 ;

找出每行的独立 000 元素 ,

优先从唯一选择开始 ,

第 222 行只有 111 个 000 元素 , 该元素是独立 000 元素 ;

第 333 行只有 111 个 000 元素 , 该元素是独立 000 元素 ( 红色矩形框 ) , 位于第 111 列 ; 同时第 111 列中的其它 000 元素标记为 废弃 000 元素 ( 绿色矩形框 );

第 111 行和第 444 行都有多个 000 元素 ;

然后从列里面找独立 000 元素 , 第 111 列 和 第 222 列都已经找到了 000 元素 , 这里看 第 333 列 和 第 444 列 ;

第 333 列有 独立 000 元素 ( 红色矩形框 ) ; 位于第 444 行 , 将第 444 行的其它 000 元素标记为 废弃 000 元素 ( 绿色矩形框 ) ;

第 444 列有 独立 000 元素 ( 红色矩形框 ) ; 位于第 111 行 , 将第 111 行的其它 000 元素标记为 废弃 000 元素 ( 绿色矩形框 ) , 已经标记过了 , 不用再进行标记 ;

这里第一次指派就找到了最优解 ;

六、匈牙利法示例 3


1、使用匈牙利法求解下面的指派问题

四人分别完成四项工作所用时间 :

AAA BBB CCC DDD
777 151515 131313 444
999 444 141414 151515
888 141414 161616 131313
777 888 111111 999
444 888 111111 999

2、第一步 : 变换系数矩阵 ( 每行每列都出现 0 元素 )

先写出指派问题的系数矩阵 :

(cij)=[75981191271198546973696467511](c_{ij}) =\begin{bmatrix} & 7 & 5 & 9 & 8 & 11 & \\\\ & 9 & 12 & 7 & 11 & 9 & \\\\ & 8 & 5 & 4 & 6 & 9 & \\\\ & 7 & 3 & 6 & 9 & 6 & \\\\ & 4 & 6 & 7 & 5 & 11 & \\ \end{bmatrix}(cij​)=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡​​79874​512536​97467​811695​1199611​​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤​

使每行都出现 000 元素 : (cij)(c_{ij})(cij​) 系数矩阵中 , 每行都 减去该行最小元素 ;

  • 第 111 行减去最小值 555 ;
  • 第 222 行减去最小值 777 ;
  • 第 333 行减去最小值 444 ;
  • 第 444 行减去最小值 333 ;
  • 第 555 行减去最小值 444 ;

(cij′)=[2043625042410254036302317](c_{ij}') =\begin{bmatrix} & 2 & 0 & 4 & 3 & 6 & \\\\ & 2 & 5 & 0 & 4 & 2 & \\\\ & 4 & 1 & 0 & 2 & 5 & \\\\ & 4 & 0 & 3 & 6 & 3 & \\\\ & 0 & 2 & 3 & 1 & 7 & \\ \end{bmatrix}(cij′​)=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡​​22440​05102​40033​34261​62537​​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤​

此时发现有两列 , 第 444 列 , 第 555 列 , 没有 000 元素 , 这两列每列都减去最小值 :

  • 第 444 列减去最小值 111 ;
  • 第 555 列减去最小值 222 ;

最终得到行列都有 000 元素的系数矩阵 (bij)(b_{ij})(bij​) :

(bij)=[2042425030410134035102305](b_{ij}) =\begin{bmatrix} & 2 & 0 & 4 & 2 & 4 & \\\\ & 2 & 5 & 0 & 3 & 0 & \\\\ & 4 & 1 & 0 & 1 & 3 & \\\\ & 4 & 0 & 3 & 5 & 1 & \\\\ & 0 & 2 & 3 & 0 & 5 & \\ \end{bmatrix}(bij​)=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡​​22440​05102​40033​23150​40315​​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤​

3、第二步 : 试指派 ( 找独立 0 元素 )

基于上一步的行列都有 000 元素的系数矩阵 ,

(bij)=[2042425030410134035102305](b_{ij}) =\begin{bmatrix} & 2 & 0 & 4 & 2 & 4 & \\\\ & 2 & 5 & 0 & 3 & 0 & \\\\ & 4 & 1 & 0 & 1 & 3 & \\\\ & 4 & 0 & 3 & 5 & 1 & \\\\ & 0 & 2 & 3 & 0 & 5 & \\ \end{bmatrix}(bij​)=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡​​22440​05102​40033​23150​40315​​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤​

进行试指派 ;

找出每行的独立 000 元素 ,

优先从唯一选择开始 ,

第 111 行只有 111 个 000 元素 , 该元素是独立 000 元素 ( 红色矩形框 ) , 位于第 222 列 ;

同时第 222 列中的其它 000 元素标记为 废弃 000 元素 ( 绿色矩形框 );

第 333 行只有 111 个 000 元素 , 该元素是独立 000 元素 ( 红色矩形框 ) , 位于第 333 列 ;

同时第 333 列中的其它 000 元素标记为 废弃 000 元素 ( 绿色矩形框 );

第 222 行中原来有两个 000 元素 , 有一个被标记为 废弃 000 元素 , 因此只剩下一个 000 元素 , 标记为独立 000 元素 ;

第 444 行没有独立 000 元素 , 第 555 行都有多个 000 元素 ;

然后从列里面找独立 000 元素 , 第 2,3,52,3,52,3,5 列都已经找到了 000 元素 , 这里看 第 1,41,41,4 列 ;

第 111 列有 独立 000 元素 ( 红色矩形框 ) ; 位于第 555 行 , 将第 555 行的其它 000 元素标记为 废弃 000 元素 ( 绿色矩形框 ) ;

这里只找到了 444 个独立 000 元素 , 红色矩形框中 ;

使用最少的直线 , 覆盖所有的 000 元素 ;

4、第二步 : 试指派 ( 打 √ )

本步骤的目的是使用最少的直线 , 将所有的 000 元素都覆盖住 , 如果能一眼看出来最好 , 如果不能 , 就需要使用打钩的方法 ;

定位一个没有独立 000 元素的行 : 先对没有 000 元素的行打钩 √ : 第 444 行没有独立 000 元素 , 第 444 行打 √ ;

讨论第 444 行 : 第 444 行没有独立的 000 元素 , 但是有废弃的 000 元素 , 因为在第一步已经保证了每行每列都有 000 元素 ;

在第 444 行 的 废弃 000 元素所在列 , 即第 222 列 , 打 √ ;

讨论第 222 列 : 上述打钩的列中 , 查看是否有 独立的 000 元素 , 如果有对应的行就打 √ ;

第 111 行有独立的 000 元素 , 在第 111 行位置打 √ ;

讨论第 111 行 : 查看第 111 行是否有废弃的 000 元素 , 如果有就继续打 √ , 如果没有就停止 ;

第 111 行没有废弃的 000 元素 , 直接停止 ;

讨论 行 的时候讨论的是 废弃的 000 元素 ,

讨论 列 的时候讨论的是 独立的 000 元素 ;

5、第二步 : 试指派 ( 直线覆盖 )

本步骤的目的是使用最少的直线 , 将所有的 000 元素都覆盖住 , 如果能一眼看出来最好 , 如果不能 , 就需要使用打钩的方法 ;

打 √ 完毕 , 开始讨论覆盖 ,

没有 打 √ 的行划线 , 打 √ 的列划线 , 四条线就将所有的 000 元素覆盖了 ,

在没有被覆盖的元素中 , 找最小的元素 111 , 将该元素所在的没有覆盖的行 −1-1−1 , 覆盖的列 +1+1+1 ;

第 1,41, 41,4 行中的元素 −1-1−1, 第 222 列中的元素 +1+1+1 ;

最终得到如下矩阵 :

(bij)=[1031326030420133024003305](b_{ij}) =\begin{bmatrix} & 1 & 0 & 3 & 1 & 3 & \\\\ & 2 & 6 & 0 & 3 & 0 & \\\\ & 4 & 2 & 0 & 1 & 3 & \\\\ & 3 & 0 & 2 & 4 & 0 & \\\\ & 0 & 3 & 3 & 0 & 5 & \\ \end{bmatrix}(bij​)=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡​​12430​06203​30023​13140​30305​​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤​

本质 : 没有覆盖的元素统一减去最小值 , 被覆盖的行列交叉值增加了该最小元素值 ;

6、第二步 : 试指派 ( 第二轮 )

再次进行试指派此时发现 , 试指派还是 444 个独立 000 元素 ,

先找有独立 000 元素的行 , 找到后 标记为 独立 000 元素 ( 红色矩形框 ) , 将对应列的 000 元素标记为废弃 ( 绿色矩形框 ) ;

然后找有独立 000 元素的列 ;

再次执行 打 √ ,

没有 000 元素的行为起点 :

将该行废弃 000 元素列打钩 , 有两个 :

将废弃 000 元素列中对应的 独立 000 元素 行 打钩 :

上述两行对应的 废弃 000 元素的列打钩 :

在上述打钩的列中 , 将独立 000 元素所在行打钩 :

直线覆盖 : 没打勾的行画一条直线 , 打钩的列画一条直线 ; 目的是使用最少的直线覆盖住所有的 000 ;

在没有被覆盖的元素中 , 找最小的元素 111 , 将该最小元素所在的没有覆盖的行 −1-1−1 , 覆盖的列 +1+1+1 ;

第 1,2,3,41, 2,3,41,2,3,4 行中的元素 −1-1−1, 第 2,3,42,3,42,3,4 列中的元素 +1+1+1 ;

最终矩阵为 :

(bij)=[0030316020320032023004406](b_{ij}) =\begin{bmatrix} & 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 & \\ \end{bmatrix}(bij​)=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡​​01320​06204​30024​02030​30306​​⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤​

本质 : 没有覆盖的元素统一减去最小值 , 被覆盖的行列交叉值增加了该最小元素值 ;

这个矩阵 000 很多 , 选出 555 个独立 000 元素 , 成立的解有好多个 ;

如下指派 , 正好能找出 555 个独立 000 元素 ;

【运筹学】指派问题、匈牙利法总结 ( 指派问题 | 克尼格定理 | 匈牙利法 | 行列出现 0 元素 | 试指派 | 打 √ | 直线覆盖 ) ★★★相关推荐

  1. 【运筹学】匈牙利法 ( 克尼格定理 | 匈牙利法引入 )

    文章目录 一.克尼格定理 二.匈牙利法引入 一.克尼格定理 匈牙利法 主要用于解决指派问题 , 其主要依据是 克尼格定理 ; 指派问题 参考 [运筹学]整数规划 ( 整数规划求解方法 | 指派问题 ) ...

  2. 【运筹学】匈牙利法 ( 匈牙利法步骤 | 第一步 : 使行列出现 0 元素示例 )

    文章目录 一.指派问题求解步骤 二.第一步 : 使行列出现 000 元素示例 一.指派问题求解步骤 指派问题求解步骤 : 1 . 使行列出现 000 元素 : 指派问题系数矩阵 (cij)(c_{ij ...

  3. 【运筹学】匈牙利法 ( 匈牙利法步骤 | 第二步 : 试指派操作示例 )

    文章目录 一.指派问题求解步骤 二.第二步 : 试指派操作示例 一.指派问题求解步骤 指派问题求解步骤 : 1 . 使行列出现 000 元素 : 指派问题系数矩阵 (cij)(c_{ij})(cij​ ...

  4. 【运筹学】匈牙利法 ( 匈牙利法步骤 | 试指派调整矩阵原理分析 | 打 √ | 直线覆盖 )

    文章目录 一.指派问题求解步骤 二.打 √ 三.直线覆盖 一.指派问题求解步骤 指派问题求解步骤 : 1 . 使行列出现 000 元素 : 指派问题系数矩阵 (cij)(c_{ij})(cij​) 变 ...

  5. 【运筹学】匈牙利法 ( 匈牙利法示例 2 | 第一步 : 变换系数矩阵 | 第二步 : 试指派 | 行列打√ | 直线覆盖 | 第二轮试指派 )

    文章目录 一.使用匈牙利法求解下面的指派问题 二.第一步 : 变换系数矩阵 ( 每行每列都出现 0 元素 ) 三.第二步 : 试指派 ( 找独立 0 元素 ) 四.第二步 : 试指派 ( 打 √ ) ...

  6. 差分进化算法python 指派问题_一类指派问题的改进矩阵解法

    一 类 指 派 问 题 的 改 进 矩 阵 解 法 孙 静 (广州科技职业技术学院 电子信息系,广东 广州 510550) 摘 要 :本 文介绍 了求历 时最短的 指派 问题 ,给 出 了改 进矩阵解 ...

  7. 【运筹学】单纯形法的理论推导和定理证明

    文章目录 1.前期理论推导,获得Fai 2.根据fai,证明三大定理(这些定理是单纯表法的理论依据) 定理1--最优解 定理2--当...LP问题无界 定理3--当...存在最优解 1.前期理论推导, ...

  8. C语言给出点坐标进行克里金插值,Arcgis笔记之克里金插值——求助surfer8.0

    arcgis的插值方法比较丰富,但是有一点,那就是克里金插值.arcgis中克里金插值的结果不平滑,看起来非常难看.如下图,是对图中点数据某个属性值的插值结果. arcgis克里金插值结果 使用su ...

  9. 福禄克测试报告转换软件,福禄克推出新一代电能质量分析软件Fluke Power Pioneer-测试测量-与非网...

    Fluke Power Pioneer 是新一代电能质量分析软件,集数据下载,分析,报告工具于一身,给客户提供了一体化的全方面解决方案.软件内置了公用电网电能质量,光伏系统并网,电机经济运行,企业合理 ...

最新文章

  1. 解决360浏览器偶发性会闪屏一下黑色的背景
  2. 疯狂C#~伴随着我的库存管理¥
  3. centos7 apache2.4 多站点配置
  4. 使用powershell一次性创建用户,OU及组
  5. 【转载】#pragma once与#ifndef #define #endif的区别
  6. ab实验置信度_为什么您的Ab测试需要置信区间
  7. python实时显示温度变化_python实时温度绘制
  8. 数字化转型方法论_双中台:企业数字化转型的核心战略与方法论
  9. swift 脚本_Swift脚本和命令行参数
  10. linux 内核 解压出错,imx258 内核解压失败(已解决)
  11. 蓝桥杯Python题目(二)
  12. 电感电容串联起什么作用
  13. 万能五笔输入法弹窗_万能五笔输入法的广告怎么关闭
  14. windows 10 宽带拨号时无法开启热点,解决热点开启问题
  15. 监控易携手三大运营商,助推安徽省农行三级网扁平化管理
  16. 小米路由器4刷padavan固件
  17. IDEA的maven的package打包
  18. linux下登录ftp
  19. linux bt4 u盘版下载,高手用U盘安装BT4
  20. 小程序使用阿里字体图标

热门文章

  1. 都大二下学期了,说说读大学的感受吧
  2. PHP7实战开发简单CMS内容管理系统(8)登录权限控制功能分离
  3. UVA1103分区涂色+vc使用注意事项
  4. NOIP2006提高组 能量项链
  5. java追加文本到文件末尾
  6. 安装完最小化 RHEL/CentOS 7 后需要做的 30 件事情(二)转载自码农网
  7. HTTP/2笔记之连接建立
  8. AsyncQueryHandler了解
  9. Win32汇编_基础
  10. 2019.08.07【NOIP提高组】模拟 A 组 总结