In the following section first we roughly describe the basic rating assumptions and its operation and later we present the detailed equations used for the rating calculation.
Our rating system is based on the previous results achieved by players and to some extend can be used to predict their future results. We have used statistical methods to calculate the ratings properly, but we have also tried to design the rating in a way that will meet the demands of the players' community as well as possible.
Browsing through available rating systems we've been looking for a proper solution that has strong mathematical foundations and can generate plausible ratings. Probably the most popular rating system (know as ELO system) was designed by Dr. Arpad Elo for chess. That system was adopted by FIDE (Federation Internationale des Echecs) in 1970 and since then its variants have been adopted by most chess associations all over the world. It is also used as a rating system for other games.
ELO system is pretty good, but there are some problems with it. In 2001 Professor Mark E. Glickman designed a new rating system (the so-called Glicko system). Basically, it resembles ELO system - the main difference is that it introduces the so-called rating deviation that describes the uncertainty in a rating. The Glicko system prevents some pathological situations that happen when a player plays with a new player who has an unknown rating. We've decided to use a slightly modified version of Glicko system for our games:
GR: The Glicko rating used in our games
Step a) For each player we convert the Glicko rating (in our games we use two ranges for rating - some games (pool, darts etc.) have rating in range 0-10000, other (chess, checkers etc.) in range 0 -3000 - we present equations for ratings in range 0-10000, equation for rating in range 0-3000 are analogical) to internal Glicko rating (range from 0-3000 with the center at 1500).
IGR: the internal Glicko rating
IGR = 1500 + 1500 * (GR-5000)/10000
Step b) In the Glicko rating we use a rating deviation - we recalculate initial rating deviation:
IGRD: the internal Glicko rating deviation
If no games were played before:
IGRD = 150 (in original Glicko term 350 was used - we find that constant improper for some reasons).
Otherwise:
T: time from last game played by player (in days)
IGRD = min(150,sqrt(IGRD* IGRD+63.2*T)
Step c) We calculate the new internal Glicko rating.
NIGRA: the new internal Glicko rating
NIGRDA: the new internal Glicko rating deviation
NIGRB: the new internal Glicko rating
NIGRDB: the new internal Glicko rating deviation
NIGRA = IGRA + QA/(1/ IGRDA2 + 1/DA2) * QRDB * (SA,B - EA,B)
NIGRDA = sqrt(1/(1/ IGRDA2 + 1/DA2))
NIGRB = IGRB + QB/(1/ IGRDB2 + 1/DB2) * QRDA * (SB,A - EB,A)
NIGRDB = sqrt(1/(1/ IGRDB2 + 1/DB2))
Where:
PI: pi constant (3.14...)
SX,Y: the result of the game: 1 when X wins, 0 if Y wins, 0.5 if a draw
Q = ln(10) / 400
QRD = 1/sqrt(1+3*(Q*IGRD/PI)2)
EX,Y = 1/(1+10-QRDy*(IGRx-IGRy)/400)
DX = 1/sqrt(QX*QX*QRD Y *QRD Y * EX,Y * (1-EX,Y))
Step d) We convert the new internal Glicko rating back to the new Glicko rating:
NGR = 5000 + 5000 * (NIGR-1500)/3000
And that rating is displayed in the game.
What do we consider as cheating? When someone does not finish the rated game (intentionally or by network malfunction), he is penalized. Unfortunately in that way people with poor Internet connections are penalized additionally, but we are forced to do it, because some people simulate network malfunction in order to quit games that they prefer to not finish. In order to minimize the impact of network malfunctions we do not consider first disconnections as cheating - if however disconnections happen more often, we start to penalize players and to decrease their ratings. It is achieved by storing the exact time the disconnection occurred in the database and granting the player so called bombs that affect the rating.