Revision as of 13:41, 14 March 2010
Here is how ratings are computed for newcomers (players who do not
have a previous rating) at a tournament. Questions should
be directed to John Chew.
- For each rated player rp
- Set the iterative rating for rp to their pre-event rating
- For each newcomer nc
- Set the iterative rating for nc to the mean of their rated opponent ratings, if any, else 1500
- Set nc’s earned wins to the number of games won by nc at this event not including byes or forfeits
- Set nc’s rated games to the number of games played by nc at this event not including byes or forfeits
- Define a function IPRnc(r) as follows
- Set earned_wins = nc’s earned wins
- If earned_wins = 0
- then Set earned_wins to 5% * nc’s rated games
- else if earned_wins = rated_games
- then Set earned_wins to 95% * nc’s rated games
- Set excess_wins = (sum of expected wins of a player rated r vs. opponents whose ratings are the iterative ratings of the opponents of nc) - earned_wins
- Return excess_wins
- Repeat 50 times
- For each newcomer nc
- Perform a binary search for an integer value r in [0,3000] stopping when the search range is less than or equal to one, setting the low (high) end of the range equal to the floor of the middle of the range when IPRnc(r) is <0 (≥0)
- If r < 500
- If nc has played a rated opponent
- then
- Set maximum_rating to (greatest pre-event rating among nc’s rated opponents) + 400 * nc’s earned wins / nc’s rated games
- if r > maximum_rating
- then Set r to maximum_rating
- Set nc’s next rating to r
- For each newcomer nc
- Set nc’s iterative rating to nc’s next rating
- If all iterative ratings were equal to next ratings
- then stop repeating now without continuing to the 50th iteration
- If fewer than 50 iterations were required
- For each newcomer nc
- Set nc’s new rating to nc’s iterative rating
- Else
- Perform 50 more iterations
- For each newcomer nc
- Set nc’s new rating to the mean of nc’s last 50 iterative ratings