So I am developing a game where there will be two players both having an initial rating.
Now, I want to calculate new rating based on their score.
For eg: if player1
scores 50
(unitless) and player2
scores 30
, then player1
rating should increase more then in the case where player1
scores 40
and player2
scores 30
and wins by a great margin.
The Elo rating system only takes account of wins and losses and not the margin of winning.
Any help would be appreciated.
A simple solution is: increase the winning players rating by abs(player1.score - player2.score)
and decrease the loser's rating by the same amount.
I would suggest modifying this method slightly to make it more robust, for example: 10*ln(abs(player1.score - player2.score))
Edit
Define:
S(X) = score after X matches
and E(X) = elo after X matches
. We are interested in calculating S(X+1)
.
S(X+1) = S(X) + k*(E(X+1)-E(X))*ln(abs(player1.score - player2.score)).
Here, k
is a constant that can be tweaked by trial and error. This model takes into account both rating difference (via elo) and score difference.