Olympiad Open 2026

This project began with a machine-learning model that works alongside two chess engines, Lc0 and Stockfish, to predict the probability of outcomes in a chess game.

Polymarket runs a market on the winner of the Chess Olympiad, a two-week team tournament between countries. For this market, I model the tournament as a whole, based on the live position of the underlying games throughout the tournament.

This dashboard shows our model's underlying probabilities per team, and compares them against Polymarket's prices. Those prices are thin enough that my own trades move them — see Polymarket below.

Contents
  1. The Olympiad
  2. The live-game model
  3. The tournament model
  4. What the model does not know
  5. Polymarket
  6. Finding your way around
  7. Glossary
  8. What I checked

The Olympiad

The live-game model

What it does. Give it a game in progress between two strong players and, after every move, it returns the WDL: Win Draw Lose probability from White's perspective. It runs live, move by move, on the Olympiad's top boards, with 2-3s latency from the public broadcast.

Live broadcastmoves, clocks Lc0how good the position is,for these two players Stockfishhow hard the position isto play The human sideclocks, repetitions, who draws ML model v1.3win / draw / loss Game pages Tournamentmodel
Two engines answer two different questions; the model adds what neither of them sees — the clocks and the players.

Why it is harder than "ask a chess engine"

Stockfish is superhuman at judging a position, but it answers a different question: who is better with perfect play from here. Lc0 can be configured to play at a certain rating — which establishes a baseline any model must beat. Neither engine can be effectively configured to account for non-positional variables, such as changing clock pressure, or the psychological impact of a blunder.

A worked example. Round 5, board 2: Nguyen, Thai Dai Van (2633, Czech Republic) v Vachier-Lagrave (2718, France). At move 37 the engine liked White: 58% White, 39% draw. The model said 19% White, 79% draw. Three things the engine does not price:

The clock
White had about 8 minutes left; Vachier-Lagrave had 21.
No way through
The engine's best move and its second best were worth the same — an edge with no forcing line is an edge that strong defenders hold.
A repetition
The position had already repeated once. Players who are repeating are usually on their way to agreeing a draw.

Drawn on move 45. Open the game and step through it: the model's line sits below the engine's from move 31 to the end. The mirror image is Caruana v Ivanchuk in round 4 — the engine called it nearly level around move 30, but Ivanchuk had 39 seconds left to Caruana's seven minutes, so the model gave White 49% against the engine's 29%. Caruana won. Open that one.

In trading terms, the engine is fair value under perfect execution and the model adds execution risk. It starts from the engine's number (the anchor) and learns how human games actually finish from:

What the live-game model does not know

In the 2008 World Chess Championship, up 6-4, Viswanathan Anand (White) famously only needed a draw to secure the title against Vladimir Kramnik. Abandoning his usual sharp, tactical style, Anand chose a highly-researched symmetric variation of the solid Queen's Pawn opening, easily liquidating the board into a dead draw.

Tournament and match state may influence a player's intentions, and opening choice may indicate them. I was not able to model any significant effect here — I believe a human has an advantage over the model in certain such situations.

Data

The evidence

Beyond this tournament

Nothing in the model is specific to the Olympiad. Any elite classical game on a live broadcast can be priced the same way: World Championship matches, the Candidates, the big invitational events. The Olympiad dashboard is one application, where the model feeds a tournament simulation. The direct use is the per-game markets Polymarket lists for the biggest matches, where this model is the forecast.

The tournament model

Official standingsand pairings Live win / draw / lossper board, from above Play out the rest of thetournament, 50,000 times P(win)per team Polymarketprice
The market price is never an input. It sits at the end, beside the answer, for comparison.

Starting from the real standings, the model runs a Monte Carlo simulation. It plays every remaining round with weighted dice: it pairs the teams by the official Olympiad rules, rolls each of the four boards, scores the match, and moves on. At the end it breaks ties the official way and records who won. That is repeated tens of thousands of times. P(win) is the share of those simulated tournaments that a team won.

What it costs to run

Lc0 analysis is heavy on the GPU, so the full live model runs on a selected 48 boards. A lighter Stockfish-only pricer covers the matches of lower consequence, so that the simulation still reflects likely future pairings in real time. The full simulation runs on a timer and whenever a board finishes; individual moves re-weight the standing simulation rather than starting a new one.

What the model does not know

A gap between the model and the market is a question, not a trade. The model only knows ratings, results and the pairing rules. The market also prices things the model cannot see:

Tested on the last five Olympiads, the model gave its top four favourites about 80% between them, and they won three of the five. Its single favourite won none of them. In a field this close a 30% favourite loses most of the time, and five events are too few to show whether the model leans too hard on favourites.

Polymarket

Polymarket prices should be taken with the understanding that they are influenced by my own small trades and liquidity — ie, apparent rapid price reaction to live state changes is in part driven by my own trades.

By day 4 of the tournament, the market had $100k in total traded volume — illiquid and stale. The market is predominantly operated on by market making bots, which are unreactive to changes throughout the tournament. I know of two other sharp participants, whom I have encountered in other chess markets. At early stages in the tournament, prices are relatively insensitive to changes in board state, though model swings of up to 7% were observed and unreflected in the market.

Uzbekistan appears overpriced — the model had 18% against a market price of 30% before the tournament started — with the United States and India correspondingly cheaper. I explored multiple theories:

Therefore I took a mild short starting position in Uzbekistan, and focussed my attention on the gap between the model and the market.

How the market itself works

Polymarket lists one YES/NO contract per country (about 40 of them), plus one for "another country". A YES share pays $1 if that team wins, $0 otherwise, so a price in cents reads as a probability in percent.

On low liquidity markets, execution cost can be significant. On this market, the asks of all countries add up to some ~110%: that 10% is the round trip you pay for crossing the spread, and it is why a small model-versus-market gap is not a trade.

Finding your way around

Probabilities: the main screen

Key boards: the games themselves

A single game (opened from Key boards)

Tournament model details: one team in depth

Dark mode: the button at the top right of every page. All times are shown in your local time.

Glossary

P(win)
Share of simulated tournaments the team won outright, with ties broken the official way. This is the number to compare with the market.
P(top on MP, shared)
Chance of finishing on the top score, including ties. It is always higher than P(win) and does not match how the market settles.
MP / match points
2 for a match win, 1 for a draw, 0 for a loss. The standings are ranked on these.
GP / game points
The sum of board results (1 / ½ / 0). A secondary tie-break.
E[MP], median
Average and middle final match-point total across the simulations.
N+ MP
Chance of finishing on at least N match points.
Sonneborn-Berger (SB)
The Olympiad's first tie-break: roughly, the sum of the scores of the teams you beat. Beating strong teams is worth more.
Bid – ask, mid
Best buy and sell prices on Polymarket, in cents. The mid is the average of the two.
model − mid
The model's P(win) minus the market mid, in percentage points. A positive value means the model rates the team higher than the market does.
Overround
How far the market's prices sum past 100%. It is the market's margin.
Elo / rating
A player's strength number. A 100-point edge ≈ 64% expected score.
GM, IM, FM
Chess titles: Grandmaster, International Master, FIDE Master.
W / D / L
Win / draw / loss probabilities for a single game.
Live-game model (chess_model, v1.3)
The machine-learning model that prices one game in progress from the engine's view of the position, the clocks, the position's difficulty and the players.
Anchor
The engine's own win / draw / loss estimate, which the live-game model starts from and corrects.
Log loss
The standard score for probability forecasts. Lower is better, and confident wrong calls are punished hard.
Shadow
Running live and logging every price, without trading on it. This is how a model earns trust before money is put on it.
Lc0
Leela Chess Zero, a neural-network chess engine. Its view of the position is the live-game model's main input.
From ratings
A board priced only on the two players' ratings, because the live-game model is not following it.
Replay
A past round priced after the fact by re-running the live-game model over the finished games. It is labelled so it is never mistaken for a price made at the time.
Ply
One move by one side (a full "move" in chess notation is two plies).
Monte Carlo
Estimating probabilities by simulating the uncertain future many times and counting outcomes.

What I checked

Sources: official results and pairings from Chess-Results; live moves and clocks from the Lichess broadcast; prices from Polymarket's public feed. All read-only.