Elo rating system

[Inline docs][inchpages]

Very simple Ruby implementation of the Elo rating system, a method for calculating the relative skill levels of players in zero-sum games such as chess.

It contains two functions: expected(player_a, player_b), to calculate the expected score of player_a in a match against player_b; and elo(old, exp, score, k_factor = 32), to calculate the new score for each player.

Installation

Add this line to your application's Gemfile:

gem 'elo_rating_system'

And then execute:

$ bundle

Or install it yourself as:

$ gem install elo_rating_system

Example

In a five-round tournament, player A, with a rating of 1613, plays against opponents with the following ratings: 1609, 1477, 1388, 1586, 1720.

The expected score is therefore:

exp  = EloRatingSystem.expected(1613, 1609)
exp += EloRatingSystem.expected(1613, 1477)
exp += EloRatingSystem.expected(1613, 1388)
exp += EloRatingSystem.expected(1613, 1586)
exp += EloRatingSystem.expected(1613, 1720)

exp.round(3) # => 2.867

Player A lost match #1, draw match #2, wins match #3 and #4, and loses match #5. Therefore the player's actual score is (0 + 0.5 + 1 + 1 + 0) = 2.5.

We can now use this to calculate the new Elo rating for player A:

EloRatingSystem.elo(1613, 2.867, 2.5).round # => 1601

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/sashite/elo_rating_system.