DokoArenav. 0.2.1

Methods

How we train the bots

DokoArena has five bot generations. Origin, the first gen, just follows the rules and takes a trick whenever it can. Vanguard, the second gen, added tactical parameters for things like partner clues, foxes, Karlchen, and trump conservation, but it had little idea how to weight those choices to win consistently.

Ascendant, the third gen, trained those weights through self-play and benchmarks. Zenith, the fourth gen, adds play-quality behaviors like cheap ace-ruffs and safe partner feeding. Horizon, the fifth gen, tightens heart-ten discipline and announcements. All generations play with the same imperfect information humans get — partners stay hidden until ♣Qs or the contract make them public. The matrix below shows the result first; the rest of the page explains the training loop behind it.

Scale of the climb

self-play rounds in a single dataset

50,000

self-play rounds in a single dataset

card decisions recorded from that run

2.4M

card decisions recorded from that run

Head-to-head matrix

Each cell is the decided win rate of the row bot against the column bot over 5,000 paired deals, using casual rules and the round-score metric.

Row vs colOriginVanguardAscendantZenithHorizon
Origin (Gen 1)50.0%47.5%32.6%25.6%25.3%
Vanguard (Gen 2)52.5%50.0%40.1%24.4%23.2%
Ascendant (Gen 3)67.4%59.9%50.0%34.9%33.4%
Zenith (Gen 4)74.4%75.6%65.1%50.0%38.2%
Horizon (Gen 5)74.7%76.8%66.6%61.8%50.0%

The self-climb loop

Each bot is a scoring function with about 29 parameters. Raise fox-keep and it protects the Ace of Diamonds longer; raise trump-conserve and it stops wasting trump early; raise Karlchen and it fights harder for the last Jack of Clubs. The climb loop nudges those parameters, tests the new profile, and keeps only sets that beat the previous winner.

The self-climb loop
Mutate parameters
Play against previous winner
Keep winner, discard loser

Generations

Zenith keeps Ascendant’s scoring engine, then adds play-quality behaviors for situations Ascendant still mishandled: cheap side-suit ruffs, safe partner feeding, and smarter trump choice when floating the fox.

The climb is deliberately narrow: turn on a few new knobs, force real decision disagreement, then promote only when long paired benchmarks beat the previous generation.

  1. On a fresh non-trump lead, prefer cashing the fox or diamond ten instead of burning a queen; with two seats still to play, prefer a jack that clears the fox.
  2. Hearts leads are treated differently because there is no side-suit heart ten, so floating the fox is downweighted and safer trump is preferred sooner.
  3. When a partner already has a trick remaining seats cannot beat, dump high point cards instead of low trash.
  4. Focused self-climb retunes the new knobs against the prior champion, committing each keep and verifying on multi-thousand-deal confirms.
  5. Shipping requires clearing the Dual bars on a long matrix: leave beta above 53% vs Ascendant, and publish research once the leap is large enough to matter.

On the current 5,000-deal matrix Zenith wins about 65% decided rounds against Ascendant, with larger margins against Vanguard and Origin.

What's next

We will keep training stronger bot generations with broader self-play, benchmarks against different playstyles, and better adaptation across multiple rounds.

We also plan to study player-vs-bot and player-vs-player replays to identify winning decisions and teach them back to the bots. The long-term goal is a bot that can consistently challenge the strongest players, followed by selectable Easy, Medium, and Hard opponents.