Rwain wrote: ↑05 January 2025, 15:10
I totally disagree with your analysis. Having launched numerous Swiss tournaments, I can assure you that the system does not work at all, and this is not a feature of the swiss system, it's just an algorithm that does not work when tournaments have a small number of players.
Here is a perfect example of what happened in swiss system on BGA :
https://boardgamearena.com/tournament?id=182877
When you choose the option "Try to prevent player to be opponents twice", the swiss system is faulty. The algorithm seems to start from the top, to find opponents suitable for the 1st player. When every player left have already played against him, it chose to make him play against the last players tried... who happen to be the player at the bottom of the standings. And that is clearly nonsense.
Player n°1 finished his tournament playing only against the "weakest players"... on and on and on...
In the Terra Mystica tournament presented above, salemome, best player of the tournament, ends with endless oppositions against Pinovitch, Acathla and lynkowsky, who had the fewest points here. This ends in an easy win of salemome, and the urge to quit for players who are bored facing always the same opponents.
There should be a way to propose a system that adpats to the number of players ! Once the best player had played against all others in a tournament, it starts as new, and he can once more be opposed to the second...
Hi, thanks for your comments. We are all on the same side here, wanting improvements to the tournament system. I am a organizing 3+ tournaments a month for one game now and running into many roadblocks and frustrations with the tournament features. I want things fixed just like you do. All tournament formats, not just basic Swiss. They all have major issues IMO.
Your example linked is a 8 match swiss with 4/3 players that only ended up having 12 players sign up unfortunately. Starting as early as Step 4 it becomes impossible to prevent duplicate pairs for anyone and the coding for the "try to prevent" player pairing is clearly broken once everyone is paired. This is a blatant and high disruptive bug that should be patched ASAP. Pairing should put everyone together once and then pair everyone together one more time again and again until finished. This would require counting how many times each player has played each other player rather than a yes/no, which might be why the code breaks down. It's funny that the tournament creation page says "For tournaments with few players, you should disable this option" for the pairing policy, then gives no explanation for what that means. There's an incredibly vague warning provided.
For the complaints about duplicate pairings at the bottom of the brackets I have done further digging and found a common algorithm that doesn't make duplicate pairings at the bottom. I have a pairing algorithm improvement below and recommend BGA makes the explanations for each pairing option more clear to everyone. Here would be the 2 options, each listed as pairing "priority"
1) Prioritize pairing based on score -This is the current "don't try to prevent" setting. Despite the name it still tries to prevent duplicate pairings among those with the same/similar score (matching players from as few different scores as possible), but it prioritizes matching scores more than the "try to prevent" pairing policy. For long tournaments with fewer players I would highly recommend this option since it will create a "hotseat" style tournament after all the initial placement games and create overall more balanced skill level on each table rather than force stronger players to play progressively weaker and weaker players in later rounds as they struggle to find appropriate opponents they haven't played yet.
2) Prioritize unique pairings (Monrad System for Swiss Tournament Pairing) -Based on what I've observed, this is what the "try to prevent" pairing settings are based on, though there are some flaws in the coding. Pairings are always done based on standings from top to bottom and should always give everyone a unique opponent. Here's where the algorithm needs improving:
You always start with the top player on the round list and find their opponent, who should be the closest ranked player and whom the top player can face according to [[UNIQUE PAIRING]]. When two players have been set up, they are removed from the round list, and you continue to find an opponent for the player who is now at the top. This continues until the round is set up.
When a player cannot meet any of the following players on the round list, the last pair formed shall be broken up, placed in its place on the round list and considered as unable to meet. The set-up then continues in the normal way. If it is still impossible to complete the set-up, the now last pair formed shall be broken up in addition, etc.
.
This is written for 2 player pairing, but should be applicable to 3+ player as well. The current BGA algorithm does not seem to properly proceed once a pair of players that cannot meet again are encountered. It appears that if the players are the last two to get paired it does not care if they are unique pairings. What it should do is break up the last pair as per the quotation (From Danish Chess Federation Monrad System Page) and try a different pairing and see if it can complete all the pairings that way. Any time a pairing cannot be made (skipping previously attempted pairings), break up the last pairing and re-pair that player.
The algorithm is fairly simple and not that difficult computation wise with a limit of 20 matches. It will always results in unique pairings like the organizer requested while keeping ideal pairings for the top players.
I wasn't around when Swiss v1 was still around, but I know it was restricted to only 2 players. Perhaps when adjusting the coding to enable 3+ players in the new Swiss tournament system they forgot to check unique pairings for the final pairing, which is causing the problems at the bottom table.
In addition to the pairing algorithm fix to backtrack properly it should also fix the bug where the pairings completely break after everyone has played once or if in 3+ player it's unable to fill a whole table with unique opponents. Simplest fix is to simply check if the first player has enough unique pairings remaining to fill the table. If they don't, then reset all the unique pairings for everybody at the start of the round and pair based on standings.
As an example, a 4 player Swiss with 20 players is able to find unique pairings for rounds 1-6, 3 opponents each round and 19 opponents total. When pairing for round 7, the top player has only 1 unique pairing available, but needs 3 players for the match so this triggers a full reset of pairings. This is easy to code and results in fair pairings from the reset.
That one unique pairing remaining for each player would never happen because of the reset, but this is more fair than the alternative here, which for example would be pairing the #1 player with the #20 player and then filling the remaining with the reset, players #2 and #3.