【问题标题】:Maximum Weight / Minimum Cost Bipartite Matching Code in PythonPython中的最大权重/最小成本二分匹配代码
【发布时间】:2011-05-24 11:47:56
【问题描述】:

我正在寻找用于二分图中最大权重/最小成本匹配的 Python 代码。我一直在 NetworkX 中使用一般情况下的最大重量匹配代码,但我发现它对我的需要来说太慢了。这可能是由于通用算法较慢,以及 NetworkX 解决方案完全用 Python 实现的事实。理想情况下,我想为包含一些 C/C++ 代码的二分匹配问题找到一些 Python 代码,但现在,任何比 NetworkX 实现更快的东西都会有所帮助。

【问题讨论】:

  • 你有什么具体的伪代码吗?你能提供一个python输入/输出的例子吗?
  • @Kevpie 我对几乎所有界面都开放。最大重量问题本身定义明确(例如在维基百科上en.wikipedia.org/wiki/…),所以我不想浪费空间重新定义它。输入可能是一个图,甚至只是一个权重矩阵,输出是二分顶点之间的匹配。

标签: c++ python algorithm graph


【解决方案1】:

您是否尝试过匈牙利算法(也称为 Munkres 或 Kuhn-Munkres 算法)的 scipy 实现?

scipy.optimize.linear_sum_assignment

【讨论】:

  • SciPy 实现(从 1.4.0 开始)改为基于最短扩充路径(并且比 1.3.0 快得多)。
【解决方案2】:

经过进一步调查,我发现以下两个模块特别有用(http://pypi.python.org/pypi/pyLAPJV/0.3http://pypi.python.org/pypi/hungarian)。它们都是在 C++ 中使用 Python 绑定实现的算法,并且运行速度比 NetworkX 匹配实现快得多。然而,pyLAPJV 的实现对于我的需要来说似乎有点太善变,并且不能很好地处理相同加权的边缘。匈牙利模块(虽然据说比 pyLAPJV 算法慢)在我目前处理的数据大小上比 NetworkX 实现快大约 3 个数量级。我还将再看一下 kunigami 建议的代码,因为我相信它可以通过 Shedskin 相当容易地运行以提供相当快的实现。

【讨论】:

    【解决方案3】:

    当您说“最小成本匹配”时,我假设您的意思是在所有最大匹配中找到成本最低的匹配的问题。

    从 2.4 版(2019 年 10 月 17 日发布)开始,NetworkX 确实专门处理了 nx.algorithms.bipartite.minimum_weight_full_matching 的二方情况。

    在底层,它依赖于scipy.optimize.linear_sum_assignment。从 1.6.0 版本开始,SciPy 还附带了 scipy.sparse.csgraph.min_weight_full_bipartite_matching,它可以做同样的事情,但对于稀疏输入,它可以为稀疏图提供性能改进。

    【讨论】:

    • 但是该算法需要一个完整的二部图,如果您有一个非常大且非常稀疏的二部图,并且应该确定其最小权重最大匹配,这可能会成为一个问题。
    • @user2961818:是的,我已经添加了关于稀疏输入的替代方法的注释。当 NetworkX 将 SciPy 依赖项提升到 1.6 时,简单地交换要使用的求解器或使其可配置可能是有意义的。
    【解决方案4】:

    不太确定这是否是您要查找的内容,但它是 Hopcroft-Karp 二部图匹配算法的 Python 实现。如果没有,它可能是一个不错的起点。

    Hopcroft-Karp Bipartite Matching

    【讨论】:

    • 感谢 Nico 的链接。但是,最大匹配问题与最大权重匹配问题不同;它关注的是找到参与顶点的最大数量,gut 不考虑权重。
    【解决方案5】:

    最小权重二分匹配可以通过匈牙利算法解决(wikipedia)。维基百科中的链接链接到 python 实现。不过,我不确定它是否比您提到的代码更快。

    【讨论】:

      猜你喜欢
      • 2011-04-26
      • 2018-11-27
      • 1970-01-01
      • 2013-01-27
      • 2018-09-06
      • 1970-01-01
      • 2014-05-09
      • 2023-03-09
      • 2021-09-14
      相关资源
      最近更新 更多