Research Phase II

New evidence from controlled experiments on exact reduced games (single-street river subgames, Leduc): abstraction refinement, decision-time resolving, action translation; plus native training performance on the release configuration, and the ideas that failed. Every comparison has a capacity- or compute-matched control and an independent confirmation run.

1. Where should abstraction capacity go?

Can measured strategic error decide which bucket to split, and does that beat spending the same capacity uniformly or at random?

baseline (4 cells/player)
0.369
random splits
0.251
uniform, same capacity
0.146
adaptive: equity spread
0.119
adaptive: measured error
0.110
oracle (try every split)
0.099
no abstraction (floor)
0.004

Exact exploitability (chips, 10-chip pot) of the abstract strategy in the real river subgame, mean over 45 independent confirmation instances. Splitting the cell with the largest measured error is 24% better than a uniform partition with identical capacity (39/45 wins, 95% CI of the gain 0.024–0.048) and 56% better than random splits. The solver's own positive regret as a signal is no better than random (0.266). These are exact single-street subgames; no new Hold'em abstraction or release was trained from this result.

2. Profile-driven native training speedup

Where does training time actually go, and can it be removed without changing a single bit of output?

Inclusive share of training CPU before optimization (functions call each other, so the shares overlap).

FeatureCache::river_values
69.5%
FeatureCache::compute
81.3%
MCCFR::get_or_create
10.8%
HoldemGame::utility
1.3%
changeit/s before → afterspeedupoutput
deduplicated river percentile table (no 1,081-value sort)854 → 13621.60×bit-identical
+ board counted once per table in the evaluator859 → 14591.70×bit-identical
+ flat open-addressing infoset index858 → 16781.96×bit-identical

River percentile buckets rebuilt a 1,081-hand table for almost every new board. Deduplicating canonical holdings, counting the board once, and a flat hash index made release-config training 1.96× faster with an identical strategy digest; exhaustive 6- and 7-card evaluator parity and 10,000-iteration Python/native tape parity still hold.

3. Decision-time resolving: better, and safe?

Can re-solving a subtree at decision time improve a coarse precomputed strategy without making it exploitable?

static blueprint
1.315
unsafe resolve @100ms
3.711
safe resolve @100ms
1.191
equilibrium (reference)
0.703

Exact value of the opponent's best response (chips; lower is better), mean over 27 instances. Unsafe resolving is worse than the blueprint in 21/27 instances at this budget; the safe re-solve gadget (Burch et al. 2014) in 3/27, and never by more than 1e-4 chips at budgets of one second or more. Scope: exact single-street river subgames with a coarse research blueprint; “safe” is a measured property there, not a deployment guarantee for full Hold'em, and the release does not resolve at decision time.

4. What does an off-tree bet cost?

When the opponent bets a size the strategy never trained on, how much worst-case value does each translation rule give away?

menu / seatnearest (pot fraction)nearest in log space (release)pseudo-harmonic (randomized)
B 50 100 · out of position0.186 / 0.1610.183 / 0.1610.184 / 0.161
B 50 100 · in position0.784 / 0.8190.874 / 0.8840.771 / 0.809
C 33 75 150 · out of position0.081 / 0.0650.112 / 0.0960.033 / 0.024
C 33 75 150 · in position0.224 / 0.2200.570 / 0.6010.072 / 0.076

Exact translation cost (chips, discovery / independent confirmation), measured in exact single-street river subgames. There, on a release-like 33/75/150% menu, the deterministic nearest-in-log-space rule costs roughly 8× more than randomized pseudo-harmonic mapping (Ganzfried & Sandholm 2013). This is a reduced-subgame result and a recommendation for follow-up; the release still uses its nearest-in-log-space matcher.

5. What did not work

Which plausible ideas were tested under controls and failed?

  • Active compute allocation NULL
    Prioritized deal sampling (4 signals + an exact best-response oracle) never replicated a gain over standard MCCFR on independent seeds; effects matched an information-free random reweighting.
  • Confidence v3 (logistic score) REJECTED
    Lower accepted regret on 5/9 held-out games but a higher false-confidence rate on 8/9; worse under game-family shift. v2 stays.
  • Train longer under imperfect recall NEGATIVE
    With round-1 history forgotten (Leduc), exploitability in the real game ROSE from 0.48 to 0.94 with CFR+, and from 0.49 to 0.82 with the release's own algorithm.
  • Policy distance as quality NEGATIVE
    A distilled Leduc strategy only 0.064 TV from equilibrium is 3,600x more exploitable.
  • Positive regret as a refinement signal NEGATIVE
    No better than random splitting; error-guided refinement needs within-cell heterogeneity, not solver regret.
Method
Exact exploitability in reduced exact games (river subgames, Leduc); A/B native benchmarks with identical build flags; discovery and independent confirmation seeds. Full write-ups in docs/phase2/.
Limitation
Exact results come from single-street or small games, not full Hold'em; nothing here changes the release strategy.
Data
PRECOMPUTED phase2.json
Reproduce
python scripts/build_phase2_web_data.py
Commit
1029982ceaba
Strategy
sha256:f1860de75526…

← Research Lab