Although this is an old thread, I just read these posts. The ideas are fascinating, and I would like to share some thoughts. (My background: I've never coded a tab program, but I do have a math degree from Columbia. Which is to say, I'm primarily treating this like any other math problem.) I did debate for 8 years and have coached for many years, too, and would love to see tournaments run the best way possible. Thank you to Jim, Gary, Jon, and others for all the work they've done over the years to improve debate tab.

Rather than simply recalibrate the pairing method (HH giving way to HL, opp seed vs opp wins, etc.), maybe it's time to radically rethink the process. Computers can run giant optimization matrices in the blink of an eye. Multiple variables can be optimized simultaneously. No matter how much one tweaks HL pairings, it can't optimize multiple variables. If your basic technology is the HL pairing, there will always be "sloppy" pairings in your results where teams with weak opponents get another weak opponent, and also the opposite. For example, say team A is weak and has had strong opponents, and team B is weak and has had weak opponents. If you do HL pairings based on schedule strength, A and B might met, setting up B with another weak opponent. On the other hand, say team C is strong and has had weak opponents, and team D is weak and has had strong opponents. If you do HL pairings based on strength, C and D might met, setting them both up with opponents they don't deserve. There's just no way around this--except for optimization matrices. I even made a nifty visual of these problems and the solution:

http://art-of-logic.blogspot.com/2009/08/another-way-to-visualize-strength-of.htmlHere's how an optimization matrix works:

1. Generate for each team two variables: strength, x, and schedule strength, y. These can be based on whatever you like: wins, points, opponent wins, opponent seed, whatever. These would be updated before each round is paired.

2. Generate matrix of all possible matches. If there are 60 teams, and it's an even round (side constrained), it will be a 30 x 30 matrix.

3. Code any blocked matches (same school, already met) with a 0.

4. Code the remaining matches with a score. Scores are scaled to make pull-ups more difficult but not impossible. For two teams A and B, the scores use a formula based on x_a, x_b, y_a, and y_b: the strength AND schedule strength of each team.

5. Pick optimal pairing (highest total score) out of the matrix. This is a known, solved problem in math--the Hungarian algorithm works nicely.

The real trick is the formula for assigning the scores. In a rough sense, the formula is similar to abs((x_a - y_b)*(x_b - y_a)). A score is high only if each team strength is very different than its potential opponent's schedule strength. A good match up: team A is strong and has high schedule strength, team B is weak and has weak opponent strength. Each team rounds out the other's schedule. A mediocre match up: team A as before, and team C is weak but has high schedule strength. Team A gets the right opponent, but team C would be screwed over. A bad match up: team A as before, and team D is strong and had high schedule strength. Both A and D would get the wrong opponents to balance out their schedules. The scores would reflect that A vs. B is preferable to A vs. C, and both are preferable to A vs. D. Do this over all the matches and the matrix optimization makes all the tradeoffs to produce the best overall pairing.

The formula I have come up achieves this scoring outcome but is more elegant than what I listed above: (standard deviation of strength of team A's opponents, including B)*(standard deviation of strength of team B's opponents, including A). Standard deviation is a better measure than the average opponent strength. A team that has met three average strength opponents should not meet a fourth, but a team that has met one great opponent, one bad opponent, and one average opponent could meet a second average opponent. The standard deviation scores these two scenarios differently, while also ensuring the cross-mixing I described in the previous paragraph.

It works. It's not hard. My friend cut-and-paste the Hungarian algorithm for me because I'm not a coder, and the scoring formula is simplicity itself. Computers are fast enough to do it even for very, very large tournaments. And furthermore, the formula can also factor in more points for geographic diversity (a boost for two teams from different regions) or anything else that you like. I've tested it out in some experiments and it works. At the end of the tournament, teams that break have more similar opposition strength.