From b9f594c6d310024a0e0432787d27699655e1e163 Mon Sep 17 00:00:00 2001
From: "Steinar H. Gunderson"
Date: Thu, 22 Mar 2012 01:21:15 +0100
Subject: [PATCH] Fix a leftover 1700 value in the README.
---
bayeswf.cpp | 2 +-
mcwordfeud.cpp | 2 +-
www/index.pl | 4 ++--
www/norm3.png | Bin 3006 -> 3001 bytes
www/rating.pl | 2 +-
www/ratings-explained.html | 20 ++++++++++----------
6 files changed, 15 insertions(+), 15 deletions(-)
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 105537b104c661a012e3572502b56ef6fcff8a83..e5dfc3f89c40714cc88bb61173e1c7c741ea930c 100644
GIT binary patch
literal 3001
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
H?K%Emg{5Ok
literal 3006
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
N5F9}9uOi2u_zeXWZHfQ@
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
--
2.39.2