gpt4 book ai didi

python - 瑞士锦标赛 - 配对算法

转载 作者:太空狗 更新时间:2023-10-29 20:24:10 27 4
gpt4 key购买 nike

我正在使用 Python 开发瑞士锦标赛系统,我正在尝试找出最佳配对算法。
我最大的问题是,我使用的每个算法都会在少数序列中产生错误,其中最后一对要挑选的已经互相播放,裁定配对无效。

我正在研究的瑞士系统很简单:即使是玩家,每个人都在每一轮比赛,配对是根据获胜的接近程度完成的(所以强者对强者,弱者对弱者)。
No Bye,只有赢/输(没有平局),对手不能互相比赛两次。

我目前做的算法如下:

  1. 按排名顺序(最多获胜到最少获胜)生成玩家列表
  2. 选择玩家,从获胜次数最多的玩家开始
  3. 将他与排名最接近的玩家配对。如果他们已经玩过,则将他与下一个匹配,直到找到匹配为止
  4. 将 pair 从列表中弹出并返回到 1

例如:
2轮后排名:

1. P1: [P2 win, P3 win] 2 wins
2. P5: [P6 win, P2 win] 2 wins
3. P3: [P4 win, P1 lost] 1 win, 1 loss
4. P4: [P6 win, P3 lost] 1 win, 1 loss
5. P2: [P1 lost, P5 lost] 2 losses
6. P6: [P5 lost, P4 lost] 2 losses

第一个选择是 P1,第一个匹配是 P5。从列表中取出 (P1,P5)。

1. P3: [P4 win, P1 lost] 1 win, 1 loss
2. P4: [P6 win, P3 lost] 1 win, 1 loss
3. P2: [P1 lost, P5 lost] 2 losses
4. P6: [P5 lost, P4 lost] 2 losses

第一顺位是 P3,已经玩过 P4,所以比赛是 P2。从列表中取出 (P3,P2)。
在这个序列中,我以一对互相对抗的对结束,但配对无效:

1. P4: [P6 win, P3 lost] 1 win, 1 loss
2. P6: [P5 lost, P4 lost] 2 losses

问题:是否有任何算法可以保证最佳配对模块,同时确保我不会在最后被两个互相玩的玩家“卡住”?

最佳答案

或许我可以帮到你。在国际象棋中,我们有不同的瑞士配对算法,但它们都适用于强弱配对(可能会有意外)。

荷兰语(最常用)的基本原理是,一旦您分配了配对编号,您就可以为每个分数括号应用该算法。

算法的工作原理大致如下:

在第一个分数组中,挑选(大约)一半的球员并将他们放在一个子组中,并将其他球员放在另一个子组中。如果播放器兼容,则将它们配对。如果他们不兼容,请尝试交换第二个子组中的玩家。如果没有配对兼容,则在子组之间交换玩家。如果括号中的玩家数量为奇数,则将漂浮一个。

在下一个分数组中:如果有漂浮物,请先将它们配对。然后,对剩余组执行与之前相同的操作。

添加了更多规则以确保至少存在一对可能。

例如:如果没有交易所能够做出足够好的配对,则回溯到之前的分数范围并打破配对以产生 float 。

这是对荷兰配对系统的一个非常粗略的解释,但这是我对你的问题的看法。

关于python - 瑞士锦标赛 - 配对算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28629235/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com