【问题标题】:matching algorithm匹配算法
【发布时间】:2011-06-18 12:16:02
【问题描述】:

我正在编写一个应用程序,它将一组用户分成几对,以便一起执行一项任务。每个用户都可以指定有关其合作伙伴的各种偏好,例如

  • 性别
  • 语言
  • 年龄
  • 位置(通常在用户居住地 X 英里/公里以内)

理想情况下,我希望用户能够指定这些偏好中的每一个是“值得拥有”还是“必须拥有”,例如“我宁愿找一个以英语为母语的人,但我不能找一个女性”。

我的目标是最大限度地提高比赛的整体平均质量。例如,假设系统中有 4 个用户,A、B、C、D。这些用户可以通过 3 种方式进行匹配:

选项 1 比赛得分 A-B 5 光盘 4 --- 平均 4.5 选项 2 比赛得分 交流电 2 BD 3 --- 平均 2.5 选项 3 比赛得分 广告 1 公元前 9 --- 平均 5

因此,在这个人为的示例中,将选择第 3 个选项,因为它具有最高的整体匹配质量,即使 A 和 D 根本没有很好地匹配。

有没有一种算法可以帮助我:

  • 计算上面显示的“匹配分数”
  • 选择能够最大化平均匹配分数的配对(同时尊重每个用户的绝对约束)

每个用户都匹配并不是绝对必要的,所以如果要在显着降低匹配的整体质量和让少数用户没有匹配之间做出选择,我会选择后者。

显然,我希望计算匹配的算法尽快完成,因为系统中的用户数量可能非常大。

最后,这个计算比赛得分和最大化总平均数的系统只是我自己想出的一个启发式方法。如果有更好的方法来计算配对,请告诉我。

更新

我描述的问题似乎与stable marriage problem 相似,对此有一个众所周知的解决方案。但是,在这个问题中,我不需要选择的对是稳定的。我的目标是选择配对以使平均“匹配分数”最大化

【问题讨论】:

  • 你能定义“相当大”是数百、数千、数百万吗?
  • @Ivan 理想情况下,我希望系统能够在几个小时内为几百万用户执行匹配算法。
  • 我正在处理类似的问题(不同之处在于我的“男人”和“女人”必须与异性配对,并且人口不平衡) - 我看到你'还没有接受解决方案 - 你采用哪种方法?

标签: algorithm graph computer-science matching


【解决方案1】:

你在看什么maximum match algorithms?一开始我读你的问题太仓促了:看来你不一定将自己限制在二分图上。这似乎更棘手。

【讨论】:

  • 特别是,最小成本最大流量问题在这里可能很有用,其中匹配的成本可能与其好坏成反比。
【解决方案2】:

我相信这个问题可以表示为线性规划问题。然后你可以使用Simplex method来解决它。

【讨论】:

  • 如果“匹配分数”是每个用户偏好的线性函数,这个问题只能被描述为线性规划问题。
【解决方案3】:

为了在任意图中找到最大匹配,有一个 Edmond 匹配算法的加权变体:

http://en.wikipedia.org/wiki/Edmonds's_matching_algorithm#Weighted_matching

见那里的脚注。

【讨论】:

    【解决方案4】:

    我为类似问题here 提供了可能的解决方案。它是一种衡量相异性的算法——测量数据与预期数据越相似,得到的数字就越小。

    对于您的应用程序,您可以将一个人的偏好设置为预期数据,而您与之比较的每个其他人都将是测量数据。在运行比较之前,您可能希望过滤“测量数据”以消除您在原始问题中提到的“不得与女性匹配”之类的情况。

    另一种选择是使用卡方算法。

    【讨论】:

      【解决方案5】:

      从外观上看,您的问题不是双向的,因此在我看来,您正在寻找一般图表中的最大权重匹配。我不羡慕写这篇文章的任务,因为 Edmond 的 blossum 收缩算法不容易理解或有效实施。有这种算法的实现,其中一个例子是 C++ 库 LEMON (http://lemon.cs.elte.hu/trac/lemon)。如果您想要最大基数最大权重匹配,则必须使用最大权重匹配算法并为每个边添加一个大权重(所有权重的总和)以强制最大基数作为第一优先级。

      或者,正如您在上面的其中一个 cmets 中提到的那样,您的匹配项不是线性的,因此线性规划已被淘汰,您始终可以采用不要求项是线性的约束规划方法。

      【讨论】:

        猜你喜欢
        • 2018-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-18
        • 2016-07-02
        • 2016-05-29
        • 2015-10-20
        • 2010-10-15
        相关资源
        最近更新 更多