m-ad rating system

Discussion of chess software programming and technical issues.

Moderator: Ras

wlod

Re: Second application / Re: m-ad rating system

Post by wlod »

wlod wrote:Assume that the first player's pre-match rating was lower, A < B, but s/he is making progress by achieving score a > 1/2 in each game. How many games it will take the first player to overcome the second?

Code: Select all

        n  >  log(1 - (B-A)/(2*s)) / log(q)

i.e. A_n > B_n if and only if the above inequality "n > ..." holds.
In particular, when the result of each game is 1:0, then:

Code: Select all

        n  >  log(1 - (B-A)/(2*B)) / log(q)
i.e.
        ----------------------------------
        n  >  log(1/2 + A/(2*B)) / log(q)
        ----------------------------------

EXAMPLE -- A new player gets the initial average rating A := M, and plays a match against a player rated (just efore the match) B := 2*M, winning every game. Then the new player will get a higher rating than the other player when the number n of games exceeds:
    • n > log(3/4) / log(q)
which for dyn := 1/25 gives q = 1-dyn = 24/25, and:
    • n > log(3/4) / log(24/25) ~=~ 7.047
Thus after 7 games the ratings of the two players will be nearly equal, and after the eight game the first player will overcome the second player. At these moments both players will have rating close to (3/2)*M (because m-ad rating is stable). End of Example
Rémi Coulom
Posts: 438
Joined: Mon Apr 24, 2006 8:06 pm

Re: Second application / Re: m-ad rating system

Post by Rémi Coulom »

Thanks Wlod for all the details of your rating system.

If you'd like to convince people that your system works well, you should present experiment results. For instance, use a database of chess games, and compare the quality of your ratings with those of the Elo or Glicko system. If your system predicts the winner more frequently, that would be a convincing indication that it works well.

Rémi
wlod

Re: Second application / Re: m-ad rating system

Post by wlod »

(I wrote and thought that I have posted a reply. Frustrating.)
Rémi Coulom wrote:Thanks Wlod for all the details of your rating system.
Thank you, Rémi, for your kind words and a good advice.
If you'd like to convince people that your system works well, you should present experiment results. For instance, use a database of chess games, and compare the quality of your ratings with those of the Elo or Glicko system. If your system predicts the winner more frequently, that would be a convincing indication that it works well.

Rémi
I came up with the m-ad rating system in 1993 or 4, and at that time I have written a C++ program, which was accepting the data (players and results of the games), including an optional feature: we could agree in advance of, say, an 8-game match between us, that we rate our match with respect to the total result, and regardless of the order of our wins, draws and loses. If your score were 5 and mine 3, that we would enter 5/8 as your score for each of the 8 games (and 3/8 for me). It had a similar option for round robin tournaments and match-tournaments. Such rating woiuld be allowed under the condition that none of the involved players played a rated game outside the given competition during the event. That old PC is gone and the program too. I should write one anew. Then it's easy to enter true or simulated data.

It's all important but at this moment writing a more extensive theoretical anlysis has a higher priority to me (so far I have presented my old stuff).

Best regards,
  • Wlod
wlod

Re: Second application / m-ad rating system

Post by wlod »

wlod wrote:Assume that the first player's pre-match rating was lower, A < B, but s/he is making progress by achieving score a > 1/2 in each game. How many games it will take the first player to overcome the second? Let's compute a sequence of equivalent inequalities:

Code: Select all

    A_n > B_n

if and only if

    -------------------------------------
    n  >  log((A+B)*(a-b)/(2*s)) / log(q)
    -------------------------------------

Both the numerator and denominator logarithms above are negative. Let's get positive expressions instead, by applying log(x) = -log(1/x) and
    • log(x)/log(y) = log(1/x) / log(1/y)
so:

Code: Select all

    A_n > B_n    if and only if

    --------------------------------------
    n  >  log(2*s/((A+B)*(a-b)) / log(1/q)
    --------------------------------------

Next:

Code: Select all


    2*s  =  2*(a*B - b*A)

      =  (A+B)*(a-b)  + (B-A)*(a+b)

            =  (A+B)*(a-b) + B-A
i.e.

        -------------------------
        2*s  =  (A+B)*(a-b) + B-A
        -------------------------

hence

Code: Select all

    A_n > B_n    if and only if

  -----------------------------------------------
  n  >  log(1 + (B-A) / ((A+B)*(a-b))) / log(1/q)
  -----------------------------------------------

Let's introduce an intuitive parameter x such that dyn = 1/(1+x), so that
    • 1/q = 1/(1-dyn) = 1 + 1/x
Then
    • 1+x > 1/log(1/q) > x
(log stands here for the natural logarithm). It follows that

Code: Select all

if
    ---------------------------------------
    n  >/  x * log(1 + (B-A)/((A+B)*(a-b)))
    ---------------------------------------

then    A_n > B_n

In particular, for a=1 (hence b=0), we get:

Code: Select all

if  a=0  and

    -------------------------------
    n  >/  x * log(1 + (B-A)/(A+B))
    -------------------------------

then    A_n > B_n

Let's simplify this further, by applying y > log(1+y),

Code: Select all

if  a=0  and

    --------------------
    n  >/  x*(B-A)/(A+B)
    --------------------

then    A_n > B_n

For instance, when the pre-match rating of the second player is x times the rating of the first one, B/A = x, then the first player needs about x wins in a row to overcome, rating wise, the second player. Thus via x we get a good feel of the dynamic constant dyn; e.g. set x:=12, i.e. dyn:=1/13, and it will take you 12 wins in a row against a player, whose rating is 12 times higher, to overcome that player's rating (possibly one less--you need to check the earlier, exact formulas above; exact formulas are more complex).

On the other hand, when x > 1, and the ratings are A := c*(x-1) and B := c*(x+1), i.e. proportional to x-1 and x+1 respectively, then the two ratings are close enough (or, when x>0 is small, the dynamic parameter dyn is high) for just one game won by the first player to cause a swap of the ranking of the two players.

For instance, we may infer from Fischer's 9:9 rule that he considered 10:9 advantage insignificant. This means perhaps that one game should be enough to swap the ranking of the two players whose ratings are in a 10:9 proportion. In that case we should set x := 19, i.e. dyn := 1/20. Then, if your pre-game rating is 9/10 of your opponent rating, by winning your game against him/her--just one game--you will get ahead. Thus a m-ad system with the dynamic constant dyn := 1/20 may be called a m-ad system with Fischer's dynamics.

*******

regards,
  • Wlod
wlod

Correction--Re: Second application / m-ad rating system

Post by wlod »

It's a great pity that it is not possible to edit posts. Below, I am correcting a minor technical point--I was off by 1 in one place, no big deal. The changes are minor, but it is cleaner to rewrite the whole thing. Also, For the sake of simplicity, I have provided the important part of the story, but for your and mine piece of mind I'll give the detailed, full story in the next post (let me keep this one reasonably short). My error was that I had x+1 instead of simply x, and I had a consistent (incredible) typo a=0 instead of a=1 (consistent typo--quite an oxymoron, but true).

***
wlod wrote:Assume that the first player's pre-match rating was lower, A < B, but s/he is making progress by achieving score a > 1/2 in each game. How many games it will take the first player to overcome the second? Let's compute a sequence of equivalent inequalities:

Code: Select all

    A_n > B_n

if and only if

    -------------------------------------
    n  >  log((A+B)*(a-b)/(2*s)) / log(q)
    -------------------------------------

Both the numerator and denominator logarithms above are negative. Let's get positive expressions instead, by applying log(x) = -log(1/x) and
    • log(x)/log(y) = log(1/x) / log(1/y)
so:

Code: Select all

    A_n > B_n    if and only if

    --------------------------------------
    n  >  log(2*s/((A+B)*(a-b)) / log(1/q)
    --------------------------------------

Next:

Code: Select all


    2*s  =  2*(a*B - b*A)

      =  (A+B)*(a-b)  + (B-A)*(a+b)

            =  (A+B)*(a-b) + B-A
i.e.

        -------------------------
        2*s  =  (A+B)*(a-b) + B-A
        -------------------------

hence

Code: Select all

    A_n > B_n    if and only if

  -----------------------------------------------
  n  >  log(1 + (B-A) / ((A+B)*(a-b))) / log(1/q)
  -----------------------------------------------

Let's introduce an intuitive parameter x := 1/dyn (thus x > 1), so that
    • 1/q = 1/(1-dyn) = 1 + 1/(x-1)x
Then
    • x > 1/log(1/q) > x-1
(log stands here for the natural logarithm). It follows that

Code: Select all

if
    ---------------------------------------
    n  >/  x * log(1 + (B-A)/((A+B)*(a-b)))
    ---------------------------------------

then    A_n > B_n

In particular, for a=1 (hence b=0), we get:

Code: Select all

if  a=1  and

    -------------------------------
    n  >/  x * log(1 + (B-A)/(A+B))
    -------------------------------

then    A_n > B_n

Let's simplify this further, by applying y > log(1+y),

Code: Select all

if  a=1  and

    --------------------
    n  >/  x*(B-A)/(A+B)
    --------------------

then    A_n > B_n

For instance, when the pre-match rating of the second player is x times the rating of the first one, B/A = x, then the first player needs about x wins in a row to overcome, rating wise, the second player. Thus via x we get a good feel of the dynamic constant dyn; e.g. set x:=12, i.e. dyn:=1/12, and it will take you 12 wins in a row against a player, whose rating is 12 times higher, to overcome that player's rating (possibly one less--you need to check the earlier, exact formulas above; exact formulas are more complex).

On the other hand (when, as always, x > 1), and the ratings are A := c*(x-1) and B := c*(x+1), i.e. proportional to x-1 and x+1 respectively, then the two ratings are close enough (or, when x>0 is small, the dynamic parameter dyn is high) for just one game won by the first player to cause a swap of the ranking of the two players.

For instance, we may infer from Fischer's 9:9 rule that he considered 10:9 advantage insignificant. This means perhaps that one game should be enough to swap the ranking of the two players whose ratings are in a 10:9 proportion. In that case we should set x := 19, i.e. dyn := 1/19. Then, if your pre-game rating is 9/10 of your opponent rating, by winning your game against him/her--just one game--you will get ahead. Thus a m-ad system with the dynamic constant dyn := 1/19 may be called a m-ad system with Fischer's dynamics.

*******

Regards,
  • Wlod
[/quote]