After doing some struggling with WinTD, and noting the program’s age, I decided it was time to program my own. It’s coming along quite nicely, and I expect it to be good enough for me to use before my next tournament, in January. After that, I might try to polish it up for sale at a later time.
Of course, the hard part was the Swiss Style pairings. The various constraints for players not playing twice, and matching points among players and then, especially, top/half bottom half pairings made things very difficult. (Top half/bottom half is the hard part, because after you satisfy the other constraints, you do top half/bottom half, and then you have violated the other constraints. It’s not very easy,
However, I came up with an algorithm that I thought captured the essences of the Swiss Style system. It would, first and foremost, avoid pairing players who have already played. Its second goal would be to keep players with the same score playing each other, or if not possible, to minimize score differences. Finally, it would favor matches between opponents with wide rating disparities. (I won’t go into technical details, but there are distance functions with sums of squares going on.) This is done because, if there are enough rounds, they have to meet anyway, but their meeting is postponed. The goal is to have the “championship game” between the top two seeded player played in the last round. The algorithm also treats the bottom players the same way. The games for the low ranked players will gradually get easier (assuming they don’t upset their opponents) as the day goes on.
(Edit: When I first posted this note, I gave an example that compared WinTD with USCF rules. It was pointed out that I had made an error in interpreting USCF rules, and WinTD did, in fact, match the rules in that example. I have corrected this below, which also makes the example shorter.)
When it came time for testing, I got stable results, but not what I expected. After doing some evaluation, though, I realized that it was doing exactly what I programmed, but not what USCF rules or WinTD said to do. I’m currently examining things to see if I ought to make changes, or if I like my method better.
For the first rounds, the algorithm produces the top half/bottom half pairings as expected. When “odd players” and previously matched players start showing up, it diverges from WinTD and USCF procedures.
The goal of this thread is to present an example and ask for feedback on whether or not my program is “better” than other method.
(Warning: long example ahead)
The easiest way to show the problem is to consider a small tournament with three rounds and six players. They are all rated. Player 1 has the highest rating, and Player 6 has the lowest rating. Assume that they play, and there are no draws and no upsets, and no transpositions necessary for due color.
The first round is easy
1 vs 4
2 vs 5
3 vs 6
1, 2, and 3 win their games.
Now, in the second round, if we follow USCF procedures, there are three players in the top scoregroup, with one point each. The lowest player of the scoregroup is therefore paired against the top player in the next scoregroup. The remaining scoregroups are then paired, which is easy in this case, because there is only one pair in each group.
1 vs 2
3 vs 4
5 vs 6
1, 3, and 5 win. That leaves players 1 and 3 with two points. Players 2 and 4 have one point. The final round is thus:
2 and 5 have 1 point. 4 and 6 have zero points. However, two and five have played. WinTD swaps 4 and 6, and the result is.
1 vs 3
2 vs 6
5 vs 4.
My algorithm begins the same in round 1. However, it then diverges. In round 2, it is favored for 1 to meet player 3 instead of player 2, because that postpones the final round challenge. (The algorithm doesn’t take that into account. It actually just tries to masimize total distance between players. Having the final matchup in the last round is a consequence of that.) Player 2 will have to play someone with 0 points, and he has already played 5. The matchup 2 v 6 and 4 v 5 is better than 2 vs 4 and 5 vs 6, because there’s more distance between 2 and 6 than between 2 and 4. (The program treats the pairing of the two lowest players as undesirable until there is no choice, just as it does with the highest players.) Therefore, the round is paired
1 vs 3
2 vs 6
4 vs 5.
1, 2, and 4 win. The final round is
1 vs. 2
3 vs 4
5 vs 6.
The round 2 pairing looks a little bit odd, but this algorithm accomplishes the goal of postponing the championship game until the final round better than the standard way. Experimenting with larger tournaments, I find that the “middle” players move around a bit more, but the climactic games at the top and bottom are postponed as long as possible. In general, the most evenly matched games happen in the later rounds, all up and down the tourney tree.
I like mine, frankly. The games should grow more evenly matched as time goes on, which is the point of the Swiss Style pairing system. USCF rulese tend to force players closer to the top more quickly. My algorithm was also fairly simple to implement, although I haven’t done team allocations yet, and I haven’t built in accelerated pairings yet.
The other question is, if I use it at my next tournament, do I have to advertise it in advance because I’m not using a standard method? In some ways, I think I might be using a method that is even more standard than the standard method. It seems to accomplish the goal of the Swiss System better than the USCF rules for the Swiss System.
So, any thoughts on the subject?