繁体   English   中英

Python Trueskill-使用字典

[英]Python Trueskill - Using Dictionaries

我正在尝试使用Python 编写的Trueskill软件包,并已解决了一些基本问题,

对于两个玩家的比赛,我可以做

alice = Rating()
bob = Rating()
alice, bob = rate_1vs1(alice, bob)

对于多个玩家对决,我可以做到

alice = Rating()
bob = Rating()
eve = Rating()

alice, bob, eve = rate([(alice,),(bob,),(eve,)], ranks=[0, 1, 2])

我目前有一个数据库,其结构如下:

game participant rank ....(various game stats)
1    alice       2
1    bob         1
1    eve         3
2    alice       1
2    eve         1
3    bob         1
3    carol       2
3    alice       3
3    ted         4
3    eve         5
.......

这是一个简化的版本,因为某些游戏最多可容纳2位参与者,最多可容纳20位参与者。我要做的是逐个游戏浏览数据库游戏,读取参与者并根据结果进行更新。 我不确定执行此操作的最佳方法,因为我知道动态创建变量不是一个大问题-但是正确的方法是什么?

-编辑,使用字典-

所以我可以用字典

ratings = {}
k = 0
for participant in results:
    ratings[k] = Rating
    k += 1

但是我不知道如何对玩家进行评分,因为以下内容不起作用,因为字典将是一个评分组,而不是单个参与者

new_ratings = rate(ratings.values(),ranks=[0-k])

我为申请电视节目做了类似的事情: https : //gist.github.com/sublee/4967876

defaultdictgroupby可以帮助您实现所需的目标:

from collections import defaultdict
from itertools import groupby
from pprint import pprint
from trueskill import Rating, rate

results = [(1, 'alice', 2),
           (1, 'bob', 1),
           (1, 'eve', 3),
           (2, 'alice', 1),
           (2, 'eve', 1),
           (3, 'bob', 1),
           (3, 'carol', 2),
           (3, 'alice', 3),
           (3, 'ted', 4),
           (3, 'eve', 5)]
ratings = defaultdict(Rating)

for game_id, result in groupby(results, lambda x: x[0]):
    result = list(result)
    rating_groups = [(ratings[name],) for game_id, name, rank in result]
    ranks = [rank for game_id, name, rank in result]
    transformed_groups = rate(rating_groups, ranks=ranks)
    for x, (game_id, name, rank) in enumerate(result):
        ratings[name], = transformed_groups[x]

pprint(dict(ratings))

我得到的结果是:

{'alice': trueskill.Rating(mu=23.967, sigma=4.088),
 'bob': trueskill.Rating(mu=36.119, sigma=5.434),
 'carol': trueskill.Rating(mu=29.226, sigma=5.342),
 'eve': trueskill.Rating(mu=16.740, sigma=4.438),
 'ted': trueskill.Rating(mu=21.013, sigma=5.150)}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM