# Lantern Poker · WSRF training, third edition

## Zone Atlas update: fourth training experiment

The expanded **180-page Field Guide** and **300-page WSRF Zone Bliss atlas** accompany a new pytoolzx/WSRF experiment. Both books have illustrated and ink-saving PDFs, searchable browser reading, alternating 20 mm / 15 mm binding margins, and navigation outlines. The earlier twelve-page PDF is retained as `lantern-poker-quick-start.pdf`.

The new fit uses **16,384 positions**, **78,495 legal-action rows**, and **128 complete continuations per action: 10,047,360 training continuations**. Validation has 1,024 positions with 256 continuations per action; the fresh position test has 2,048 positions with 512. Seeds come from `pytoolzx.indexrng.Index` in the independent `lantern-zone-bliss-v4` namespace. Both candidate forests are actual `pytoolzx.wsrf.WSRFRegressor` fits.

This pass approximates public-action-conditioned pocket ranges. For each active opponent, twelve proposed pockets are weighted by a smoothed likelihood of the last public call or raise under a fixed 40% tight / 20% balanced / 20% pressure / 20% loose policy mixture. Sampling uses the observer's own pocket and public information only. It is sequential finite-proposal importance resampling, **not an exact joint posterior**. Earlier action evidence is discarded; the assumed policy mixture can be wrong. HUD totals remain outside the models.

The fitting comparison selected `atlas-full` by validation regret. A separate played validation compared both candidates against seven equally weighted opponent/table settings. Its recorded promotion rule required positive mean improvement and positive tight-opponent improvement. **Neither candidate cleared that rule, so the games retain v3.** The final evaluation does not retroactively change that selection.

The final paired tournament completed **92,160 hands**, candidate plus incumbent, on a new namespace. The research candidate beat v3 directly at 2, 6 and 9 seats in those final fixtures and improved against several other local policies. It still lost against the tight opponent and earned less than v3 against random play. These are local-policy experiments with alternating 40/100 BB stacks and no rake; they do not establish professional or equilibrium performance. All rows and individual deck-grouped intervals are in `training/refinement-matches.json`.

The new models pass **28,843** exact Python/browser prediction probes. `test-books.cjs` also checks the public-evidence information boundary by changing actual hidden pockets while preserving public observations and obtaining identical seeded labels.

New receipts: `refinement-training.json`, `refinement-selection.json`, `refinement-tournament-selection.json`, `refinement-matches.json`, and `refinement-parity.json.gz` under `training/`. New model exports are `actions-atlas-compact.json` and `actions-atlas-full.json`; they are research candidates, not the serving policy.

### The books and their numerical examples

`training/zone-atlas.json` contains an independent, deterministic study collection: **91 unordered rank pairs / 169 starting classes, 72 worked decisions, 40 selected zone journeys, and 24 experiments**. The atlas has 60 practice questions with worked answers and 32 original foundation lessons. The page content is substantive prose, diagrams, calculations and comparisons; no blank filler is used to reach the page count.

Rank geometry and next-card transition counts are exact. Showdown results are Monte Carlo estimates under the printed range assumptions. Worked action rankings use the stable v3 exports identified by hashes in the study receipt. The new research fits are described separately. Selected journey patterns illustrate transitions and must not be treated as an unbiased estimate of transition frequency. Original guide claims are not copied into the study data as measurements.

Reproduction, from a Python environment with pytoolzx installed:

```sh
python3 -B tools/poker/train-refinement.py
node tools/poker/refinement-benchmark.cjs validation
node tools/poker/refinement-benchmark.cjs final
node tools/poker/atlas-data.cjs
node tools/poker/publish-books.cjs
# Serve the source site on 8024 and run headless Chrome with CDP on 9254:
node tools/poker/print-books.cjs
npm run test:poker
npm run build -- --reuse
```

The printer verifies every page stays above its footer before rendering, and the Node checks verify actual PDF page-object counts and navigation outlines. `training/books-receipt.json` identifies the book HTML and data hashes; `training/book-pdfs.json` lists the rendered editions. Website links are at `zone-bliss/`. The original v3 experiment is preserved below for context.

The room serves a learned equity model and a learned betting-return model fitted with **pytoolzx.wsrf.WSRFRegressor**. The separate pytoolzx installation supplies pytoolz/WSRF; no changes to the original library are required. Deterministic training seeds come from **pytoolzx.indexrng.Index** with the blake2b backend.

## Data and selection

* Equity: 49,152 training positions × 384 Monte Carlo rollouts; 2,048 validation positions × 1536; 4,096 fresh test positions × 2048. Positions include 1–8 opponents, all streets, different synthetic range widths, and balanced dynamic LIKELY/UNLIKELY training groups.
* Betting: 8,192 played positions, 39,252 legal-action rows, 64 complete continuations per action (2,512,128 training continuations). Validation uses 768 positions × 192 samples per action; fresh testing uses 1024 × 256.
* The equity candidates were base features, rich shared forests, and rich distance-zone forests. Among the two zone-aware candidates, **rich-shared** won the predeclared validation score: 0.5 overall MAE + 0.25 LIKELY MAE + 0.25 UNLIKELY MAE. The base comparison has slightly lower error (2.59% versus 2.61%); the experiment does not establish a predictive bonus from the distance features.
* Compact and full betting models were selected by validation regret. A separate played-match validation compared compact, full, and new-equity-only policies against four opponent/table settings. **full** won that validation. The final deck namespace was reserved until selection finished.

The selected equity forest contains 192 trees, 66 features, and eight pools: heads-up/multiway × four streets. The dynamic zone is a feature, not a routing key in this selected design. Both LIKELY and UNLIKELY examples train each street pool. The action forest contains 192 trees and 86 features in the same eight pools.

## Results

Fresh equity mean absolute error: **2.61%** in showdown share. LIKELY: **2.69%** (3330 positions); UNLIKELY: **2.29%** (766 positions). These are errors, not win rates.

The full betting forest selects a sampled-best action on **70.31%** of fresh positions. Its mean normalized regret against those sampled action labels is **0.00965**. This is an approximation to policy-dependent continuation value, not regret against optimal play.

The final tournament completed **172,032 hands**: 86,016 candidate hands plus the same number of baseline hands. Every seat is rotated on each deck; stacks alternate 40/100 big blinds, no rake. The archived v2 policy is evaluated on the same decks against the same opponents. Intervals group seat rotations by deck.

| Seats / opponent | Candidate hands | BB / 100 | Approx. 95% interval |
|---|---:|---:|---|
| 2 / v2 | 8,192 | +141.1 | +95.0 to +187.1 |
| 2 / call | 4,096 | +1149.0 | +1048.6 to +1249.4 |
| 2 / random | 4,096 | +248.6 | +153.3 to +344.0 |
| 2 / tight | 4,096 | -188.7 | -257.6 to -119.9 |
| 2 / pressure | 4,096 | +107.0 | +30.8 to +183.3 |
| 6 / loose | 12,288 | +349.2 | +263.0 to +435.5 |
| 6 / v2 | 12,288 | +62.3 | +11.4 to +113.2 |
| 9 / balanced | 18,432 | +67.3 | +9.7 to +124.9 |
| 9 / v2 | 18,432 | +75.9 | +28.6 to +123.1 |

The selected model beats v2 at 2, 6 and 9 seats in these local matches. **It loses against the tight opponent**, and it earns less against random play than v2. Those weaknesses remain in the published results. These opponents are local policies, not professional players or equilibrium strategies. The intervals reflect deck sampling for these fixtures, not uncertainty about all possible opponents; they are individual, not simultaneous, intervals.

## What the models know

Equity labels sample unknown opposing pockets and boards without replacement within each rollout. Range width is a synthetic weighted pocket distribution. The action trainer resamples unknown cards uniformly, preserves the current public betting state, and runs each legal action through the actual table engine to the end of the hand against a fixed mixture of tight, loose, balanced and pressure continuation policies. The same sampled deck is shared across candidate actions. Continuation opponents use their own sampled cards and the revealed board, with a small learned WSRF equity evaluator. They never inspect the future board.

Action targets are (final stack − current stack) / max(big blind, pot + effective stack). Existing contributions are sunk. Folding receives exactly zero when ranking actions. A second tree path explains the betting estimate. Patient/Bold nudges adjust action ranking; they do not alter the shuffle or equity estimate.

Hidden-card sampling currently does **not infer opponents’ ranges from their betting history**. HUD statistics are for the player: their feature placeholders remained constant during this fit and are not fed into the advisers. Simulated continuation policies are approximate, not equilibrium solvers. Persistent matches can grow deeper than the 40/100 BB tournament conditions. Peek mode is practice, marked in history, and never passes actual opponent cards into the models or Monte Carlo lab. Gentle uses the equity model with a simpler policy and 18% soft lapses; Seasoned uses learned betting with 4% soft lapses; Studious uses learned betting without lapses. The benchmark tests the balanced, full model policy, not every nudge/personality combination.

## Guide conventions and reproducibility

Ranks run 2=0 through A=12. References are {a, b, (a+b) mod 13, |a−b|}; circular distance ≤1 is near. The reference pair is LIKELY when at least 7 of the 13 ranks are near, following the executable LRO method. Pocket, dynamic, and board-majority labels are distinct. A distance bucket is not automatically a set of winning outs. Original guide claims are not inserted into the training labels or reported as measured results. See guide-sources.json for filenames, hashes, and the 169-case parity receipt. Original PDFs are not copied into this site.

Use a Python environment where pytoolzx, NumPy and its WSRF dependencies are installed, and Node.js for the simulator:

```sh
python3 -B tools/poker/advanced-equity.py
python3 -B tools/poker/train-actions.py
node tools/poker/advanced-benchmark.cjs validation
node tools/poker/advanced-benchmark.cjs final
node tools/poker/publish-guide.cjs
npm run test:poker
```

The benchmark also requires the source checkout’s training-archive/lantern-v2/models/sharp.json. The deployment includes training scripts, model exports and receipts; the historical archive and raw simulation caches remain in the source workspace. The namespace names, split sizes, fitting parameters and model SHA-256 hashes are recorded in advanced-equity.json and action-training.json. These scripts are deterministic for the recorded implementations; rerunning them is substantial offline work. The primary commands above do not rebuild the PDF: serve the source site and run the print-guide.cjs command described in that script after publishing the HTML.

Checks include 104,103 exact Python/browser predictions, including float32 split-boundary probes, random complete hands at all table sizes, chip conservation, public-information-only features, hidden-card-independent continuation labels, HUD accounting, save/reload and browser interaction checks. Fit-time source hashes remain in their receipts; release.json records current serving sources after equivalent feature caching and interface updates.

## Files

* advisers.json selects the models used by the room.
* training/advanced-equity.json, action-training.json, tournament-selection.json and advanced-matches.json contain the measurements.
* guide.html is the interactive companion; lantern-poker-field-guide.pdf is the illustrated download. book.html and book.css are the print source.
* The older report.json and benchmark.json describe version 2 only; they are retained as historical receipts.
