]> git.sesse.net Git - wloh/commitdiff
Fix a leftover 1700 value in the README.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Thu, 22 Mar 2012 00:21:15 +0000 (01:21 +0100)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Thu, 22 Mar 2012 00:21:15 +0000 (01:21 +0100)
bayeswf.cpp
mcwordfeud.cpp
www/index.pl
www/norm3.png
www/rating.pl
www/ratings-explained.html

index f94b1d33f6e213f281fc308ad111ab06a69778ac..cab5afcc896cdc9d34be48a96c2037da2ed0d0c8 100644 (file)
@@ -13,7 +13,7 @@
 using namespace std;
 using namespace Eigen;
 
-#define PRIOR_MU 1500
+#define PRIOR_MU 500
 #define PRIOR_WEIGHT 1.0
 #define MAX_PLAYERS 4096
 #define DUMP_RAW 0
index 28a2a44c83cd19deb2bd51704d5c1dd0016ef805..63b98e1ae33f578ca63aa4754a6b5ca15a1cb7b0 100644 (file)
@@ -107,7 +107,7 @@ int main(int argc, char **argv)
                        exit(1);
                }
                if (ret < 2) {
-                       rating = 1500.0f;
+                       rating = 500.0f;
                }
 
                players.push_back(buf);
index ec7318a4079685aca9f500b41123ab4df27f24b8..529163266df023dc7e173e5a6dfec0c4f7a454e3 100755 (executable)
@@ -61,7 +61,7 @@ EOF
        printf MCCALC "%d\n", scalar keys %players;
 
        for my $id (keys %players) {
-               my $rating = $used_ratings->{$id} // 1500.0;
+               my $rating = $used_ratings->{$id} // 500.0;
                printf MCCALC "%s %f\n", $id, $rating;
        }
 
@@ -92,7 +92,7 @@ EOF
                chomp;
                my @x = split /\s+/;
                my $id = $x[0];
-               my $player = sprintf "%s (%.0f ± %.0f)", $players{$id}, ($ratings{$id} // 1500.0), ($ratings_stddev{$id} // $parms{-3});
+               my $player = sprintf "%s (%.0f ± %.0f)", $players{$id}, ($ratings{$id} // 500.0), ($ratings_stddev{$id} // $parms{-3});
                $prob{$player} = [ @x[1..$#x] ];
        }
        close MCCALC;
index 105537b104c661a012e3572502b56ef6fcff8a83..e5dfc3f89c40714cc88bb61173e1c7c741ea930c 100644 (file)
Binary files a/www/norm3.png and b/www/norm3.png differ
index 89c75b96e2ee89a6e64f862fd61bc8757ce5c096..d1ba9450a00255dcf5a1d1d3f89e1f561d3470eb 100755 (executable)
@@ -66,7 +66,7 @@ printf <<"EOF", $params{-3}, $match_stddev;
 
     <ul>
       <li>MLE-basert modell med én skalar (styrke) per spiller og to globale skalarer (begge standardavvik, se under), løst med syklisk MM (minorization-maximization). Antall iterasjoner før konvergens: $params{-1}.</li>
-      <li>Rimelighetfunksjon, prior: Normalfordeling med µ=1500, &sigma;=%.1f (est.)</li>
+      <li>Rimelighetfunksjon, prior: Normalfordeling med µ=500, &sigma;=%.1f (est.)</li>
       <li>Rimelighetfunksjon, per kamp: Normalfordeling med µ=(score1 - score2), &sigma;=%.1f (est.)</li>
       <li>Vekting: Inneværende sesong samt de tre siste vektes fullt ut
        (likt med prior). Deretter eksponentielt synkende vekting, med
index ace89963c81f3a8f0a3f7940e5ff2f1cb8162458..f48e76e54aea98150709815c690f4553ecfba0b5 100755 (executable)
@@ -25,7 +25,7 @@
       helt vanlig tall, og det er denne vi prøver å måle ut fra resultatene vi ser.
       (Vi prøver altså eksplisitt <em>ikke</em> å dele ut «poeng» for å gjøre det bra,
       kun å estimere den ekte spillestyrken din; selv et tap kan øke ratingen din.)
-      Vi sier at hvis Anne har spillestyrke (rating) 1550 og Bjørn har 1500,
+      Vi sier at hvis Anne har spillestyrke (rating) 550 og Bjørn har 500,
       vil Anne i gjennomsnitt slå Bjørn med 50 poeng hvis de spiller.</p>
 
     <p>Imidlertid er Wordfeud er et spill der tilfeldigheter spiller en viktig rolle,
@@ -44,7 +44,7 @@
 
     <p>Ratingen din betyr altså bare noe i forhold til andre spillere, så det
       absolutte tallet er ikke så viktig i seg selv. Gjennomsnittlig spillestyrke
-      settes i utgangspunktet til 1500 poeng; dette er et helt vilkårlig tall,
+      settes i utgangspunktet til 500 poeng; dette er et helt vilkårlig tall,
       men er valgt delvis ut fra tradisjon i andre ratingsystemer. Det kunne like
       gjerne vært 0 eller 100000 (selv om det kanskje virker litt dust at
       en dårlig spiller har rating 99800 og en veldig god 100200).</p>
       finne ekte spillestyrke til relativt nye spillere. Hvis for
       eksempel David har banket Emma, Fredrik og Gunnar med 200 poeng
       nedi sin avdeling i 8. divisjon, og man antar i utgangspunktet
-      at en gjennomsnittlig spiller er 1500 poeng, er det da rimelig
-      at David skal ha rating 1700 (som er helt mot toppen av lista)?</p>
+      at en gjennomsnittlig spiller er 500 poeng, er det da rimelig
+      at David skal ha rating 700 (som er helt mot toppen av lista)?</p>
 
     <p>De fleste vil si nei; det er ikke rimelig. Vi uttrykker dette
       med en <em>utgangsantagelse</em> (eller engelsk «prior») om 
       ratingen hos folk generelt, og igjen kommer normalfordelingen inn:</p>
 
-    <p style="text-align: center;"><img src="norm3" style="width: 372px; height: 334px;" alt="Normalfordelingskurve med forventningsverdi 1500" /></p>
+    <p style="text-align: center;"><img src="norm3" style="width: 372px; height: 334px;" alt="Normalfordelingskurve med forventningsverdi 500" /></p>
 
     <p>Kurven her sier rett og slett at <em>det er få av de aller beste og dårligste spillerne</em>;
-      de fleste ligger rundt 1500 noe sted. Det er rett og slett ikke veldig
-      rimelig at en spiller ligger rundt 1700 i seg selv, og inntil det finnes
+      de fleste ligger rundt 500 noe sted. Det er rett og slett ikke veldig
+      rimelig at en spiller ligger rundt 700 i seg selv, og inntil det finnes
       data som sier noe annet (i praksis et relativt stort antall kamper med
-      godt resultat) vil dette trekke spilleren nærmere 1500. I stor grad
+      godt resultat) vil dette trekke spilleren nærmere 500. I stor grad
       løser dette problemet &ndash; det er dog ingen fullstendig fiks.</p>
 
     <h2>Minorization-maximization</h2>
     <p>I stedet bruker vi en metode som på fint kalles
       <em>cyclic minorization-maximization</em> (syklisk MM, nært beslektet med EM-algoritmene
       som er i vid bruk). Den er dog ikke så fryktelig komplisert for vårt tilfelle:
-      Først antar vi alle har rating på 1500. Så tar vi Annes rating og
+      Først antar vi alle har rating på 500. Så tar vi Annes rating og
       setter henne riktig (dvs., med maksimal rimelighet) i forhold til
-      alle andre (for eksempel 50 poeng over Bjørns rating på 1500 hvis
+      alle andre (for eksempel 50 poeng over Bjørns rating på 500 hvis
       det er all informasjonen vi har). Så setter vi Bjørn riktig i forhold
       til alle andre, og så videre for alle spillere. Nå er antageligvis
       Anne plassert litt feil (siden Bjørn har flyttet på seg), så vi oppdaterer