Our swiss algorithm is designed to match players with those that are closest in skill, while avoiding rematches as much as possible. In a typical swiss format, players with a record of 1-0 will face others who are 1-0, and the same goes for 0-1 players. This repeats with 2-0 vs 2-0, 1-1 vs 1-1, etc until the specified number of rounds have been completed. However, players with the same record are not guaranteed to play each other depending on how the points are set up. Our algorithm bases the “skill” of a player on how many points they have accrued in previous rounds, meaning that setting custom point values may lead to players with different records playing each other.
The skill of a player is represented by their seed. The best player should have the highest seed, second best should have the second seed, and so on. An organizer can seed as much or as little as they want. To elaborate further on seeding, in Round 1 we pair the first seed with the highest seeded player in the second half of the seeding. So as an example, if there's 10 players we will pair seed 1 vs seed 6. Seed 2 would play seed 7, and so on. As people join the event, we’re only putting them in order of entry and nothing else.
Additionally, provided below is an image of our Swiss phase setup in the tournament Admin, under “Events” and clicking “Bracket Setup”:
Now, let’s get into the specific steps of how pairings work. Smash.gg uses a “Maximum Bipartite Graph” algorithm (http://www.geeksforgeeks.org/maximum-bipartite-matching/) to ensure that the maximum possible number of players are paired. We start by trying to pair players within a point tier and use seeding as a secondary preference for matchups.
For example, assume Seed 1, Seed 2, Seed 3, Seed 4 are all in the same point tier. In theory, Seed 1 vs Seed 4, and Seed 2 vs Seed 3 would be valid matchups. However, by using seeding as a secondary preference in pairing the players, we come up with more even matchups, such as Seed 1 vs Seed 3, and Seed 2 vs Seed 4.
Since point tiers will not always be perfectly sized and we try to avoid rematches as well, we do the merging of groups downwards and upwards as described below. Again, as described above, we will use seeding as a secondary preference when creating the pairings within the merged groups to create the most even pairings. Here is a description of merging seed groups downwards and upwards:
- Sort your players by points, in descending order
- If there’s an odd number of players, add a ‘bye’
- Group the players by points, and if there are any groups that have an odd number of players, move the last player in this group to the next group. (All groups should now have an even number of players)
- For each group of players, find a pairing among them that will pair each player with someone they have not previously played:
- If there is no valid set of pairings from this, merge this group of players with the next group of players in the list.
- If you can’t find a set of pairings for the last group in the list, then start unmatching previous groups and merging those groups with the current one.
- If you get all the way through the entire list and can’t generate pairings while avoiding rematches, then at this point you start over with allowing rematches. (This is an extremely rare case that shouldn’t happen if the recommended number of rounds is used.)
Standings are based off of number of points, with tiebreakers being: H2H (head to head) among tied players and then strength of schedule (combined opponent point total). TOs can finalize placements manually if they want to use a different tiebreak method.