From 464befbe16de81e327e2317ac88aaab2311fbcdb Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Sat, 17 Mar 2012 17:31:59 +0100 Subject: [PATCH] Communicate match stddev from the ratings table to the Monte Carlo simulation. --- mcwordfeud.cpp | 9 ++++++++- www/index.pl | 20 +++++++++++++++++--- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/mcwordfeud.cpp b/mcwordfeud.cpp index 0010010..c8d28a4 100644 --- a/mcwordfeud.cpp +++ b/mcwordfeud.cpp @@ -14,6 +14,8 @@ using namespace std; #define MAX_PLAYERS 16 +float match_stddev = 70.0f; + struct player { int player_index; int points, margin; @@ -66,6 +68,11 @@ int main(int argc, char **argv) { int trials = atoi(argv[1]); + if (scanf("%f", &match_stddev) != 1) { + fprintf(stderr, "Could't read match stddev\n"); + exit(1); + } + int num_players; if (scanf("%d", &num_players) != 1) { fprintf(stderr, "Could't read number of players\n"); @@ -145,7 +152,7 @@ int main(int argc, char **argv) float mu = ratings[pl1] - ratings[pl2]; - int score = lrintf(draw_gaussian(mu, 82.9f)); + int score = lrintf(draw_gaussian(mu, match_stddev)); scores[pl1][pl2] = score; scores[pl2][pl1] = -score; } diff --git a/www/index.pl b/www/index.pl index 0967b82..c2bab05 100755 --- a/www/index.pl +++ b/www/index.pl @@ -22,6 +22,8 @@ binmode STDOUT, ':utf8'; my %players = (); my %ratings = (); my @matches = (); +my %parms = (); +my $match_stddev; sub sanitize { $_ = shift; @@ -50,6 +52,7 @@ EOF open MCCALC, ">", $tmpnam or die "$tmpnam: $!"; + printf MCCALC "%f\n", $match_stddev; printf MCCALC "%d\n", scalar keys %players; for my $id (keys %players) { @@ -124,12 +127,21 @@ EOF EOF } +# Get auxillary parameters +my $q = $dbh->prepare('SELECT * FROM ratings WHERE id < 0'); +$q->execute; + +while (my $ref = $q->fetchrow_hashref) { + $parms{$ref->{'id'}} = $ref->{'rating'}; +} +$match_stddev = $parms{-2} * sqrt(2.0); + # Get players and ratings my $season = 18; my $division = 1; my $subdivision = 1; -my $q = $dbh->prepare('SELECT fotballdeltagere.id,fotballdeltagere.navn,rating FROM fotballdeltagere JOIN fotballserier ON fotballdeltagere.serie=fotballserier.nr JOIN ratings ON fotballdeltagere.id=ratings.id AND sesong=? AND divisjon=? AND avdeling=?'); +$q = $dbh->prepare('SELECT fotballdeltagere.id,fotballdeltagere.navn,rating FROM fotballdeltagere JOIN fotballserier ON fotballdeltagere.serie=fotballserier.nr JOIN ratings ON fotballdeltagere.id=ratings.id AND sesong=? AND divisjon=? AND avdeling=?'); $q->execute($season, $division, $subdivision); while (my $ref = $q->fetchrow_hashref) { @@ -157,8 +169,10 @@ while (my $ref = $q->fetchrow_hashref) { } $q->finish; +POSIX::setlocale(&POSIX::LC_ALL, 'nb_NO.UTF-8'); + print CGI->header(-type=>'text/html; charset=utf-8', -expires=>'Thu, 01 Dec 1994 16:00:00 GMT'); -print <<"EOF"; +printf <<"EOF", $match_stddev; WLoH-plasseringsannsynlighetsberegning @@ -186,7 +200,7 @@ td {

Beregningen tar ikke hensyn til ujevn spillestyrke, ting som er sagt i forumet e.l.; den antar at samtlige uspilte kamper trekkes fra en normalfordeling med standardavvik - 82,9 poeng. Sannsynlighetene kan summere til andre tall enn 100% pga. avrunding. + %.1f poeng. Sannsynlighetene kan summere til andre tall enn 100%% pga. avrunding. Tallene vil variere litt fra gang til gang fordi utregningen skjer ved randomisering.

Andre divisjoner enn 1. divisjon kommer etter hvert.

-- 2.39.2