Elo Rating Simulator
Elo is a short formula and a long argument about K-factors. Two things are worth seeing rather than reading: the system is exactly zero-sum, so the total across a league never moves however many games are played, and it takes a surprising number of games to put players in their true order. Every player here starts on the same rating and has a hidden true strength that decides results, so you can count how many pairs the final table gets wrong.
What this generator does
Gives each player a hidden strength spread evenly across a 600-point range, starts everyone on the same rating, and plays the rounds you ask for with random pairings. Results are decided by the hidden strengths; the ratings are what you watch trying to catch up.
How to use this tool
- Choose how many players, how many rounds and what K-factor to use.
- Play a season and read the final table.
- Reveal the hidden strengths to see which pairs are still in the wrong order.
- Change the rounds and the K-factor to see which one actually helps.
Understanding the controls
- How many players
- An even number between 4 and 16, so every round pairs everybody with nobody sitting out.
- How many rounds
- 1 to 40. This is the control that actually improves the ordering, and the effect is easy to see by comparing two seasons.
- K-factor
- 8 to 48. The most a single result can move a rating. Higher reacts faster and settles noisier, which is the whole trade-off.
- Seed
- Reproduces the identical season, which is the only fair way to compare two K-factors.
- Show true strengths
- Reveals the hidden strength behind each player, so you can see which pairs the ratings still have the wrong way round.
Common use cases
- Demonstrating that Elo moves points between players and never creates them
- Choosing a K-factor for a club or a game by seeing what each one does
- Showing why early-season ratings should not be trusted
- Teaching the expected-score curve with real numbers attached
- Reproducing an identical season from a seed to compare settings fairly
How this generator works
Expected score comes from the logistic curve — a 400-point gap means a ten-to-one favourite — and the winner gains K times the difference between the actual and expected result, rounded to whole points, with the loser losing exactly the same amount. That rounding is deliberate: it makes the zero-sum property exact, and the check confirms the league total is unchanged.
Randomness and fairness
The pairings and the match results are random, the latter weighted by hidden strength. The rating arithmetic is not random at all. Seeded seasons reproduce exactly and are therefore explicitly not cryptographically secure; unseeded ones use the browser's cryptographically secure generator.
For how randomness is produced across the whole site, see how Generate Random works.
Limitations and good to know
- Pairings are random each round rather than Swiss or seeded, which is not how a real tournament is run.
- Draws are decided by a fixed band around the expected score rather than by a modelled draw rate.
- Every player starts on the same rating, so provisional-rating rules and rating floors are not modelled.
- True strengths are fixed for the season — players do not improve or decline.
- Seasons are not stored between visits; seed one you want to return to.
Privacy and your data
The whole season is simulated in your browser. No player names, settings or results are transmitted or stored.
Related generators
- Swiss Pairing GeneratorPair a Swiss-system round by score, avoiding rematches and sharing byes fairly — everyone keeps playing, and nobody is knocked out.
- Round-Robin Fixture GeneratorBuild a complete round-robin fixture list where everyone plays everyone else, with home and away balanced and byes handled automatically.
- Tournament Bracket Seeding GeneratorDraw a complete single-elimination bracket — every round to the final, byes to the top seeds, and random, seeded or protected draws.
- League Table GeneratorPaste your results and get the league table, with the tiebreaks applied properly and a note saying which rule separated each pair of level teams.