十九、 指派问题 - 匈牙利法 (0-1 整数规划)

原文视频:https://www.bilibili.com/video/BV194411y7sA?p=19

 

\Rightarrow \begin{Bmatrix} \sum_{j=1}^4 x_{1j}=1\\\\ \sum_{j=1}^4 x_{2j}=1\\ \\\sum_{j=1}^4 x_{3j}=1\\ \\\sum_{j=1}^4 x_{4j}=1\\ \end{matrix} \:\:\:\:\:\:\Rightarrow \:\:\:\: \sum_{j=1}^4 x_{ij}=1\:\:\:\:(i=1,2,3,4)       \Rightarrow \begin{Bmatrix} \sum_{i=1}^4 x_{i1}=1\\\\ \sum_{i=1}^4 x_{i2}=1\\ \\\sum_{i=1}^4 x_{i3}=1\\ \\\sum_{i=1}^4 x_{i4}=1\\ \end{matrix} \:\:\:\:\:\:\Rightarrow \:\:\:\: \sum_{i=1}^4 x_{ij}=1\:\:\:\:(j=1,2,3,4)\:\:

 

 

匈牙利法

第一步:

(1)写出工作效率矩阵

           先找出行最小值,并用每个数减掉,再找出列最小值,并进一步减去

(2)需要找出N个独立的“0元素”,满足 从上看,只有1个0,从上看,也只有1个0,此时令这些独立的0取1,其余元素取0,得到新的矩阵

                   一般只适用于 小于等于4的情况

第二步:

(1)扫描每一行,找仅含一个“0元素” 所在的行(记做\star),然后对该列其他“0元素”记做(\varphi)(同一行或列只能取一个数)

(2)扫描每一列,同样寻找 仅含一个“0元素” 所在的列(记做\star),然后对该列其他“0元素”记做(\varphi

(1)(2)步骤每次仅找一行/一列

循环(1)(2),知道所有“0元素”都为 \star 和 \varphi结束

如果出现行/列中包含 \geq 2 个 0 , 我们就需要人为指派:

  (1)选 0 的个数最少的行开始

  (2) 观察列,哪一列的 0 少,就选哪一列(多数礼让少数原则)

\star 的个数m  与 矩阵的阶数 n ,满足 n\:\:=\:\:m 为最优解

                                                  若    n\:\:<\:\:m (第三步)

 

第三步:划线法

       

(1)对没有  \star  的,做标记  √

(2) 找到(1)中的 √ 中的 \varphi,并对\varphi 所在 , 做标记√

(3) 对 (2)中 √  中的 \star 所在的, 做标记√

     重复循环(2)(3) 知道再也不能 √

(4) 对没有 √ 的,画一条横线; 对 √ 的,画一条竖线

 记画出的直线数 L, 若 L< n , 说明要对矩阵进行处理(第四步)

                                  若 L= n,  说明(第二步)有问题,需要重新对第二步重新指派

 

第四步:

(1)从划线矩阵中,把被线划的元素全拿掉,得到一个新的小矩阵,并找到最小元素

               

(2)把划线矩阵,回归到初始形态(本质:非零元素进行调整

             

         1.  √ 减去 最小元素

         2.  √ 加上 最小元素

         3.  原来的“0元素” 不进行运算

   得到的新矩阵,作为指派问题的起点,重新开始第二步运算

 

如果问题是 max Z?

             max Z=\sum^n_{i=1}\sum^n_{j=1}c_{ij}x_{ij}

令  b_{ij}= M-c_{ij}      M 理论上是一个很大很大的数(一般令 M 为c_{ij}中最大的那一个)

         从而求     min Z{'}=\sum^n_{i=1}\sum^n_{j=1}b_{ij}x_{ij}

 

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值