]> 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;
 
 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
 #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) {
                        exit(1);
                }
                if (ret < 2) {
-                       rating = 1500.0f;
+                       rating = 500.0f;
                }
 
                players.push_back(buf);
                }
 
                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) {
        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;
        }
 
                printf MCCALC "%s %f\n", $id, $rating;
        }
 
@@ -92,7 +92,7 @@ EOF
                chomp;
                my @x = split /\s+/;
                my $id = $x[0];
                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;
                $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>
 
     <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
       <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.)
       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,
       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
 
     <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>
       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
       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>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>;
 
     <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
       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>
       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:
     <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
       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
       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