Due to a bug, the alivetimes for players also include time
spent in warmup. Since elo uses score per second, the
skewed alivetime made players who actually lost look like
they won under certain circumstances (like when their
opponent spent a very long time in warmup).
This change puts a ceiling on the alivetime used by Elo
by limiting the alivetime to be at most the game's
duration.
filter(PlayerGameStat.player_id > 2).\
all():
# scores are per second
- scores[p] = s/float(a.seconds)
+ # with a short circuit to handle alivetimes > game
+ # durations, which can happen due to warmup being
+ # included (most often in duels)
+ if game.duration is not None:
+ if a.seconds > game.duration.seconds:
+ scores[p] = s/float(game.duration.seconds)
+ else:
+ scores[p] = s/float(a.seconds)
+
alivetimes[p] = a.seconds
player_ids = scores.keys()