2013-02-24 32 views
3

您好!TrueSkill配对实施

我按照本指南有关Microsoft trueskill评分系统算法如何工作http://www.moserware.com/2010/03/computing-your-skill.html的信息是非常好的,但留下了怎样的球员实际的选择应该做的(这是显而易见的,因为这是每场比赛我想唯一的)。

我的问题是,我提出的所有算法似乎都非常复杂(高时间复杂度)。假设我有两支球队,每支球队应该包含4名球员。如果我蛮力,我需要检查当前可用的所有组合的比赛质量(遵循trueskill算法)。如果有很多玩家需要考虑,这将导致大量迭代。

所以我问你是否可以给我任何关于如何更智能的提示。也许你已经介绍了解决这个问题的一些信息?

+0

实际细节在微软的文章奠定了[trueskill评分系统™排名系统:详细](http://research.microsoft.com/en-us/projects/trueskill/details.aspx),尤其是[对接会(HTTP ://research.microsoft.com/en-us/projects/trueskill/details.aspx#Matchmaking)一章。在MSDN文章的结尾,也有到[F#实现]的链路(http://blogs.technet.com/b/apg/archive/2008/06/16/trueskill-in-f.aspx) 。 – Groo 2013-02-24 17:38:24

+0

谢谢你的回复。阅读关于牵线搭桥,是的公式似乎好计算平局概率,但我很感兴趣,在很多玩家的快捷方法做这件事。我打算做一个broadphase扫,将为了thrink玩家跨度由他们西格玛球员排序,但我想这将消除trueskill评分系统系统的目的。 – Pettson 2013-02-24 18:30:59

+0

TrueSkill是专利和商标,不是吗? http://www.google.com/patents/US20090227313 – caw 2013-08-26 07:02:49

回答

4

我还与the TrueSkill algorithm in Python实施了配对服务,我担心同样的问题。

我的婚介服务等待一段时间收集匹配请求。然后它根据用户的TrueSkillμ值对请求进行排序并将它们分开。并再次等待。它找不到最佳匹配,但速度很快。这里是一个伪代码:

class Matchmaker(object): 

    def matchmaking(self): 
     sorted_pool = sorted(self.pool.itervalues(), key=by_rating) 
     matches, self.pool = divide_uniformly(sorted_pool, expectation, minimum) 
     return matches 

    def run(self): 
     while self.should_match(): 
      for match in self.matchmaking(): 
       if quality(match) < 0.5: 
        cancel(match) 
       else: 
        succeed(match) 
      time.sleep(self.interval) 

p.s.你需要大量的用户和大量的比赛池才能获得评分系统和比赛服务的好处。