Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Rough approximation Re: ELO Calculations

Author: Odd Gunnar Malin

Date: 06:07:30 04/20/05

Go up one level in this thread


On April 19, 2005 at 17:35:40, Odd Gunnar Malin wrote:

>On April 19, 2005 at 16:07:33, Dieter Buerssner wrote:
>
>>On April 19, 2005 at 03:27:48, Odd Gunnar Malin wrote:
>>
>>>  // Alghorithm from Simon Schmitt's site on the net.
>>>
>>>  // Die offiziellen Elo-Zahlen werden nach folgender Formel errechnet:
>>>  //  Erwartung = 0,5 + 1,4217 x 10^-3  x D
>>>  //              - 2,4336 x 10^-7  x D x |D|
>>>  //              - 2,5140 x 10^-9  x D x |D|^2
>>>  //              + 1,9910 x 10^-12 x D x |D|^3
>>>
>>>  // wobei gilt:
>>>  //  D   = Differenz = Elo(eigene, alt) - Elo(Gegner, alt)
>>>  //  |D| = Absolutbetrag von D
>>
>>Interesting. I tried to reproduce the tables given by FIDE and the German chess
>>federation, and got very close results to the numbers given. However in the
>>tails, the error was larger than just a rounding error. I had tried formulas
>>based on the logistic distribution (they were given earlier in this thread,
>>too), and based on normal distribution. Both ´formulas give very similar
>>numbers, unless in the extreme tails of the distribution. The numbers listed in
>>the tables were somewhere in between ...
>>
>>Above formula looks like the author had a pocket calculator without scientific
>>functions, and neither had a logarithmic table book, nor a (good) slide rule :-)
>>
>>Well, above formula can be calculated with a pen only in reasonable time. It may
>>also be the case, that he really wanted the normal distribution. The formula for
>>the score uses the error function erf() then, which really will not be on a
>>slide rule. I think it could not easily be inverted for calculation of D.
>>
>>Regards,
>>Dieter
>
>You are probably right, what I eventually will end up with is a handcalculated
>table. But this approx is closer to what you see used at Twic etc. than using
>the log10 approx.
>
>Here is how I do it now (in real it is in a c++ class):
>
>int expectedscore[757];
>
>void init()
>{
>  // Initialise the expectedscore table
>  // This table gives elodifferance from score/game points 0.500 to 0.999
>  // where ratigndiff at 0 are put in cell 0, ratingdif at 1 are put in cell 1
>etc.
>  // Only positive elo diferances are put in the table.
>
>  // Alghorithm from Simon Schmitt's site on the net.
>  // http://www.terminus-notfallmedizin.de/privat/daselosystem.html
>
>  // Die offiziellen Elo-Zahlen werden nach folgender Formel errechnet:
>  //  Erwartung = 0,5 + 1,4217 x 10^-3  x D
>  //              - 2,4336 x 10^-7  x D x |D|
>  //              - 2,5140 x 10^-9  x D x |D|^2
>  //              + 1,9910 x 10^-12 x D x |D|^3
>
>  // wobei gilt:
>  //  D   = Differenz = Elo(eigene, alt) - Elo(Gegner, alt)
>  //  |D| = Absolutbetrag von D
>  int diff;
>  long double score;
>  long double c1,c2,c3,c4;
>  c1=0.0014217;
>  c2=0.00000024336;
>  c3=0.0000000025140;
>  c4=0.0000000000019910;
>  expectedscore[0]=500;
>  for (diff=1;diff<757;diff++)
>  {
>    score=0.5;
>    score+=c1*diff;
>    score-=c2*diff*diff;
>    score-=c3*diff*diff*diff;
>    score+=c4*diff*diff*diff*diff;
>    expectedscore[diff]=(int)(score*1000+0.5);
>  }
>};
>
>// To get the actual performance use:
>// perf=average+ratingdiff
>int getRatingDifferance(double score)
>{
>  bool negative=false;
>  if (score<0.5)
>  {
>    score=1.0-score;
>    negative=true;
>  }
>  int nscore=(int)((score+0.0005)*1000);
>  int diff;
>  for (diff=0;diff<757;diff++)
>  {
>    if (nscore<=expectedscore[diff])
>      break;
>  }
>
>  if (negative)
>    diff*=-1;
>  return diff;
>}
>
>// ratingdiff=your rating - average rating
>double getExpectedScore(int ratingdiff)
>{
>  bool negative=false;
>  if (ratingdiff<0)
>  {
>    ratingdiff*=-1;
>    negative=true;
>  }
>  double score=1.0;
>  if (ratingdiff<757)
>    score=(double)expectedscore[ratingdiff]/1000;
>  if (negative)
>    score=1.0-score;
>  return score;
>}
>
>As you see I use a table lookup to get both expected score and performance
>difference. It is only a table of 757 entries so it's easy to create it by hand
>and put it in a header file. I would probably do this when I get time.
>
>Odd Gunnar


I created a table with different methods to compare:

     Score      Fide      Log10  Norm.dist. Schmittform.  W/L form.
      0,50         0         0         0         0         0
      0,51         7         7         7         7         8
      0,52        14        14        14        14        16
      0,53        21        21        21        21        24
      0,54        29        28        28        28        32
      0,55        36        35        36        36        40
      0,56        43        42        43        43        48
      0,57        50        49        50        50        56
      0,58        57        56        57        57        64
      0,59        65        63        64        65        72
      0,60        72        70        72        72        80
      0,61        80        78        79        79        88
      0,62        87        85        86        87        96
      0,63        95        92        94        94       104
      0,64       102       100       101       102       112
      0,65       110       108       109       110       120
      0,66       117       115       117       117       128
      0,67       125       123       124       125       136
      0,68       133       131       132       133       144
      0,69       141       139       140       142       152
      0,70       149       147       148       150       160
      0,71       158       156       157       158       168
      0,72       166       164       165       167       176
      0,73       175       173       173       175       184
      0,74       184       182       182       184       192
      0,75       193       191       191       193       200
      0,76       202       200       200       202       208
      0,77       211       210       209       211       216
      0,78       220       220       218       221       224
      0,79       230       230       228       231       232
      0,80       240       241       238       241       240
      0,81       251       252       248       251       248
      0,82       262       263       259       262       256
      0,83       273       275       270       273       264
      0,84       284       288       281       284       272
      0,85       296       301       293       296       280
      0,86       309       315       306       309       288
      0,87       322       330       319       322       296
      0,88       336       346       332       336       304
      0,89       351       363       347       350       312
      0,90       366       382       362       366       320
      0,91       383       402       379       383       328
      0,92       401       424       397       401       336
      0,93       422       449       417       421       344
      0,94       444       478       440       443       352
      0,95       470       512       465       469       360
      0,96       501       552       495       499       368
      0,97       538       604       532       539       376
      0,98       589       676       581       597       384
      0,99       677       798       658       685       392
      1,00                                     757       400


How high do we need to go in score ratio? 11.5 point of 12 games is 0.96

I just generated the numbers from Excel and haven't looked at it too closely.

Odd Gunnar



This page took 0.01 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.