How many rounds should a swiss tournament have?

3 Likes

EGS

:egg: :egg: :egg:

2 Likes

I changed the scenario a little bit:

  • Tournament with 32 players;
  • Players Îą, β and Îł have Elo 300, 200 and 100 respectively;
  • All other player’s Elo are evenly distributed between 0 and -2000;
  • At each round, players are ordered by number of victories. Among players with the same number of victories, ordering is random. Then player 1 is paired with player 2, player 3 with player 4, player 5 with player 6, etc.
  • I estimated the probability that after r rounds, players Îą, β and Îł get the first three places in that order with no ties (Îł is not tied with any other player).

This doesn’t converge to 1. I was surprised by that result at first but I think I understand the reason. If α is first and β is second, then they are paired together so β has less than 50% winrate, while γ is paired with a weaker player and has more than 50% winrate. This continues until γ (or maybe δ) becomes second and β becomes third, and then β starts to have a winrate over 50% again and can climb back to the second place…

Interesting. The numbers in the top graph are implausibly low. But then I realised you’re simulating the wrong thing. With your random matchups, you allow repeated pairings. So the top 3 players will be repeatedly playing each other, with gamma struggling to get above 50%, while the bottom 29 players will be repeatedly playing each other and frequently getting above 50% by luck.

In a real swiss, you would not ever play the same opponent twice (and a 32-player tournament couldn’t go past 31 rounds). So if you’ve got a top group who are much stronger than everyone else, then in a long enough tournament they would claim the top places by beating up on weaker opponents. Your simulations are missing the “beat up on weaker opponents” factor, hence the numbers are too low! (My recollection of chess tournaments is that in amateur events, about a third of games were savage maulings on this basis. In go, we’re kinder and tend to use mcmahon to prevent this. Less rough, but you miss the thrill of the occasional accidental game with a grandmaster.)

And exploring a bit more: to my surprise, there seems to be no R or python library (or in fact any open source library) for calculating Swiss pairings correctly! There are plenty of “tournament helper” apps with graphical interfaces, but nothing you can plug into a script for this kind of repeated simulations. And coding up a correct Swiss pairing algorithm from scratch is a fairly big piece of work. So of course you’ve taken what looks like a reasonable shortcut. But I think it has a big impact on the results.

I just coded up the same scenario for a round-robin tournament, which is much much easier (about 20 lines of code in R). The probability of places 1-3 being correct is about 46%. Not 100% because a 300 elo player will only beat a 200 elo player around 64% of the time, not 100%, and similar for the other top pairings. And indeed your simulations seem to be converging on close to 46%.

I don’t plan to code up a fully correct Swiss any time soon. But thanks for taking a look!

2 Likes