我正在为虚拟城市商业游戏 ( Urbien.com ) 开发锦标赛模型,并希望获得一些算法建议。这是场景和当前的“基本”实现:
设想
- 参赛作品以决斗风格配对,就像在原始的 Facemash 或 Pixoto.com 上一样。
- “玩家”是一名裁判,他得到一系列决斗对,并且必须为每一对选择一个获胜者。
- 比赛永无止境,人们可以随时提交新的参赛作品,并根据该日期的数据选择日/周/月/千年的获胜者。
需要解决的问题
- 评分算法 - 如何对锦标赛参赛作品进行评分以及如何在每场比赛后调整其评分?
- 配对算法 - 如何选择下一对来喂玩家?
当前解决方案
- 评分算法 - 目前在国际象棋和其他锦标赛中使用的 Elo 评分系统。
- 配对算法——我们当前的算法承认两个必要条件:
- 对迄今为止决斗次数较少的条目给予更多的决斗
- 以更高的概率匹配具有相似评分的人
给定:
N = 锦标赛中的参赛
总数 D = 迄今为止所有玩家在锦标赛中进行的决斗总数
Dx = 玩家 x 到目前为止进行了多少决斗
为了选择玩家 x 和 y 进行决斗,我们首先选择玩家 x 的概率:
p(x) = (1 - (Dx / D)) / N
然后按照以下方式选择玩家 y: 按等级对玩家进行排序 让在排序列表中的索引 jIdx 处选择玩家 j 的概率为: p(j) = ... 0, if (j == x) n*r^ abs(jIdx - xIdx) 否则
其中 0 < r < 1 是要选择的系数,n 是归一化因子。
基本上,从 x 的任一方向的概率形成一个几何级数,归一化,因此它们总和为 1。
关注点
- 最大化决斗的信息价值 - 将评分最低的条目与评分最高的条目配对不太可能为您提供任何有用的信息。
- 速度——我们不想为了选择一对而进行大量的计算。一种替代方法是使用类似瑞士配对系统的系统,一次配对所有参赛作品,而不是一次选择一个新的决斗。这有一个缺点 (?),即在给定时间范围内提交的所有参赛作品将经历大致相同数量的决斗,这可能是可取的,也可能不是可取的。
- Equilibrium - Pixoto 的 ImageDuel 算法会检测条目何时不太可能进一步提高其评分,并从那时起减少他们的决斗。这种检测的好处是有争议的。一方面,如果你“暂停”一半的条目,你可以节省计算量。另一方面,具有既定评级的条目可能是新条目的完美匹配,以建立新手的评级。
- 条目数 - 如果只有几个条目,比如 10 个,也许应该使用更简单的算法。
- 赢/输 - 如果有的话,玩家的赢/输比如何影响下一次配对?
- 存储 - 每个条目和锦标赛本身要存储什么?当前存储: 锦标赛条目:到目前为止 # 次决斗,# 胜,# 负,评级 锦标赛:到目前为止 # 次决斗,# 项