开放式锦标赛配对算法

时间:2012-05-09 09:10:36

标签: algorithm optimization graph-theory tournament

我正在为虚拟城市商务游戏(Urbien.com)开发锦标赛模型,并希望得到一些算法建议。这是场景和当前的“基本”实现:

方案

  • 参赛作品与双人风格配对,就像在原版Facemash或Pixoto.com上一样。
  • “玩家”是一名法官,他会得到一对决斗对,必须为每一对选择一名获胜者。
  • 锦标赛永远不会结束,人们可以随时提交新的参赛作品,并根据当天的数据选择当天/周/月/千禧年的获奖者。

需要解决的问题

  • 评分算法 - 如何评估锦标赛参赛作品以及如何在每场比赛后调整评分?
  • 配对算法 - 如何选择下一对来播放播放器?

当前解决方案

  • 评级算法 - 目前在国际象棋和其他锦标赛中使用的Elo评级系统。
  • 配对算法 - 我们当前的算法识别两个必要条件:
    1. 为迄今为止竞争较少的参赛作品提供更多决斗
    2. 以较高概率匹配具有相似评级的人
鉴于


N =锦标赛中的参赛总数
D =所有玩家到目前为止在锦标赛中进行的决斗总数
Dx =到目前为止玩家x已经有多少决斗

要选择玩家x和y进行决斗,我们首先选择玩家x的概率:

p(x)=(1 - (Dx / D))/ N

然后按以下方式选择玩家: 按评分对玩家排序 让在排序列表中在索引jIdx处选择玩家j的概率为: p(j)= ...... 0,if(j == x) n * r ^ abs(jIdx - xIdx)否则

其中0 < r&lt; 1是要选择的系数,n是归一化因子。

基本上,x中任意一个方向的概率形成一个几何系列,归一化,因此它们总和为1.

关注

  • 最大化决斗的信息价值 - 将评分最低的参赛作品与最高评分参赛作品配对,不太可能为您提供任何有用的信息。
  • 速度 - 我们不想仅仅选择一对进行大量计算。另一种方法是使用类似瑞士配对系统的东西,一次配对所有参赛作品,而不是一次选择一个新的决斗。这有一个缺点(?),在给定的时间范围内提交的所有条目将经历大致相同的决斗数量,这可能是也可能不是。
  • 均衡 - Pixoto的ImageDuel算法可以检测条目何时不太可能进一步提高其评级,并从那时开始减少对决。这种检测的好处值得商榷。一方面,如果您“暂停”一半条目,则可以节省计算。另一方面,具有既定评级的条目可能是新条目的完美匹配,以确定新手的评级。
  • 条目数 - 如果只有少数条目,例如10,则可能应使用更简单的算法。
  • 胜利/损失 - 如果有的话,球员的赢/输比率如何影响下一个配对?
  • 存储 - 关于每个条目和锦标赛本身的存储内容?目前存储: 锦标赛入场:#duels迄今为止,#wins,#loss,rating 锦标赛:到目前为止#duel,#entries

1 个答案:

答案 0 :(得分:4)

而不是投入ELO和ad-hoc概率公式,您可以使用基于最大似然法的标准方法。

最大似然法是一种参数估计方法,它就像这样(例子)。每个参赛者(运动员)被分配参数s [i](1&lt; = i&lt; = N,其中N是参赛者的总数),其测量该运动员的力量或技能。你选择一个公式,将两个玩家的优势映射到第一个玩家获胜的概率。例如,

P(i, j) = 1/(1 + exp(s[j] - s[i]))

这是逻辑曲线(见http://en.wikipedia.org/wiki/Sigmoid_function)。如果您有一个显示用户之间实际结果的表格,则使用全局优化(例如梯度下降)来查找最大化概率的强度参数s [1] .. s [N]实际观察到的匹配结果例如。如果你有三个参赛者并且观察到两个结果:

  • 玩家1赢得了玩家2
  • 玩家2赢得了玩家3

然后你找到最大化产品价值的参数s [1],s [2],s [3]

 P(1, 2) * P(2, 3)

顺便说一句,最大化

可能更容易
 log P(1, 2) + log P(2, 3)

请注意,如果您使用物流曲线之类的东西,那么重要的只是强度参数的差异,因此您需要将值锚定在某处,例如任意选择

 s[1] = 0

为了获得更多最近的比赛&#34;称重&#34;更多,您可以根据年龄调整匹配结果的重要性。如果t测量自匹配发生以来的时间(在某些时间单位),您可以最大化总和的值(使用示例)

 e^-t log P(1, 2) + e^-t' log P(2, 3)

其中t和t&#39;是比赛1-2和2-3的年龄,所以那些最近发生的比赛更重。

这种方法的有趣之处在于,当强度参数具有值时,可以立即使用P(...)公式来计算任何未来匹配的赢/输概率。要匹配参赛者,您可以将P(...)值接近0.5的那些配对,然后选择那些经过时间调整的比赛数量的竞赛者(e ^ -t1 + e ^ -t2 +的总和... )对于匹配年龄t1,t2,...低。 最佳的事情是计算全球两个玩家之间的赢或输的总影响,然后更喜欢那些对评级产生最大预期影响的匹配,但是可能需要大量的计算。

您不需要一直运行最大似然估计/全局优化算法;你可以运行它,例如每天一次作为批次运行并使用第二天的结果将人们匹配在一起。时间调整的匹配质量无论如何都可以实时更新。

在算法方面,您可以根据s参数对最大似然运行后的玩家进行排序,因此很容易快速找到等强度玩家。