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.