diff --git a/lib/rank_king.rb b/lib/rank_king.rb index 384f916..3fb5215 100644 --- a/lib/rank_king.rb +++ b/lib/rank_king.rb @@ -5,14 +5,17 @@ module RankKing OS = OpenSkill.new Match = Data.define(:a, :b) + # rates all possible 1v1 games to find which generally decreases sigma + # regardless of the winner/loser - is this mathematically sound? I have + # no idea def self.suggest_game(axis) items = axis.pool.items + ratings = items.to_h { [_1.id, Rating.first(axis:, item: _1) || OS.rating] } items.combination(2).sort_by {|combo| - # TODO get all the ratings at once - ratings = combo.map {|item| Rating.first(axis:, item:) || OS.rating } + game = combo.map { ratings.fetch(_1.id) } Math.sqrt( - [ratings, ratings.reverse] + [game, game.reverse] .map {|game| [game, OS.rate(*game).flatten] } .sum {|pre,post| pre.zip(post).sum { (_1.sigma - _2.sigma)**2 }} )