next up previous
Next: Standard rating formula Up: Details of the Rating Previous: Effective number of games

Special rating formula

This procedure is to be used for players with either $N\leq 8$, or players who have had either all wins or all losses in all previous rated games.

The algorithm described here extends the old provisional rating formula by ensuring that a rating does not decrease from wins or increase from losses. In effect, the algorithm finds the rating at which the attained score for the player equals the sum of expected scores, with expected scores following the ``provisional winning expectancy'' formula below. For most situations, the resulting rating will be identical to the old provisional rating formula. Instances that will result in different ratings are when certain opponents have ratings that are far from the player's initial rating. The computation to determine the ``special'' rating is iterative, and is implemented via a linear programming algorithm.

Define the ``provisional winning expectancy,'' $\PWe$, between a player rated $R$ and his/her $i$-th opponent rated $R_i$ to be

\begin{displaymath}
\PWe(R,R_i) = \left\{ \begin{array}{ll}
0 & \mbox{if $R \leq...
...400$} \\
1 & \mbox{if $R \geq R_i + 400$}
\end{array}\right.
\end{displaymath}

Let $R_0$ be the ``prior'' rating of a player (either the pre-event rating for rated players, or the Step 1 imputed rating for unrated players), and $N'$ be the effective number of games. Also let $m$ be the number of games in the current event, and let $S$ be the total score out of the $m$ games (counting each win as 1, each loss as 0, and each draw as 0.5).

The variables $R_0'$ and $S'$, which are the adjusted initial rating and the adjusted score, respectively, are used in the special rating procedure. If a player has competed previously, and all the player's games were wins, then let

\begin{eqnarray*}
R_0' &=& R_0 - 400 \\
S' &=& S + N'
\end{eqnarray*}



If a player has competed previously, and all the player's games were losses, then let

\begin{eqnarray*}
R_0' &=& R_0 + 400 \\
S' &=& S
\end{eqnarray*}



Otherwise, let

\begin{eqnarray*}
R_0' &=& R_0 \\
S' &=& S + \frac{N'}{2} \\
\end{eqnarray*}



The objective function

\begin{displaymath}
f(R) = N' \times \PWe(R,R_0') +
\left( \sum_{i=1}^m \PWe(R, R_i) \right) - S'
\end{displaymath}

which is the difference between the sum of provisional winning expectancies and the actual attained score when a player is rated $R$, is equal to 0 at the appropriate rating. The goal, then, is to determine the value of $R$ such that $f(R)=0$ within reasonable tolerance. The procedure to find $R$ is iterative, and is described as follows.

Let $\varepsilon=10^{-7}$ be a tolerance to detect values different from zero. Also, let $x_0=R_0'-400$, $y_0=R_0'+400$, and, for $i=1,\ldots, m$, $x_i=R_i-400$, $y_i=R_i+400$. Denote the unique $x_i$ and $y_i$, $i=0,\ldots, m$, as the collection

\begin{displaymath}
S_z = \{z_1,z_2,\ldots,z_{Q}\}
\end{displaymath}

If there are no duplicates, then $Q=2m+2$. These $Q$ values are the ``knots'' of the function $f$ (essentially the value where the function ``bends'' abruptly).

  1. Calculate

    \begin{displaymath}
M = \frac{N'R_0' + \sum_{i=1}^m R_i + 400(2S-m)}{N'+m}
\end{displaymath}

    This is the first estimate of the special rating (in the actual implemented rating program, $M$ is set to $R_0'$, but the final result will be the same - the current description results in a slightly more efficient algorithm).
  2. If $f(M) > \varepsilon$, then
    1. Let $z_a$ be the largest value in $S_z$ for which $M > z_a$.
    2. If $\vert f(M)-f(z_a)\vert < \epsilon$, then set $M \leftarrow z_a$. Otherwise, calculate

      \begin{displaymath}
M^* = M - f(M) \left( \frac{M - z_a}{f(M) - f(z_a)} \right)
\end{displaymath}

      • If $M^* < z_a$, then set $M \leftarrow z_a$, and go back to 2.
      • If $z_a \leq M^* < M$, then set $M \leftarrow M^*$, and go back to 2.
  3. If $f(M) < -\varepsilon$, then
    1. Let $z_b$ be the smallest value in $S_z$ for which $M < z_b$.
    2. If $\vert f(z_b)-f(M)\vert < \epsilon$, then set $M \leftarrow z_b$. Otherwise, calculate

      \begin{displaymath}
M^* = M - f(M) \left( \frac{z_b - M}{f(z_b) - f(M)} \right)
\end{displaymath}

      • If $M^* > z_b$, then set $M \leftarrow z_b$, and go back to 3.
      • If $M < M^* \leq z_b$, then set $M \leftarrow M^*$, and go back to 3.
  4. If $\vert f(M)\vert \leq \varepsilon$, then let $p$ be the number of $i$, $i=1,\ldots, m$ for which

    \begin{displaymath}
\vert M - R_i\vert \leq 400.
\end{displaymath}

    Additionally, if $\vert M - R_0'\vert \leq 400$, set $p \leftarrow p+1$.
    1. If $p > 0$, then exit.
    2. If $p = 0$, then let $z_a$ be the largest value in $S_z$ and $z_b$ be the smallest value in $S_z$ for which $z_a < M < z_b$. If
      • $z_a\leq R_0 \leq z_b$, then set $M \leftarrow R_0$.
      • $R_0 < z_a$, then set $M \leftarrow z_a$.
      • $R_0 > z_b$, then set $M \leftarrow z_b$.
If the final value of $M$ is greater than 2700, the value is changed to 2700. The resulting value of $M$ is the rating produced by the ``special'' rating algorithm. Note that these computations do not depend on whether the event is a ``full-K'' or ``half-K'' event.


next up previous
Next: Standard rating formula Up: Details of the Rating Previous: Effective number of games
Mark Glickman
2004-09-22