Table Tennis Problem¶
You manage a recreational table tennis league . There are 10 participants, and in an effort to make the first round of matchups as exciting as possible, you develop a model that predicts the score difference for every possible pair of players. That is, you produce a 10x10 matrix where (i,j) represents your prediction for player i’s score minus player j’s score if they were to compete.
import numpy as np
generator = np.random.default_rng(0)
score_diffs = np.round(generator.uniform(low=-15, high=15, size=(10,10)), 2)
np.fill_diagonal(score_diffs, np.nan)
score_diffs[np.triu_indices(10, k=1)[::-1]] = -score_diffs[np.triu_indices(10, k=1)]
print(score_diffs)
# [[ nan -6.91 -13.77 -14.5 9.4 12.38 3.2 6.88 1.31 13.05]
# [ 6.91 nan 10.72 -13.99 6.89 -9.73 10.9 1.24 -6.01 -2.32]
# [ 13.77 -10.72 nan 4.42 3.46 -3.49 14.92 14.43 5.57 4.51]
# [ 14.5 13.99 -4.42 nan 0.76 -5.69 -0.42 11.68 13.02 -4.27]
# [ -9.4 -6.89 -3.46 -0.76 nan 11.71 -8.19 3.7 -12.48 9.98]
# [-12.38 9.73 3.49 5.69 -11.71 nan -1.49 8.89 -8.08 -13.44]
# [ -3.2 -10.9 -14.92 0.42 8.19 1.49 nan 13.26 -4.05 -11.84]
# [ -6.88 -1.24 -14.43 -11.68 -3.7 -8.89 -13.26 nan 13.47 -1.2 ]
# [ -1.31 6.01 -5.57 -13.02 12.48 8.08 4.05 -13.47 nan 6.87]
# [-13.05 2.32 -4.51 4.27 -9.98 13.44 11.84 1.2 -6.87 nan]]
Given this matrix, determine the “best” schedule for round one - the schedule whose matchups minimize the sum of squared point differentials.