Off-CA side project: an Elo-style rating engine for tennis in Python
Posted: June 26th, 2026, 1:48 pm
Most of my coding time these days goes into cellular-automata tinkering, but I keep one side project running that has nothing to do with grids and rules - and since this crowd appreciates a good simulation, I figured I'd share it.
It's a small Python engine that rates tennis players. It ingests historical ATP and WTA results and gives each player a single strength number, then updates it after every match - an Elo-style system, the same core idea chess ratings use. What began as a throwaway script grew into something with surface adjustments (clay vs grass changes a lot), inactivity decay, and sane handling of mid-match retirements. Like any simulation over messy real data, the cleaning is most of the work.
It actually rhymes with CA work more than I expected: a simple update rule applied over and over, emergent rankings you didn't hand-design. Two questions for the algorithm-minded here: do you keep a coding hobby outside cellular automata? And for anyone who's built rating systems (Elo, Glicko, TrueSkill), how did you handle volatility for players with very few matches? That's the part I keep rewriting.
Quick update: I finally cleaned it up and put it online — it's a lightweight tennis rating model now, if anyone fancies a look away from the gliders.
It's a small Python engine that rates tennis players. It ingests historical ATP and WTA results and gives each player a single strength number, then updates it after every match - an Elo-style system, the same core idea chess ratings use. What began as a throwaway script grew into something with surface adjustments (clay vs grass changes a lot), inactivity decay, and sane handling of mid-match retirements. Like any simulation over messy real data, the cleaning is most of the work.
It actually rhymes with CA work more than I expected: a simple update rule applied over and over, emergent rankings you didn't hand-design. Two questions for the algorithm-minded here: do you keep a coding hobby outside cellular automata? And for anyone who's built rating systems (Elo, Glicko, TrueSkill), how did you handle volatility for players with very few matches? That's the part I keep rewriting.
Quick update: I finally cleaned it up and put it online — it's a lightweight tennis rating model now, if anyone fancies a look away from the gliders.