每周配对人,以最大限度地延长任何两个配对的人之间的时间

问题描述

我正在尝试编写一种算法,为我的公司将人们配对进行每周 1-1 次会议。

到目前为止,我一直在使用简单的随机匹配(对用户列表进行 Fisher–Yates shuffle,然后选择后续元素)。问题是很多人连续 2 周甚至 3 周获得相同的比赛。这很糟糕,因为我们希望向人们介绍尽可能多的不同同事。

所以我正在寻找一种算法:

  1. 生成用户对,以便每个用户在匹配回合中与另外 1 个用户恰好匹配。
  2. 如果用户数为奇数,则本轮不匹配任何用户。如果每个用户被排除的时间间隔也最大化,则奖励积分。
  3. 最大化 ab 配对之间的时间,对于任何对 (a,b)。在接下来的 2 周内避免重复匹配会相对简单,但如何确保任何两个配对的人之间的间隔最大化?
  4. 理想情况下,循环之间的顺序或匹配不会相同。一个周期是 N-1 轮(其中 N 是团队的规模)。在每个循环中,每个用户都应该与所有其他用户匹配一次。因此,如果用户 a一个循环中与 bcd 匹配,则在一个 4 人的团队中,在下一个周期的顺序应该不同(例如cbd),并且对于所有用户都应该如此。

[编辑回复评论]:标准 3 和 4 相互矛盾,因此如果它们发生冲突,则 4 应优先。

该算法将在多个团队中运行,并将这些团队中的人员相互匹配。它需要处理在匹配回合之间被添加到团队或从团队中删除的人员。

我考虑过使用 round-robin tournament 算法。但它不会处理在匹配之间被添加到列表中或从列表中删除的人。

如果我们根据上次匹配的时间定义偏好,the stable roommates problem 的 Irving 算法看起来很有前景。 IE。如果 ab 匹配早于与c。但是算法可能会判定没有稳定匹配,也不能保证循环之间的对的排序会不同。

如果有任何线索或帮助,我将不胜感激。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)