问题描述
我正在尝试编写一种算法,为我的公司将人们配对进行每周 1-1 次会议。
到目前为止,我一直在使用简单的随机匹配(对用户列表进行 Fisher–Yates shuffle,然后选择后续元素)。问题是很多人连续 2 周甚至 3 周获得相同的比赛。这很糟糕,因为我们希望向人们介绍尽可能多的不同同事。
所以我正在寻找一种算法:
- 生成用户对,以便每个用户在匹配回合中与另外 1 个用户恰好匹配。
- 如果用户数为奇数,则本轮不匹配任何用户。如果每个用户被排除的时间间隔也最大化,则奖励积分。
- 最大化 a 和 b 配对之间的时间,对于任何对 (a,b)。在接下来的 2 周内避免重复匹配会相对简单,但如何确保任何两个配对的人之间的间隔最大化?
- 理想情况下,循环之间的顺序或匹配不会相同。一个周期是 N-1 轮(其中 N 是团队的规模)。在每个循环中,每个用户都应该与所有其他用户匹配一次。因此,如果用户 a 在一个循环中与 b、c、d 匹配,则在一个 4 人的团队中,在下一个周期的顺序应该不同(例如c、b、d),并且对于所有用户都应该如此。
[编辑回复评论]:标准 3 和 4 相互矛盾,因此如果它们发生冲突,则 4 应优先。
该算法将在多个团队中运行,并将这些团队中的人员相互匹配。它需要处理在匹配回合之间被添加到团队或从团队中删除的人员。
我考虑过使用 round-robin tournament 算法。但它不会处理在匹配之间被添加到列表中或从列表中删除的人。
如果我们根据上次匹配的时间定义偏好,the stable roommates problem 的 Irving 算法看起来很有前景。 IE。如果 a 与 b 匹配早于与c。但是算法可能会判定没有稳定匹配,也不能保证循环之间的对的排序会不同。
如果有任何线索或帮助,我将不胜感激。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)