- for (int i = 0; i < num_players; ++i) {
- for (unsigned j = 0; j < matches_for_player[i].size(); ++j) {
- const match& m = matches_for_player[i][j];
-
- // Only count each match once.
- if (m.other_player <= i) {
- continue;
- }
-
- float mu1 = mu[i];
- float mu2 = mu[m.other_player];
- float sigma1 = sigma[i];
- float sigma2 = sigma[m.other_player];
- float sigma = sqrt(sigma1 * sigma1 + sigma2 * sigma2);
- float mu = mu1 - mu2;
- float x = m.margin;
- float w = m.weight;
-
- printf("%f %f\n", (x - mu) / sigma, w);
- }
- }
-}
-
-/*
- * diff(logL, sigma1) = sigma1 (-sigma1² - sigma2² + (x - mu)²) / sigma_c²
- * maximizer for sigma1 is given by: sum_i[ (1/sigma_c_i)² sigma1 ((x - mu)² - (sigma1² + sigma2²) ] = 0
- * sum_i[ (x - mu)² - sigma1² - sigma2² ] = 0 |: sigma1 != 0, sigma2 != 0
- * sum_i[ (x - mu)² - sigma2² ] = sum[ sigma1² ]
- * sigma1 = sqrt( sum_i[ (x - mu)² - sigma2² ] / N )
- */
-void update_sigma(float *mu, float *sigma, int player_num, const vector<match> &matches)
-{
- if (matches.size() < 2) {
- return;
- }