Optimizing matching of players in a tournament round I am an organizer for a board game tournament. All of our players have an internal Trueskill rating we calculate to assist us with matching opponents for each round of the tournament. For each round, we can pair any player up with any other player as we wish. For each hypothetical pairing, Trueskill can provide us with a "Match Quality" score between 0.0 and 1.0, the higher the better. 
Here is a grid of hypothetical Trueskill match quality scores. Note it is symmetrical along the diagonal:
           Player1  Player2  Player3  Player4
=====================================================
Player1 |    -----    0.821    0.234    0.555
Player2 |    0.821    -----    0.833    0.642
Player3 |    0.234    0.833    -----    0.743
Player4 |    0.555    0.642    0.743    -----

When we select who is paired with whom in a given round, what is the best way to maximize the total match quality score of those pairings? Obviously with a small number of players you can just iterate through all possible combinations, adding the match quality scores and select the set of pairings with the highest total value. However the number of players in our tournament makes this problematic. For 70 players, we're talking 70-factorial combinations. 
What I'm doing now is basically a greedy algorithm--select the best overall pairing, remove those two players from further consideration, select the remaining overall best pairing, remove those players, etc., until all players are paired up with someone. It works quite well, but the nerd is me is wondering if there isn't a better method that will result in even more optimal overall pairing.
 A: I haven't found an algorithm that guarantees the highest-total-value for pairings selections, but I have found one that guarantees the lowest-total-value, so we can modify the original matrix to accommodate that algorithm. Basically, we just have to subtract all of the match quality scores from 1.0 and assign a value of 2.0 along the diagonal (to ensure a player never gets paired with themself). When we do that, we get something like this:
           Player1  Player2  Player3  Player4
=====================================================
Player1 |    2.000    0.179    0.766    0.445
Player2 |    0.179    2.000    0.167    0.358
Player3 |    0.766    0.167    2.000    0.257
Player4 |    0.445    0.358    0.257    2.000

As mentioned, our goal now is to select pairings with the LOWEST overall score, not the highest and that problem can be solved using the Hungarian Algorithm. That algorithm guarantees finding an optimal set of lowest value pairings and because we subtracted the match quality score from 1.0, gives us the pairings with the highest summed match quality scores, which was the original question.
Note: When considering if we're done at each step of the algorithm, we have to ignore the duplicate symmetrical values, so that complicates applying the algorithm a bit.
