Class: EloManager
- Inherits:
-
Object
- Object
- EloManager
- Defined in:
- lib/multiplayer_elo/elo_manager.rb
Instance Attribute Summary collapse
-
#k_factor ⇒ Object
Returns the value of attribute k_factor.
Instance Method Summary collapse
- #evaulate_results(results) ⇒ Object
- #expected_percentage(elo1, elo2) ⇒ Object
-
#initialize ⇒ EloManager
constructor
A new instance of EloManager.
-
#points_change(elo1, elo2, result) ⇒ Object
result is 0 for a loss 1 for a win or .5 for a tie.
Constructor Details
#initialize ⇒ EloManager
Returns a new instance of EloManager.
4 5 6 |
# File 'lib/multiplayer_elo/elo_manager.rb', line 4 def initialize @k_factor = 20 end |
Instance Attribute Details
#k_factor ⇒ Object
Returns the value of attribute k_factor.
2 3 4 |
# File 'lib/multiplayer_elo/elo_manager.rb', line 2 def k_factor @k_factor end |
Instance Method Details
#evaulate_results(results) ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/multiplayer_elo/elo_manager.rb', line 17 def evaulate_results(results) results.each do |i| elo_change = 0 results.each do |j| next if i == j # we are using places so first place < 2nd place means a win if i[:place] > j[:place] winner = 0 elsif i[:place] == j[:place] winner = 0.5 else winner = 1 end elo_change += points_change(i[:elo], j[:elo], winner) end i[:new_elo] = i[:elo] + elo_change end end |
#expected_percentage(elo1, elo2) ⇒ Object
8 9 10 |
# File 'lib/multiplayer_elo/elo_manager.rb', line 8 def expected_percentage(elo1, elo2) 1.0 / ( 1.0 + ( 10.0 ** ((elo2.to_f - elo1.to_f) / 400.0) ) ) end |
#points_change(elo1, elo2, result) ⇒ Object
result is 0 for a loss 1 for a win or .5 for a tie
13 14 15 |
# File 'lib/multiplayer_elo/elo_manager.rb', line 13 def points_change(elo1, elo2, result) (@k_factor.to_f * (result.to_f - expected_percentage(elo1, elo2))).round end |