-/*
- * 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;
- }
-
- float sum = 0.0f;
- for (unsigned i = 0; i < matches.size(); ++i) {
- float mu1 = mu[player_num];
- float mu2 = mu[matches[i].other_player];
- float mu = mu1 - mu2;
- float sigma2 = sigma[matches[i].other_player];
- float x = matches[i].margin;
-
- //fprintf(stderr, "x=%f mu=%f sigma2=%f add %f-%f = %f\n", x, mu, sigma2, (x-mu)*(x-mu), sigma2*sigma2, (x - mu) * (x - mu) - sigma2 * sigma2);
- sum += (x - mu) * (x - mu) - sigma2 * sigma2;
- }
-
- if (sum <= 0) {
- return;
- }
- //fprintf(stderr, "sum=%f\n", sum);
- sigma[player_num] = sqrt(sum / matches.size());
-}
-