From: Steinar H. Gunderson
Date: Thu, 22 Mar 2012 00:21:15 +0000 (+0100)
Subject: Fix a leftover 1700 value in the README.
X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;ds=inline;h=b9f594c6d310024a0e0432787d27699655e1e163;p=wloh
Fix a leftover 1700 value in the README.
---
diff --git a/bayeswf.cpp b/bayeswf.cpp
index f94b1d3..cab5afc 100644
--- a/bayeswf.cpp
+++ b/bayeswf.cpp
@@ -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
diff --git a/mcwordfeud.cpp b/mcwordfeud.cpp
index 28a2a44..63b98e1 100644
--- a/mcwordfeud.cpp
+++ b/mcwordfeud.cpp
@@ -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);
diff --git a/www/index.pl b/www/index.pl
index ec7318a..5291632 100755
--- a/www/index.pl
+++ b/www/index.pl
@@ -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;
diff --git a/www/norm3.png b/www/norm3.png
index 105537b..e5dfc3f 100644
Binary files a/www/norm3.png and b/www/norm3.png differ
diff --git a/www/rating.pl b/www/rating.pl
index 89c75b9..d1ba945 100755
--- a/www/rating.pl
+++ b/www/rating.pl
@@ -66,7 +66,7 @@ printf <<"EOF", $params{-3}, $match_stddev;
- 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}.
- - Rimelighetfunksjon, prior: Normalfordeling med µ=1500, σ=%.1f (est.)
+ - Rimelighetfunksjon, prior: Normalfordeling med µ=500, σ=%.1f (est.)
- Rimelighetfunksjon, per kamp: Normalfordeling med µ=(score1 - score2), σ=%.1f (est.)
- Vekting: Inneværende sesong samt de tre siste vektes fullt ut
(likt med prior). Deretter eksponentielt synkende vekting, med
diff --git a/www/ratings-explained.html b/www/ratings-explained.html
index ace8996..f48e76e 100755
--- a/www/ratings-explained.html
+++ b/www/ratings-explained.html
@@ -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 ikke å 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.
Imidlertid er Wordfeud er et spill der tilfeldigheter spiller en viktig rolle,
@@ -44,7 +44,7 @@
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).
@@ -107,20 +107,20 @@
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)?
+ at en gjennomsnittlig spiller er 500 poeng, er det da rimelig
+ at David skal ha rating 700 (som er helt mot toppen av lista)?
De fleste vil si nei; det er ikke rimelig. Vi uttrykker dette
med en utgangsantagelse (eller engelsk «prior») om
ratingen hos folk generelt, og igjen kommer normalfordelingen inn:
-
+
Kurven her sier rett og slett at det er få av de aller beste og dårligste spillerne;
- 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 – det er dog ingen fullstendig fiks.
Minorization-maximization
@@ -138,9 +138,9 @@
I stedet bruker vi en metode som på fint kalles
cyclic minorization-maximization (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