A turn contains many interacting choices and reveals information as it unfolds. Two search systems share the same policy and judge: VCGS compares completed routes; BC-PUCT uses feedback to direct further exploration.
Two search systems
VCGS fits CPU-only Kaggle containers under a ten-minute limit. BC-PUCT supports larger budgets, offline training, and GPU-assisted evaluation.
VCGS: compare routes at the turn boundary
Retain root actions covering policy mass ρ, then follow up to B policy-proposed routes per action. At an information gate, sample K outcomes and evaluate their continuations at the turn boundary. Average those values before comparing routes; δ controls when search may replace the policy choice.
The submission used K = 4, B = 2, ρ = 0.90, and δ = 0.
BC-PUCT: let feedback guide exploration
Policy priors, estimated values, and an exploration bonus allocate effort. At an information gate, search samples K outcomes by fixing the random seed; each branch then proceeds under that belief. A global budget N caps total branches.
?information gate
→
k₁sampled outcome 1deterministic below
k₂sampled outcome 2deterministic below
k…sampled outcome Kdeterministic below
one global budget · at most N total branches
At an information gate, K sampled outcomes become belief-conditioned worlds. The random outcome is fixed within each world; N limits the work across all of them.
New positions are evaluated in GPU batches. Chance outcomes contribute probability-weighted averages; decision points compare continuations. Promising branches grow deeper until the budget is exhausted or the visit leader cannot be overtaken. Visit counts guide the final choice.
Averaging across sampled worlds stabilizes the value of high-variance draw actions. Unlike VCGS, BC-PUCT uses the judge’s feedback to decide what to explore next.
The above results show a significant improvement against raw policy across a 12-deck matchup matrix, with 2000 games of each matchup. The experiment used a maximum search budget of 1000 routes per decision (B1000), with an average tree depth of 6 decisions.
BC-PUCT scales significantly beyond this. We observed further gameplay improvements at B3000, B5000, and B10000 budgets, but gameplay is too slow to run a 144,000 game experiment. We tested search budgets up to 100,000 on NVIDIA RTX 3090, pushing our agent to spend nearly thirty minutes thinking about each game.
Inspect one recorded decision node by node. It illustrates a historical search run, not a fixed budget for every BC-PUCT evaluation.
Performance optimizations
Batching evaluates many positions in one GPU call. In a 10,000-game sample, caching avoided 68% of requested neural evaluations; retaining branches after a move cut whole-game time by 11.5%. Search is now CPU-bound.
Evaluations per second for the same network, on a log axis: two CPU threads, then one H100 at one, 256 and 4,096 positions per batch.
Historical search diagnostics
These earlier implementation profiles retain their original budgets, confidence bypass, and promotion guard. They explain those runs; they are not additional hyperparameters of the revised search description or a controlled estimate of its winrate gain.
An earlier two-planner execution profile
Same root, same policy. Gate keeps the policy’s action unless a settled value beats it, and skips search on 35.7% of decisions. PUCT spends 32 simulations building its own distribution and takes the most-visited action.
Promotion-guard measurements
Every live window where the guard overrode the policy’s promotion: 2,000 of our Kaggle games, 3,585 promotion prompts, 165 guard windows, 101 overrides. Both picks are rescored by the same reply rollout with 32 worlds and the opponent’s actual list; the guard’s pick scores higher in 89 of 101 and lower in 10.
A 129-decision sample of the submitted agent
Search overturns the policy when the policy was unsure and defers when it was confident. The two medians sit a quarter of the confidence scale apart.