根据玩家的组偏好将玩家分成组

时间:2018-08-13 06:11:17

标签: python

我想使用Python将n个播放器分为6组,这些组可以变化,但需要预先确定大小。例如,对于15位玩家:3组3位玩家和3组2位玩家。每个前三名玩家都可以提前将他们的偏好给予某些组。

PLAYER     PREF 1     PREF 2     PREF 3
player1    group 3    group 4    group 6
player2    group 1    group 5    group 3
player3    group 2    group 1    group 3
...        ...        ...        ...

组中的哪个玩家都没关系。我想确定10个或20个最佳组合,以使所有玩家都能获得其最喜欢的组。 (之所以选择这10或20,是因为还有其他重要因素,这些因素也会消除某些组合。)

现在,我编写了一些代码,该代码生成所有可能的组合,并根据获得其偏好之一的玩家数量(pref 1 = 3pts,pref2 = 2pts,pref3 = 1pt)对它们进行逐一评分。如果至少一个玩家没有获得前三名的组合,则此组合的总得分设置为0。仅保留得分最高的10个组合。这种方法对于有限的玩家来说已经足够好了,但是对于n> 15的玩家,计算花费了很长时间。我可以肯定这不是最好的方法,但是我不知道解决这个问题的最好方法是什么。 (我在想一种方法,该方法只能交换2个不同组的玩家,并评估这是否是向前的一步,但是我不确定应该如何实现。)

1 个答案:

答案 0 :(得分:0)

听起来像您的问题是stable marriage问题。您可以为此使用稳定的匹配算法(例如:Gale Shapley)。