指派问题中匈牙利算法----Python实现

本文介绍了指派问题的理论基础,包括标准形式和非标准形式,如最大化问题、人数与事数不等的问题等,并详细阐述了匈牙利算法的流程。重点在于使用Python实现匈牙利算法,通过实例解析了如何确定独立零元素和构建直线集合。最后给出了完整的Python代码示例。
摘要由CSDN通过智能技术生成

这里的匈牙利算法的理论部分可见胡运权所著的《运筹学教程》,本文对于理论部分只是简单介绍,主要是针对python实现进行讲解。

文章目录

一、指派问题

1.标准形式指派问题

2.非标准形式的指派问题

2.1.最大化指派问题

2.2.人数和事数不等的指派问题

2.3.一个人可做几件事的指派问题

2.4.某事一定不能由某人做的指派问题

二、匈牙利算法

1.算法流程

2.代码思路

 三、完整代码

总结


一、指派问题

指派问题是一个特殊的0-1规划问题。

1.标准形式指派问题

有n个人和n件事,已知第i人做第j事的费用为C_{ij},要求确定人和事之间的一一对应的指派方案,使完成这n件事的总费用最少。

2.非标准形式的指派问题

非标准的指派问题可以转化为标准形式。一般有一下几种非标准形式。

2.1.最大化指派问题

寻找系数矩阵中最大元素m,将m分别减去矩阵中的每个元素,对其系数矩阵求解就可以得到与原问题相同最优解。

2.2.人数和事数不等的指派问题

添加一些虚拟的人或事儿,并添加的系数全为0,保证系数矩阵为方阵

2.3.一个人可做几件事的指派问题

若某个人可以做几件事,则可以将该人化作几个相同的人来接受指派,这几个人费用都一样

2.4.某事一定不能由某人做的指派问题

若某事一定不能由某人做,则可将相应的费用系数取足够大的数M。

二、匈牙利算法

1.算法流程

对于标准的指派问题,匈牙利解法的一般步骤如下:

1、对系数矩阵行规约和列规约,保证每一行每一列都有零元素

2、确定系数矩阵中的独立零元素。若独立零元素的个数要小于系数矩阵的维度,则进行转到步骤三;若个数等于系数矩阵的维度,则已经找到最优解。

3、继续变换系数矩阵,方法是在未被直线覆盖的元素中找到一个最小的元素,对未被直线所覆盖的行中各元素都减去这一最小元素。这样的操作会产生负元素,因此需要进一步消除负元素,对负元素所在的列中加上这一最小元素,得到新的系数矩阵,返回步骤2.

若要实现匈牙利算法,比

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值