# Lantern Mixed Tables · pytoolzx / WSRF training

Seven rooms share six separately fitted game-specific advisers: PLO, Limit Hold’em, Omaha Eight-or-Better, Razz, Seven-Card Stud, Stud Eight-or-Better, and the HORSE rotation. Each standalone room supports two or six seats. HORSE uses the five appropriate fixed-limit models in turn.

## What the models learn

Each forest estimates fractional showdown pot share under uniformly sampled remaining cards. The sampler preserves the observer’s own cards, community cards, and all exposed stud cards, including those of folded opponents. Opponent private cards and the real future deck are excluded. Omaha uses exactly two private cards and three board cards. Low rankings and high/low splits are evaluated by the same rules engine used in play.

The serving forest is an actual `pytoolzx.wsrf.WSRFRegressor`, trained through the isolated pytoolzx installation. `pytoolzx.indexrng.Index` with the BLAKE2b backend supplies separately named random streams. Browser predictions preserve float32 branch comparisons and are checked against Python boundary probes.

The second pass adds private and public suit counts, exposed high/low strength, and opposing exposed suit concentration. All games retain the rank map, LIKELY/UNLIKELY flags, made-hand features, and visible rank counts. PLO also gains an explicit field-relative entry comparison for an unraised opening pot; larger prices retain the price-based comparison.

The model supplies the equity estimate to a documented betting policy. The action scores in these rooms come from that explicit policy; they are distinct from the fitted action-return forest in the original Hold’em Lounge. Gentle and Seasoned settings add decision variety; Sharp follows the ranked policy.

## Data and selection

Current pass: 36,864 training positions and 4,718,592 training showdowns. Including validation and sealed testing, the pass samples 11,206,656 showdowns.

Every game balances six pools: opening/middle/closing × LIKELY/UNLIKELY. Compact and full candidates are fitted on the same training data. The validation MAE selects a model before the sealed test is generated. Labels use 128 showdowns per training position, 384 per validation position, and 512 per sealed-test position. All six games are new fits; the existing Hold’em Lounge advisers stay in their own room.

| Game | Selected candidate | Test positions | MAE, percentage points | Exact parity probes |
|---|---|---:|---:|---:|
| PLO | full | 1536 | 6.120 | 4115 |
| Limit Hold’em | compact | 1536 | 5.699 | 2123 |
| Omaha 8 | full | 1536 | 6.037 | 3998 |
| Razz | full | 1536 | 4.858 | 3818 |
| Seven-Card Stud | full | 1536 | 4.600 | 4310 |
| Stud 8 | full | 1536 | 4.413 | 3986 |

MAE measures estimation error relative to independently sampled pot-share labels. It is separate from a game win rate. Both zone-level errors and label sampling errors are preserved in each JSON receipt. The first pass is retained under `training-archive/mixed-v1` outside the assembled site. `training-archive/mixed-v2/engine-at-fit.js` preserves the engine used by the second fit; the serving engine subsequently received a PLO raise-label correction, with identical actions and numerical evaluation.

## Fresh complete-hand matches

36,864 complete hands cover every variant, two/six seats, and calling, random-action, and selective practice opponents. The policy rotates through every seat on a deck. Stacks alternate 40 and 100 big blinds, with rake set to zero. Approximate intervals use independent deck means.

| Game | Seats | Practice style | Hands | BB / 100 | Approx. 95% interval |
|---|---:|---|---:|---:|---|
| PLO | 2 | calling | 512 | 30.08 | 20.86 to 39.29 |
| PLO | 2 | random | 512 | 73.05 | -19.54 to 165.64 |
| PLO | 2 | selective | 512 | 35.06 | 20.17 to 49.95 |
| PLO | 6 | calling | 1536 | 63.35 | 51.31 to 75.38 |
| PLO | 6 | random | 1536 | -24.77 | -69.72 to 20.18 |
| PLO | 6 | selective | 1536 | 52.83 | -6.41 to 112.06 |
| Limit Hold’em | 2 | calling | 512 | 76.37 | 63.26 to 89.47 |
| Limit Hold’em | 2 | random | 512 | 46.09 | 20.12 to 72.06 |
| Limit Hold’em | 2 | selective | 512 | 55.76 | 34.47 to 77.05 |
| Limit Hold’em | 6 | calling | 1536 | 66.05 | 46.81 to 85.28 |
| Limit Hold’em | 6 | random | 1536 | 66.99 | 41.98 to 92.00 |
| Limit Hold’em | 6 | selective | 1536 | 36.81 | 9.16 to 64.45 |
| Omaha 8 | 2 | calling | 512 | 43.16 | 33.58 to 52.75 |
| Omaha 8 | 2 | random | 512 | 52.54 | 33.11 to 71.97 |
| Omaha 8 | 2 | selective | 512 | 42.87 | 26.15 to 59.59 |
| Omaha 8 | 6 | calling | 1536 | 31.97 | 17.79 to 46.14 |
| Omaha 8 | 6 | random | 1536 | 45.13 | 26.27 to 63.98 |
| Omaha 8 | 6 | selective | 1536 | 51.06 | 17.17 to 84.96 |
| Razz | 2 | calling | 512 | 122.55 | 103.11 to 141.99 |
| Razz | 2 | random | 512 | 95.95 | 69.12 to 122.78 |
| Razz | 2 | selective | 512 | 49.63 | 29.05 to 70.21 |
| Razz | 6 | calling | 1536 | 151.25 | 126.83 to 175.68 |
| Razz | 6 | random | 1536 | 167.90 | 130.10 to 205.69 |
| Razz | 6 | selective | 1536 | 104.84 | 68.64 to 141.04 |
| Seven-Card Stud | 2 | calling | 512 | 92.72 | 74.62 to 110.83 |
| Seven-Card Stud | 2 | random | 512 | 58.54 | 32.43 to 84.64 |
| Seven-Card Stud | 2 | selective | 512 | 47.56 | 22.39 to 72.73 |
| Seven-Card Stud | 6 | calling | 1536 | 89.47 | 67.69 to 111.25 |
| Seven-Card Stud | 6 | random | 1536 | 41.45 | 21.55 to 61.34 |
| Seven-Card Stud | 6 | selective | 1536 | 59.07 | 22.08 to 96.06 |
| Stud 8 | 2 | calling | 512 | 63.53 | 50.37 to 76.68 |
| Stud 8 | 2 | random | 512 | 54.27 | 29.24 to 79.30 |
| Stud 8 | 2 | selective | 512 | 42.97 | 24.42 to 61.52 |
| Stud 8 | 6 | calling | 1536 | 66.41 | 52.35 to 80.47 |
| Stud 8 | 6 | random | 1536 | 61.01 | 37.63 to 84.39 |
| Stud 8 | 6 | selective | 1536 | 26.34 | 6.81 to 45.86 |

These outcomes describe the named local opponent policies. The initial evaluation guided the second pass; the second pass uses a fresh match namespace. Model selection uses validation error, while these matches report the resulting play. Range assumptions and the explicit betting policy remain useful directions for further experiments.

## House rules and persistence

Blinds are 10/20; fixed increments are 20/40. Stud antes are 2 and the bring-in is 5, with an option to complete to 20. Four full bets cap a limit street, including heads-up. A full increment reopens betting; completing a bring-in reopens it to players who entered below the full small bet. Stud-high alone offers the fourth-street exposed-pair big-bet option. The six-seat maximum keeps stud deals inside a single 52-card deck.

Every contribution layer is settled independently among its eligible players. A qualifying low splits that layer; the high half receives the split odd chip. Tied awards allocate remaining odd chips clockwise from the stored button. HORSE changes games after a full orbit of completed hands and freezes the next flop-game button through the three stud rounds.

The mixed rooms use separate local save keys for each game and seat count. Exact replay reconstructs the saved deal and action sequence, with chip conservation and completion checks. Practice peeks are marked in history. HUD opening-round statistics apply to preflop or third street as appropriate. Player refills are explicit; opponent refills keep the company seated. Both increase recorded funding separately from hand profit.

## Reproduce

From the editions root, using a Python environment with pytoolzx and its training dependencies:

```sh
python3 -B tools/poker/train-mixed.py
node tools/poker/mixed-benchmark.cjs
node tools/poker/mixed-guide-data.cjs
node tools/poker/publish-mixed-guides.cjs
node tools/poker/document-mixed.cjs
node tools/poker/test-mixed.cjs
node tools/poker/print-mixed-guides.cjs
node tools/poker/test-mixed-models.cjs
npm run build -- --reuse
```

The separate library environment can be selected as `../pytoolzx/.venv/bin/python`. Sampling caches use the temporary `lantern-mixed-v2` directory. The site serves exported JSON forests and runs without Python. Guide printing uses local Chrome, with `CDP_PORT` defaulting to 9254 and `POKER_URL` selecting the preview site.

Seven original sixteen-page guides add 112 pages, with six worked hands per guide, affirmative exercises, game-specific lessons, measured training results, and fourteen downloadable illustrated/ink-saving PDFs. The six game datasets contain 36 independent worked fixtures; HORSE revisits the appropriate game fixtures in rotation context.

Rules references (Wikipedia): [POT-LIMIT OMAHA](https://en.wikipedia.org/wiki/Omaha_hold_%27em#Pot-limit_Omaha), [FIXED-LIMIT HOLD’EM](https://en.wikipedia.org/wiki/Texas_hold_%27em), [LIMIT OMAHA EIGHT-OR-BETTER](https://en.wikipedia.org/wiki/Omaha_hold_%27em#Omaha_hi-low_split-8_or_better), [SEVEN-CARD RAZZ](https://en.wikipedia.org/wiki/Razz_(poker)), [SEVEN-CARD STUD](https://en.wikipedia.org/wiki/Seven-card_stud), [STUD EIGHT-OR-BETTER](https://en.wikipedia.org/wiki/High-low_split), [THE FIXED-LIMIT MIX](https://en.wikipedia.org/wiki/HORSE_(poker)).
