9

For a Foosball game at work we implemented a rating system based on the Elo system. Allthough we achieved a sensible result so far, which provided us with a lot of fun (which is the goal) we feel we can do better by:

  1. accounting for uncertainty for new players
  2. removing/ignoring inactive players

Game description

A game is played by 4 players, 2 versus 2. The first team to reach 10 goals with a two point difference wins.

Current rating system

Each player gets an initial rating of 1000 points. When a match is played the outcome of the match is predicted by an adaptation of Elo's rating system. First we predict the probability of team A scoring a single goal before team B (team A wins one 'ball') by $$ E_A = \frac{1}{1 + 10^{(R_B-R_A)/800}}$$ where $E_A$ is the probability that team A will win this ball and $R_{A,B}$ the sum of ratings of the players in team $A,B$ respectively.

The predicted outcome of the match is then found by 'translating' this prediction to 20 balls: $$E_{\Delta S} = 20*(E_A-\frac{1}{2}) $$ with $E_{\Delta S}$ the predicted difference in score and $E_A$ the probability of team A winning a ball. If $E_{\Delta S} > 0$ team A is expected to win with a difference of $E_{\Delta S}$ goals, if $E_{\Delta S} < 0$ team B is expected to win with a difference of $E_{\Delta S}$.

The change in rating for the players in this match is then calculated from the difference between the prediction and the actual outcome $\Delta S$: $$ \Delta r = k\cdot (\Delta S - E_{\Delta S})) $$ With $k$ a parameter to make the changes in rating more agressive. For us a value of $k=10$ works nicely since every goal different from the predicted score earns you $10$ points. A nice round number to remember in the heat of the game.

The ratings for the players in the match are then updated by adding $\Delta r$ to their old rating for the players in team A, and subtracting $\Delta r$ for the players in team B.

Experience

I have not thoroughly examined the performance of this algorithm since I know it has some flaws. However the expected score predictions 'feel' good. They match relatively well with what we expect when playing with/against people we know.

Furthermore in the last 50 of 170 the error in expected score $\epsilon = \mathrm{abs}(E_{\Delta S} - \Delta S)$ was on average 3. This may not be as accurate as it gets, but we consider this reasonable (especially since we have not accounted for the fact that games must end with a 2 point difference).

Question 1

We do notice however that the most inaccurate predictions are given when a player's rating is insanely high or low because he/she has recently achieved a very improbable result (lost or won with a very large score difference). This we would like to solve by predicting how accurate the rating of a player is, and adapting the change in rating accordingly. This could also help the fact that new players start with a 1000 points which is in most cases not accurate at all.

What do you think is a good measure for the accuracy of the current rating and what is an appropriate relation to the ratingchange?

Question 2

We have a high throughput of employees, and so there are a lot of players that no longer play. We can however not simply delete their entries since the average amount of points per player must remain at 1000 so as to counteract inflation/deflation.

What are your ideas on removing players and what should I do with their points?

Thanks

Also rough thoughts and ideas are welcome, we may be able to translate your thoughts and ideas to formulas ourselves.

1 Answers1

0

I think you want a version of Microsoft's TrueSkill Ranking System, which has been used for matchmaking for many games on XBox Live. Briefly, each player's skill level is represented with a normal distribution parameterized by mean and variance, which would let you capture the level of confidence in a player's rating. In addition to a bunch of Microsoft papers, it looks like there is some open source software available that could be used to make it easier to implement this.