After 3 month of discussion we implemented a rating system that is based on the elo-point-distibution, but altered that it fits the 2 different point-distribution-systems used at webdiplomacy very closely.
We use this in addition to the points, so it was very important that the final results are comparable.
You can see the final result in out HoF: http://vdiploamcy.com/hof.php
If you click on a player name you get a history of his points, if you click on a game you get the points-distribution-breakdown of the game.
The code is already up on github, here is how it works:
- Each game is split in many 1on1 matches.
- The final points are the sum of all sub-matches.
- Each game will get an adjustment for the number of players (a 34-player game does not score 16 times more than a 2-player game).
How each sub-match scores:
The score is depended how the real result of the match compares to the expected outcome and how valid the real result is.
Expected result player1 (Re1) and player2:
- Re1 = 1 / ( 1 + ( 10^( (Rating2 - Rating1) / 400) ) )
- Re2 = 1 - Re1
Adjustments of the results for calculation:
- Set Resigned/CDed players SCs to 0, their rating to 0 too.
- WTA: Set the SC-count for all but the winner to "0".
- Draw: Adjust the SCs for calculations so that every drawer has the same SC-count.
- PPSC: Do not change anything with the data.
Rr1 = Pl1SCs/(Pl1SCs + Pl2SCs) (if both have 0 SCs set Rr1 = 0)
Rr2 = Pl2SCs/(Pl1SCs + Pl2SCs) (if both have 0 SCs set Rr2 = 0)
The score is based on the difference (D1) from both results:
D1 = Rr1 - Re1
D2 = Rr2 - Re2
Adjustments for each match (matchValue=mV):
- Value the importance of take-overs. (If a player bet only the half the whole match is worth only half.)
- Normalize the mV by the SC% difference of both players
Adjustments for the game (gameValue=gV):
- The game-value (gV) is set to: ((numberCountries -1 ) / numberCountries )^3 * (1 - (numberCountries / 100)
This gives small games a very low gV and the gV gets more, the more players are in the game.
- gV = 0 for Rinascimento games
- If the winner does not reached the supplyCenterTarget because of custom game-options adjust the importance of the game too
K-Factor (K) to get some real point-changes from the 0.xx results is set to 30.
Final calculation for each match:
scoreMatchPlayer1 = K * gV * mV * D1
scoreMatchPlayer2 = K * gV * mV * D2
Final calculation for each game:
ScorePlayer1 = sum ( score for each matches)