【问题标题】:detailed hungarian algorithm(assignment problem) question详细的匈牙利算法(分配问题)问题
【发布时间】:2011-08-05 22:46:37
【问题描述】:

this article 所述,我已经实现了匈牙利算法,这是一种分配问题的解决方案,但它在百分之几的随机成本矩阵上失败了。

我已经花了数周时间调试它(我是在问this question 时开始的,虽然不是全职)。我采用了算法失败的随机成本矩阵,并用好的旧笔和纸执行了算法,并将其与我的实现进行了比较,看看出了什么问题。这导致我发现了一些我现在已经纠正的错误,但是我遇到了一个例子,当我手动解决它时我没有得到正确的解决方案。对于任何感兴趣的人:该示例的成本矩阵是{{0,6,4,3},{3,2,1,2},{0,7,6,4},{3,8,5,3}},其正确解决方案的总和为9=4+2+0+3(按此顺序)。在那个例子中,最终有一条匹配的边不在等式子图上,我认为这是不可能的,表明有问题。

要么我不完全理解解决方案,这是一个可行的选择,要么是所提供解决方案中的一个非常微妙的错误,我将在下面详细说明。

我意识到我必须介绍一些术语,但由于这是一个详细的问题,我不会详细解释所有概念,因为任何需要解释的人可能都无法回答我的问题。

  • 问题的输入是一个加权完全二分图,每个分区上有n 个节点。
  • 提出的方法指定查找n 扩充路径。
  • 增广路径是在不匹配节点处开始和结束的交替路径。
  • 交替路径是在相等子图上匹配的和不匹配的边之间交替的路径。
  • 这些交替路径以广度优先的方式增长,仅在以下任一情况下才会停止:
    • 找到增广路径或
    • 交替路径无法再进一步扩展。
  • 还有一个关于可能存在的错误的关键事实:算法会记住交替路径遇到的节点,这会在与该问题无关的部分影响算法。

当找到增强路径时,所提出的方法会停止增长交替路径。我相信这是不正确的。我认为所有交替路径都需要增长到找到的增强路径的成本。请注意,交替路径以广度优先方式增长,因此这只增长成本可以与找到的路径相关的路径。这个微小的变化可能会导致某些节点被标记为“通过交替路径访问”,否则这些节点不会被标记,这会进一步影响算法。

实际问题: 我是否应该考虑交替路径的成本等于探索的增强路径(并从同一节点开始)的成本?这与所提出的方法相反,该方法说一旦找到增强路径就停止,而不管成本与其他路径有任何联系。

【问题讨论】:

    标签: algorithm graph variable-assignment graph-algorithm


    【解决方案1】:

    查看“The Stanford GraphBase”中对匈牙利算法的介绍,您可以跟踪其解决方案的进展情况,即向成本矩阵行中的每个单元格或成本矩阵列中的每个单元格添加一个常数,并看到当您在更改后的矩阵中有一组完整的独立零时您有一个解决方案。

    你提到的那篇论文我只读过一次。是不是找到一条增广路径可以让你增加改变矩阵中独立零点的数量?如果是这样,那么找到 n 个增广路径,如图 3 中的步骤 2 所示,将找到一个很好的解决方案,因为你必须有 n 个独立的零。如果是这样,那么您可以通过检查找到的每个增广路径是否添加一个独立的零来检查算法的实现,即使在存在其他路径可以找到但没有找到的情况下也是如此。

    【讨论】:

    • 每个增广路径确实向改变后的矩阵添加了一个独立的零,因此解决方案将始终具有n 独立的零,这是正确的。但这并不意味着它是最佳解决方案,这里的情况并非如此。
    • 我希望具有 n 个独立解的解将是最优解,因为它是调整矩阵上的最优解(不能比 0 + 0 + ... 做得更好)并且因为调整不会改变答案的相对成本。
    • 您的示例矩阵似乎有些混乱。如果我要选择 4 个方格,每行和每列只使用一次,我想我想选择左上角的 0,右下角的三个,以及中间方格的两个对角线 1。我认为这给了我 5 个有效解决方案的成本。这是怎么回事?
    • 非常抱歉,我在复制示例矩阵时出错了。 1 应该是 7
    • 我手动处理了您的(编辑过的)示例,并在 n 个独立零的位置找到了您的解决方案。再加上我上面的论点,即 n 个独立零点标志着调整后矩阵的完美解,因此也是原始矩阵的完美解,我建议您检查一下,如果您的程序在不是解决方案的地方找到了 n 个独立零点,那么它确实有通过向一系列行或列中的所有单元格添加常量来到达该位置。
    猜你喜欢
    • 2010-11-16
    • 1970-01-01
    • 2015-06-15
    • 1970-01-01
    • 2013-05-18
    • 2011-05-03
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多