Tournament Simulator
A calculator for all of your tournament math needs. The defaults are set to match the typical rules for Magic: The Gathering events, but you can change the settings to use this for pretty much any Swiss-style tournament structure.
See the footnotes for more information about each setting, and the technical details at the bottom for implementation details. If you have any questions or suggestions for improvement, please get in touch.
Theoretical distribution:
Points Players Cumulative
Your chances:
Points Chance Cumulative
The most likely match point distributions among the top cut:
Intentionally drawn matches:
Technical details:
- This simulates only the Swiss portion of events, not anything that happens after the cut.
- Players are assumed to be evenly matched, each having an equal chance of winning against any other player.
- The "theoretical" readout assumes that if on average each player has a 1/X chance of winning, 1/X players in each point bracket do so.11 This results in fractional players, which can be interpreted as the averages you'd get across many tournaments.12 It doesn't account for tiebreakers, drops, random byes, differing pod sizes in multiplayer, or players being unable to play each other twice. It also doesn't restrict itself to only tournaments that include the player details you enter, so those won't affect its final readout like they do for the simulation results.
- The pairing algorithm for this simulation attempts to match the publicly-known details of popular Magic tournament software such as Eventlink and Command Tower.13 This means that it, for example, correctly handles power pairings and the 0.33 minimum on MW%.1415 However in order to speed up calculation, this simulator makes a few simplifications that are unlikely to significantly impact the final results. These are: 1) If players need to get byes due to a non-divisible number of players in the event, it grants these byes to random players in the lowest point bracket rather than prioritizing players with the fewest previous byes. 2) It does not track the OGW% and GW% tiebreakers. 3) It allows players to be paired against a player they've already played before if they're among the lowest ranked players. 4) It does not fully minimize the number of pairdowns/byes.16 5) In 4-player-per-match tournaments, it does not follow the pairings guidelines from the Topdeck.gg MTR addendum and is willing to create multiple 3-player matches if needed to avoid byes. 6) In multiplayer it ignores the Topdeck directive to add fake opponents to the tiebreakers of a player who has a bye.
- Calculating exactly when it is correct for a player to ID is infeasible, so this calculator uses some simplified assumptions and heuristics. If you notice any situations in which players seem to be making irrational drawing decisions, please let me know so I can fix it. A non-exhaustive list of assumptions it makes: 1. Any player who ID's in one round will always want to ID in the next round. 2. If the cut is top X and a player has >= X other players whom they are below or tied with on the standings, they won't want to draw. 3. IDs are calculated in standings order, with the top match deciding whether to ID on the assumption that all lower matches will play, then the next match down doing the same with the knowledge that the match above them drew, etc. 4. There exists a single point on the standings above which all players want to draw and below which no players want to draw. 5. A player wants to ID if doing so guarantees them the target cut, or if it increases their chance of making it by at least 35 percentage points.17 6. Players are only trying to increase their chance of making the top cut; they don't care about getting a higher position within the cut. 7. If the top cut type is "tied with standings", players will only consider drawing in the last 2 rounds.
- Players are assumed to have an arbitrary mix of strategies for dropping; some drop once they're slightly behind, some drop only when it looks hopeless, and some never drop at all.
- The calculator assumes there are no weird edge cases like extra players losing round 1 due to joining the tournament late, an otherwise-invalid pairing being used because a player misreported a result that was later corrected, a double match loss penalty being issued by a judge, a double match win issued as a fix for judge error, etc.
- For determining the three most likely match point distributions to display, it first decides on a number of top standings to focus on. The most common results are determined only by comparing that many top standings.18 Within this standings position, it looks only at match points, not tiebreakers. After the most common top standings have been picked, it looks at all tournaments that ended with matching standings, and repeats this process for the next place down on the standings in order to pick out the most common next place. If this is still not sufficient to narrow things down to a single tournament to display, it goes through each place individually again, taking tiebreakers into account this time.
- Note that if you enter details of a specific player, this can affect the global match point distributions that the calculator shows you. For example if you tell the calculator that you have 1 match point after round 1, it will only simulate tournaments in which at least one player drew round 1, which will change the most probable final standings that it displays.
Comparison to other tools:
There are several other tools that people have made over the years to help with tournament math. A list of the ones I'm aware of along with their limitations:
- Brian Durkin's formula: Handy but can't account for events with extra rounds like GPs and RCs.
- Swiss Triangle: Aims to show you the raw numbers so you can do the calculation yourself. Helpful but requires the human to do most of the heavy lifting.
- Sixprizes: A full calculator that can do a custom cut and rounds, but no draws.
- Cards Realm: Same as Sixprizes.
- Galactic Treasures: A slight improvement on the above, taking into account unintentional draws, but not intentional ones.
- Limited Information: Does factor in IDs, but relies on unrealistic assumptions like "any pair downs always wins" and "nobody ever draws unintentionally".
- LimitlessTCG: By far the best out of these calculators, but can't account for byes, and has a somewhat confusing interface.
This calculator is intended to combine their functionality into a single package, along with adding other useful features like custom tiebreakers and multiplayer math. If you notice anything that it can't do but you wish it could, please let me know and I'll see about adding that functionality.
Footnotes
If the tournament gives some players byes, enter them here, separated by commas. For example if 30 players get a round 1 bye and half of those players get another bye round 2, you'd enter "30, 15".
Unintentional draw. In multiplayer events, this probability should include both draws due to running out of time and draws that occur as a compromise to a kingmaking situation.
"Target standing" is whatever place on the standings players are trying to maximize their chance of reaching in the Swiss. In a tournament with a cut to top 8, this would be "8". For a day 2 cut you can change this to care about a specific number of match points, or being tied with a certain standings position.
If you want to know a specific player's chances of making the cut, enter their info as of the last round to have ended.
Enter the number of the last round to have finished
If you don't know your average opponent match win percentage you can leave this blank and the simulator will guess the most likely value based on your match points and round.
For more accurate results, you can use this field to enter multiple player details. Simply enter the player's points and then OMW%, then repeat for all other players. e.g. you could enter "6 50 3 66.5 3 66.5 0 50" as the full standings of a 4 player event. (Any whitespace character works as a separator.) Alternatively if you have access to the event standings on MTG Melee, you can copy the entire standings page text into this box and the calculator will parse out the individual players and point values.
For best results, include all players that could potentially get to your number of points within the number of rounds remaining, assuming you draw every future round. e.g. if you have 15 points and there are 2 rounds left, you'll want to enter everyone that has at least 11 points in the current round. (Note that this still cannot perfectly predict your results, because it doesn't know which players have already played which other players.)
Note that if you enter standings while a round is ongoing, you may be entering invalid data, since some players have finished their match and others have not. This will lead to incorrect results.
If the number of players in the event isn't divisible by the desired number of players per match, smaller games will be made to avoid byes if possible.
A draw includes all players in a multiplayer match. There's no possibility of some players in a single match drawing and some others losing.
This field dictates the chance of winning based on who goes first. (Conditional on not being a draw.) For example, if in a 4-player game the first player in turn order has a 40% chance of winning and the other players each have a 20% chance of winning, enter "40, 20, 20, 20". (Integers only.)
This is similar to what the classic "swiss triangle" tools do, except it's more accurate because it doesn't assume that pairdowns always win.
For example, if a player with 3 points is paired against a player with 0 points, the result of this match is 0.5 players with 6 points, 1 player with 3 points, and 0.5 players with 0 points.
These programs are all closed-source, so their exact algorithms are a secret.
Notably Wizards Eventlink doesn't seem to respect this floor, and instead uses a floor of 1/3.
This minimum is generalized to multiplayer as floor((1 / (number of players in a match + 1)) * 100) / 100.
For example, if the only players in a certain point bracket are players A, B, C, and D, and player B has already played both A and D, there is a legal pairing among themselves: A plays D and B plays C. But this simulator isn't guaranteed to find that pairing, and it may instead pair A vs. C and give pairdowns19 to both B and D.
e.g. if playing it out gives that player a 50% chance of making the cut, they'll only ID if it gives them at least 85% to make it. If playing gives them a 90% chance, they'll only ID if it gives them a 100% chance.
If it didn't limit the comparisons to the top of the standings, the results would be meaningless on large tournaments. There are so many different ways the finals standings could look that you could simulate the same large tournament thousands of times and get a slightly different final standings printout every time, making it impossible to pick one that's meaningfully the "most common". It makes more sense to just look at, say, the top 12, and pick the most common point distributions within all the different top 12s.
Or byes if this is the lowest bracket.