views:

156

answers:

3

Supposing a multi-player game, what you be the fairest way give final scores based on the previous scores of all players.

For example, in a two player match, player A having two times the score of player B. "A" finishing first would not give him a lot of points; finishing last, he would lose quite a lot of points.

+3  A: 

You probably want to use something like the FIDE uses for chess scores, which is the Elo rating system

Justin Cave
Hey, nice answer!
benjismith
+4  A: 

Have you ever read about the Elo Rating System, used in chess?

I don't think it's an exact fit for your scenario, but it might give you a few ideas.

benjismith
Well chosen link :-)
Justin Cave
+2  A: 

Microsoft has a pretty cool rating system that I have in my queue to implement someday. It is called TrueSkill. It lets you adjust ratings for players in head to head and when on teams. You can read about it here: http://research.microsoft.com/en-us/projects/trueskill/details.aspx

The advantage is that it is supposed to gravitate towards your True Skill quickly (usually in 20 games or less). The disadvantage is that it is quite complicated.

The ELO System (and others like it) have a disadvantage in that they suffer from a problem called point inflation. For example, if 1500 is intended to mean the average player, over time that will no longer be the case. With enough games, the true average (for the population as a whole) will eventually increase. Thus, the average player really may be 1600 but the intent was for 1500 to be average. Thus, many average players think they are better than they are:).

However, the advantage of the ELO system is that it is very easy to calculate.

Dunk
TrueSkill is quite complicated reading it the first few times. After a few months, I was able to implement it C# and wrote a blog post and math paper describing all of the details: http://www.moserware.com/2010/03/computing-your-skill.html
Jeff Moser