How many rounds should a swiss tournament have?



:egg: :egg: :egg:


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!


This thread fizzled out. IMO, the formula @xela points at is easy to implement and obviously better than the status quo. Do others agree?

What should we do in the short term?

One change possibility is to use the “Chess Organizers Handbook” suggestion, which is intuitive.

  • Effectively, do an elimination tournament without eliminating any players
  • If there are 3+ players, add two rounds to collect data on 2nd place
  • Maybe: If there are “enough” players, add extra rounds to collect data on 3rd place

EDIT: deleted original poll to add @Samraku’s option. The results look nice enough compared to the simple formula from the chess handbook.

  • Chess handbook adds rounds in increments of 2. This gets better results for 1st place, per @jlt’s graphs above in the thread.
  • @Samraku’s *1.4 gives a progression of rounds that feels more natural.

I think either is fine and better than the status quo.

Should we make a change (new poll)?

Formula to use for number of rounds, v2, where P is the number of players
  • floor((P + 7*2)/5); Mr. Model; status quo
  • ceil(lg2(P)) + (2 or 4); Chess handbook; extra data for 2nd and/or 3rd
  • ceil(lg2(P) * 1.4); standard in chess
0 voters

If we make a change to “Chess handbook”, what’s the cutoff for collecting extra data on 3rd place? 4+ players? 8+?

When to add two rounds to collect data on 3rd place
  • Never
  • 4+ players (always)
  • 8+ players
  • 16+ players
  • 32+ players
  • 64+ players
0 voters

(Whatever the choices, we can change in the future if someone does research and establishes a new consensus…)

For reference, here’s what the number of rounds looks like compared to Mr. Model:

Players Mr Model 3rd never 3rd if 4+ 3rd if 32+ * 1.4
2 2 1 1 1 1
3 3 4 4 4 2
4 3 4 6 4 3
8 4 5 7 5 5
16 6 6 8 6 6
32 9 7 9 9 7
64 15 8 10 10 9
128 28 9 11 11 10

IMO, just collecting data on 2nd place is fine. But maybe others want the extra rounds.

EDIT: Added poll to include @Samraku’s “standard from chess” option. Also added to the table. The numbers look pretty nice to me. I’ve switched my vote to that.

1 Like

I think ceil(lg2(P) * C) where C is a constant (1.4 is a popular value) deserves to be in the poll. It’s the standard in chess afaik and it’s what I’d vote for

1 Like

Sure. It was too late to edit the old poll, but I’ve closed the old one and opened a new one.

1 Like

Hmmm, usually we have a lot more people dropping out than in live tournaments. So maybe just using C=1 would be fine.

Three things I like about the *1.4:

  • It’s standard somewhere
  • The progression in the number of rounds “feels” natural.
  • Seems in practice to be pretty close to the “chess organizer’s handbook”, which itself makes intuitive sense to me.

One thing I don’t like:

  • Number of rounds aren’t always at the peaks from @jlt’s graphs. The peaks happen at “# rounds for single elimination” plus “multiple of 2”. This method only hits the peaks some of the time.

I think either is a good option.

Swiss doesn’t mean correspondence. There are live Swiss tournaments too.

EDIT: or maybe by “live” you meant “in-person”? In any case, doing the same number of rounds as single elimination seems like a more dramatic change. Maybe better to consider that later as a second step, after experience with something more standard.

I like having a bit more games than the bare minimum, which 1.0 gives. with 1.0 it just feels like an elimination Tournament in disguise

1 Like

If you have a dropout rate of 20% per round you may easily end up in a situation where all players left in the final round have basically played all other players left, making it a round robin in disguise. :slight_smile:

But I don’t really care that much tbh.

You need a much higher factor for that to be a concern. And even if so, the problem with a Round Robin is not that it’s bad, it’s that it has too many rounds to be practical with large numbers of players: the exact situation where C = 1.4 will be far too small to cause that problem lg(16) * 1.4 = 5.6; ceil(5.6) = 6 a Round Robin for 16 players has 15 rounds, 2½ times as many

With a dropout rate of 20% there will be 5 players out of 16 left in round 6. That is my point. A 5 player round robin has 4 rounds, not 15. :slight_smile:

20% dropping out per round!? who are you playing with!? even so, it’s highly unlikely to reduce to Round Robin, and even if it does, it didn’t run into the main reason not to use round robin: obscene numbers of rounds

Umm, with other OGS players. Here’s a swiss tournament I’m playing in: Make a decision that you will never stop learning! Rate is closer to 15% though, but still.

BTW: the entire discussion is entirely irrelevant, because the pairing logic in Swiss seems to be as broken as the one in McMahon. In the tournament linked I had 3 points before the current round, my opponent had 1, yet we were paired. I’d strongly suggest to fix that first.

It still never got remotely near as few rounds as Round Robin would have, not to mention that Round Robin wouldn’t have been able to predict how many people would drop, and so would have 52 rounds you’d be stuck playing

And to repeat, even if it got down to the same number of rounds as a prognosticating Round Robin would have had, and even if you take the completely unreasonable assumption that this would simulate a round robin (everyone would play eachother (or in this case those that are left) once, or at the very least would not play another player twice until they had played all other players once), it still isn’t as big a problem as simulating elimination, because the problem with Round Robin is not that it’s a bad format, it’s that it has too many rounds, a situation which would not be the case here

Well, I’m not arguing that swiss is bad with more rounds than I argue for. The discussion was about how many rounds do wee need, because we want to determine the winner (and maybe 2nd and 3rd). All I’m saying is that because of dropout we’d need less that one might think. But again, it’s not much of an issue anyway.

Repeating my other point though (and not directed at you, @Samraku): without fixing the pairing we need n-1 round in swiss to determine a winner. Because the top 2 players might not be paired in the first n-2 rounds. So please fix that first.

You have to assume 0 dropouts for this calculation. And if your goal is just to determine the top n players, n-le elimination or ceil(lg2(P)) for the top 1 case will be close to equivalent, but Elimination is likely to be preffered in that case as it’s easier to understand

However, if one picks Swiss, one does not just want to determine the top n players, so the calculations shouldn’t be built around that beyond using lg2(P), the number of rounds necessary to find the top player, as a base point. The extra rounds beyond that are what makes Swiss swiss. If you’re trying to have only the number of rounds you need in order to find the top n players, Swiss is not what you’re looking for

Let Swiss be Swiss, don’t coerce it into budget Elimination

You make it sound like I’m fighting for something here. :slight_smile: Really, all I wanted to point out is that people dropping out changes the math a bit. I’m not advocating for anything (in that respect).

Yes, fully agreed with that. Let’s START doing that by pairing people with the same amount of points, which is NOT happening atm. We never had Swiss tournaments so far!