]> git.sesse.net Git - foosball/blobdiff - foosrank.cpp
Adjusted initial parameters for maximum prediction power; in particular,
[foosball] / foosrank.cpp
index 4d09eb5d4a992e26e618a00f1bea1ade54cc07c8..03edcb5b4c1047572a644aa4122af70e288c32f7 100644 (file)
@@ -106,27 +106,31 @@ static void compute_opponent_rating_pdf(int k, int a, double mu2, double sigma2,
        int sz = (6000.0 - 0.0) / int_step_size;
        double h = (6000.0 - 0.0) / sz;
 
-       fftw_plan f1, f2, b;
-       complex<double> *func1, *func2, *res;
-
-       func1 = reinterpret_cast<complex<double> *>(fftw_malloc(sz*2*sizeof(complex<double>)));
-       func2 = reinterpret_cast<complex<double> *>(fftw_malloc(sz*2*sizeof(complex<double>)));
-       res = reinterpret_cast<complex<double> *>(fftw_malloc(sz*2*sizeof(complex<double>)));
-       f1 = fftw_plan_dft_1d(sz*2,
-               reinterpret_cast<fftw_complex*>(func1),
-               reinterpret_cast<fftw_complex*>(func1),
-               FFTW_FORWARD,
-               FFTW_MEASURE);
-       f2 = fftw_plan_dft_1d(sz*2,
-               reinterpret_cast<fftw_complex*>(func2),
-               reinterpret_cast<fftw_complex*>(func2),
-               FFTW_FORWARD,
-               FFTW_MEASURE);
-       b = fftw_plan_dft_1d(sz*2,
-               reinterpret_cast<fftw_complex*>(res),
-               reinterpret_cast<fftw_complex*>(res),
-               FFTW_BACKWARD,
-               FFTW_MEASURE);
+       static bool inited = false;
+       static fftw_plan f1, f2, b;
+       static complex<double> *func1, *func2, *res;
+
+       if (!inited) {
+               func1 = reinterpret_cast<complex<double> *>(fftw_malloc(sz*2*sizeof(complex<double>)));
+               func2 = reinterpret_cast<complex<double> *>(fftw_malloc(sz*2*sizeof(complex<double>)));
+               res = reinterpret_cast<complex<double> *>(fftw_malloc(sz*2*sizeof(complex<double>)));
+               f1 = fftw_plan_dft_1d(sz*2,
+                       reinterpret_cast<fftw_complex*>(func1),
+                       reinterpret_cast<fftw_complex*>(func1),
+                       FFTW_FORWARD,
+                       FFTW_MEASURE);
+               f2 = fftw_plan_dft_1d(sz*2,
+                       reinterpret_cast<fftw_complex*>(func2),
+                       reinterpret_cast<fftw_complex*>(func2),
+                       FFTW_FORWARD,
+                       FFTW_MEASURE);
+               b = fftw_plan_dft_1d(sz*2,
+                       reinterpret_cast<fftw_complex*>(res),
+                       reinterpret_cast<fftw_complex*>(res),
+                       FFTW_BACKWARD,
+                       FFTW_MEASURE);
+               inited = true;
+       }
        
        // start off by zero
        for (int i = 0; i < sz*2; ++i) {
@@ -366,7 +370,7 @@ static void least_squares(const vector<pair<double, double> > &curve, double mu1
        *sigma_result = sigma;
 }
 
-static void compute_new_rating(double mu1, double sigma1, double mu2, double sigma2, int score1, int score2, double *mu, double *sigma, double *probability)
+void compute_new_rating(double mu1, double sigma1, double mu2, double sigma2, int score1, int score2, double *mu, double *sigma, double *probability)
 {
        vector<pair<double, double> > curve;