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.