{
memset(hessian, 0, sizeof(hessian));
- for (int i = 0; i < num_players; ++i) {
- double sigma1 = sigma[i];
+ for (unsigned i = 0; i < all_matches.size(); ++i) {
+ const match &m = all_matches[i];
- for (unsigned k = 0; k < matches_for_player[i].size(); ++k) {
- int j = matches_for_player[i][k].other_player;
+ int p1 = m.player;
+ int p2 = m.other_player;
- double sigma2 = sigma[j];
- double sigma_sq = sigma1 * sigma1 + sigma2 * sigma2;
+ double sigma1 = sigma[m.player];
+ double sigma2 = sigma[m.other_player];
- float w = matches_for_player[i][k].weight;
+ double sigma_sq = sigma1 * sigma1 + sigma2 * sigma2;
+ float w = m.weight;
- hessian[i][j] -= w / sigma_sq;
- hessian[i][i] += w / sigma_sq;
- }
+ hessian[p1][p2] -= w / sigma_sq;
+ hessian[p2][p1] -= w / sigma_sq;
+
+ hessian[p1][p1] += w / sigma_sq;
+ hessian[p2][p2] += w / sigma_sq;
}
for (int i = 0; i < num_players; ++i) {