用户之间的非二分非加权最大匹配



>情况:用户选择多个其他用户作为项目的可能合作伙伴。用户对他选择的一个用户没有偏好(即他列表中的任何用户对于合作伙伴来说都足够好)。例:

| user_id | preferred_partners |
| 1       | 2 4                |
| 2       | 3 1                |
| 3       | 4 2 1              |
| 4       | 1                  |

真正的清单会大得多。

我的问题:给定一组用户及其首选合作伙伴(如上面的列表),我想生成一组最终合作伙伴对。最终配对的数量必须最大化(我希望有尽可能多的人成对)。

这是我认为我需要的算法:Edmonds的匹配算法,但由于我不是数学背景,所以我在解释和实现它时遇到了麻烦。

任何帮助将不胜感激。提前谢谢。

Edmonds 的匹配算法确实是你想要的。这是一个很好的链接,提供了详细的解释

Edmonds的算法可能是你想要的,但话又说回来,它可能不是。你会寻找三重吗?你会想要偏好的力量吗?您是否想要对您的机制提供一些保证,例如,如果有人放下更多偏好,他们就无法从匹配到不匹配?合作伙伴必须是相互首选的吗?如果不是,对共同首选的合作伙伴是否有更大的权重?

其中一些变体可以通过Edmonds算法或其加权表亲来解决,它使用Edmonds的算法来解决"受限原始",就像匈牙利算法使用二分匹配算法一样,但有些,特别是3D匹配,很难并且不适合可爱的组合算法。您可能会发现,通过从 Ruby 调用整数规划求解器,甚至可以更轻松地解决多时间情况。

最新更新