本文介绍求解指派问题的匈牙利法,并证明该算法的最优性。

算法流程

算法步骤:

  1. 对成本表中每一行的数值,减去该行的最小值
  2. 对成本表中每一列的数值,减去该列的最小值
  3. 在 000 元素中找到可行解

例 1:

某指派问题的成本表如下:

任务 1 任务 2 任务 3
人员 1 15 10 9
人员 2 9 15 10
人员 3 10 12 8

步骤 1:

任务 1 任务 2 任务 3
人员 1 6 1 0
人员 2 0 6 1
人员 3 2 4 0

步骤 2:

任务 1 任务 2 任务 3
人员 1 6 0 0
人员 2 0 5 1
人员 3 2 3 0

步骤 3:步骤 2 的表格中,加粗的 000 元素即为最优解。

在步骤 3 中,若在 000 元素中找不到可行解,则作如下操作:

  • 画出可以覆盖所有 000 元素的最小行列
  • 对于未画到的元素所构成的子矩阵,所有元素减去该子矩阵中的最小值,然后在被画到的区域的交叉点加上该最小值
  • 回到步骤 3 寻找可行解,如果仍然无法找到,重复前述步骤

例 2:

某指派问题的成本表如下:

任务 1 任务 2 任务 3 任务 4
人员 1 1 4 6 3
人员 2 9 7 10 9
人员 3 4 5 11 7
人员 4 8 7 8 5

步骤 1, 2:

任务 1 任务 2 任务 3 任务 4
人员 1 0 3 2 2
人员 2 2 0 0 2
人员 3 0 1 4 3
人员 4 3 2 0 0

可行性处理:

任务 1 任务 2 任务 3 任务 4
人员 1 0 2 1 1
人员 2 3 0 0 2
人员 3 0 0 3 2
人员 4 4 2 0 0

求解结果:

任务 1 任务 2 任务 3 任务 4
人员 1 0 2 1 1
人员 2 3 0 0 2
人员 3 0 0 3 2
人员 4 4 2 0 0

最优性证明

指派问题的数学模型如下:

决策变量:

xi,jx_{i, j}xi,j​ 0-1 人员 iii 安排到任务 jjj

约束条件:

每个人刚好分配一项任务 ∑j=1nxi,j=1i=1,2,...,n\sum^{n}_{j=1} x_{i, j} = 1 \quad i = 1, 2, ..., n∑j=1n​xi,j​=1i=1,2,...,n
每项任务刚好分配给一个人 ∑i=1nxi,j=1j=1,2,...,n\sum^{n}_{i=1} x_{i, j} = 1 \quad j = 1, 2, ..., n∑i=1n​xi,j​=1j=1,2,...,n

目标函数:
min⁡z=∑i=1n∑j=1nci,j⋅xi,j\min \ z = \sum^{n}_{i=1} \sum^{n}_{j=1} c_{i, j} \cdot x_{i, j} min z=i=1∑n​j=1∑n​ci,j​⋅xi,j​

根据该问题的约束条件的特征,对于成本矩阵中任何一行或列同时加减一个常数,不影响最优解的取值,即:
∑i∑jci,j′⋅xi,j=∑i∑j(ci,j−pi−qj)⋅xi,j=∑i∑jci,j⋅xi,j−∑ipi⋅(∑jxi,j)−∑jqj⋅(∑ixi,j)=∑i∑jci,j⋅xi,j−∑ipi−∑jqj=∑i∑jci,j⋅xi,j−C\begin {aligned} \sum_{i} \sum_{j} c^{\prime}_{i, j} \cdot x_{i, j} &= \sum_{i} \sum_{j} (c_{i, j} - p_{i} - q_{j}) \cdot x_{i, j} \\ &= \sum_{i} \sum_{j} c_{i, j} \cdot x_{i, j} - \sum_{i} p_{i} \cdot (\sum_{j} x_{i, j}) - \sum_{j} q_{j} \cdot (\sum_{i} x_{i, j}) \\ &= \sum_{i} \sum_{j} c_{i, j} \cdot x_{i, j} - \sum_{i} p_{i} - \sum_{j} q_{j} \\ &= \sum_{i} \sum_{j} c_{i, j} \cdot x_{i, j} - C \end {aligned} i∑​j∑​ci,j′​⋅xi,j​​=i∑​j∑​(ci,j​−pi​−qj​)⋅xi,j​=i∑​j∑​ci,j​⋅xi,j​−i∑​pi​⋅(j∑​xi,j​)−j∑​qj​⋅(i∑​xi,j​)=i∑​j∑​ci,j​⋅xi,j​−i∑​pi​−j∑​qj​=i∑​j∑​ci,j​⋅xi,j​−C​

对于前述的特殊情况,即步骤 3 中无法找到可行解时的操作(例 2),对未画到的子矩阵减去最小值时,相当于对其所在行或列的已画线的单元格也减去了该数值,而为了保持已画线的单元格数值不变,相当于把该数值再加回来,故直接在交叉点加上该数值即可。

综上所述,匈牙利法所得解为最优解。

参考文献

Hamdy A. Taha. Operations Research an Introduction 初级篇 Chapter 5

匈牙利法及其最优性分析相关推荐

  1. 最优化建模、算法与理论(四)—— 最优性理论

    参考书籍<最优化:建模.算法与理论> 文章目录 1 最优化问题解的存在性 1.1 Weierstrass 定理 1.2 强拟凸函数 1.3 唯一性定理 2 无约束可微问题的最优性理论 2. ...

  2. KDD 2020 开源论文 | 稀疏优化的块分解算法

    ©PaperWeekly 原创 · 作者|袁淦钊 单位|鹏城实验室 研究方向|数值优化.机器学习 这次向大家分享的工作是鹏城实验室牵头,联合腾讯 AI 实验室和中山大学在 SIGKDD 2020 上发 ...

  3. QEBA:基于类边界查询访问的黑盒攻击

    关注公众号,发现CV技术之美 今日分享一篇"老"论文,收录于CVPR2020『QEBA: Query-Efficient Boundary-Based Blackbox Attac ...

  4. 【论文笔记】具有反馈控制的自主优化

    文章目录 写在前面 问题描述 最优性分析 稳定性分析 LaSalle函数 不变性原理 严格极小值的渐进稳定性 写在前面 原论文标题:Timescale Separation in Autonomous ...

  5. 高级人工智能课程笔记

    课程部分笔记,依据<人工智能 一种现代化方法>第三版 目录 智能概述 搜索search Uninformed Search Informed Search 约束满足问题CSP MDP 值迭 ...

  6. 论文阅读:Understanding Doubly Stochastic Clustering

    ICML 2022 丁天骄, Derek Lim, Rene Vidal, Benjamin D. Haeffele 摘要 将矩阵投影到双随机矩阵空间上的问题在机器学习中有几个应用.例如,在谱聚类中, ...

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

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

  8. 经典贪心法:时间序列问题及其全局最优性证明

    贪心算法是指在对问题求解时,总做出在当前看来是最好的选择.也就是说,不从整体上加以考虑,它所作出的仅仅是在某种意义上的局部最优解.一旦贪心算法求出了一个可行解,就要确定这个算法是否找到了最优解.为此, ...

  9. 揭秘深度学习成功的数学原因:从全局最优性到学习表征不变性

    来源:机器之心 本文长度为4900字,建议阅读7分钟 本文为深层网络的若干属性,如全局最优性.几何稳定性.学习表征不变性,提供了一个数学证明. 近年来,深度学习大获成功,尤其是卷积神经网络(CNN)在 ...

最新文章

  1. Spring Cloud Alibaba基础教程:Nacos配置的多环境管理
  2. Symbian c++ MCameraObserver类的方法解释
  3. 一天搞定CSS: 浮动(float)的副作用--12
  4. python获得命令行参数的方法
  5. 如何关闭window10自动更新
  6. 在VS 2010上搭建Windows Phone 7开发平台
  7. (王道408考研数据结构)第五章树-第三节2:二叉树构造和重建
  8. python中path的用法,python中path的用法
  9. vue-element-admin 设置默认语言
  10. 《『若水新闻』客户端开发教程》——11.代码编码(3)
  11. mysql ip 访问_MySql通过ip地址进行访问的方法
  12. 计算机二级基础知识栈的计算,计算机二级考试公共基础知识点:栈及其基本运算.doc...
  13. 云南建投安二司的数字化创新之路:建筑行业里的样本力量
  14. DID 起步:图说去中心化身份 | ArcBlock 博客
  15. 错误 LNK1104 无法打开文件“C:\Users\Administrator\Desktop\新建文件夹\ConsoleApplication1\x64\Debug\ConsoleApplicat
  16. 龙腾世纪审判一直连接服务器,【1.7.2】【rpg】我的世界龙腾世纪群组服务器
  17. N点虚拟主机管理系统 企业版稳定亲测
  18. flutter 图形验证码
  19. 2021SC@SDUSC山东大学软件学院软件工程应用与实践--Ebiten代码分析 源码分析(四)
  20. cesium实时获取卫星的动态信息,包括经纬度和名称(onTick)

热门文章

  1. 连续十日票房日冠,《人生大事》带热了电影大盘!它凭何突出重围?
  2. 我的本科回忆录:从迷茫自卑到保送华科
  3. 苹果手机app应用显示未受信任打不开怎么办
  4. python生存曲线_用户行为与生存分析
  5. 软件测试周刊(第78期):你对未来越有信心,你对现在越有耐心。
  6. 看什么看!你的学习与就业我包了!!!
  7. Coursera | Andrew Ng (01-week-2-2.5)—导数
  8. Altium designer如何实现原理图和PCB交互式布局
  9. 一张图玩转 XMind 思维导图软件
  10. 计算机所有计算都是在内存,计算机的所有计算都是在内存中进行的