id: 667381444ce943c48cbc3a27ba08ec9d
parent_id: 5f44523f72aa46e48eea0a2a729b5dd6
item_type: 1
item_id: 659da65d964344fc89e6b4eafac0098c
item_updated_time: 1781505616555
title_diff: "[]"
body_diff: "[{\"diffs\":[[0,\" helpers\"],[1,\", V3+ decision logic\"],[0,\")\\\n│     \"]],\"start1\":1241,\"start2\":1241,\"length1\":16,\"length2\":36},{\"diffs\":[[0,\"duction \"],[-1,\"strategy\"],[1,\"(thin wrapper over base)\\\n│       │   ├── rollout_postflop_v4.rs     # Gen 2 V4 (V3 + MC multi-way, thin wrapper)\"],[0,\"\\\n│      \"]],\"start1\":1328,\"start2\":1328,\"length1\":24,\"length2\":128},{\"diffs\":[[0,\"holds (8\"],[-1,\"0\"],[1,\"2\"],[0,\" configu\"]],\"start1\":1579,\"start2\":1579,\"length1\":17,\"length2\":17},{\"diffs\":[[0,\"ble \"],[-1,\"f64 \"],[0,\"fields\"],[1,\" incl. mc_samples/mc_seed\"],[0,\")\\\n│ \"]],\"start1\":1598,\"start2\":1598,\"length1\":18,\"length2\":39},{\"diffs\":[[0,\"configs\\\n\"],[1,\"    │   ├── cash_nl.toml          # Gen 2 V3 production\\\n    │   ├── cash_gen2_v4.toml     # Gen 2 V4 (MC multi-way)\\\n    │   └── cash_gen3.toml        # Gen 3 range-aware\\\n\"],[0,\"    └── \"]],\"start1\":2636,\"start2\":2636,\"length1\":16,\"length2\":186},{\"diffs\":[[0,\"ollout_v\"],[-1,\"2\"],[1,\"3\"],[0,\"` | Gen \"]],\"start1\":4597,\"start2\":4597,\"length1\":17,\"length2\":17},{\"diffs\":[[0,\"op (\"],[-1,\"preserved)\"],[1,\"F1 trap + F4 draw call + F7 raise safety) — **cash production**\"],[0,\" |\\\n|\"]],\"start1\":4634,\"start2\":4634,\"length1\":18,\"length2\":71},{\"diffs\":[[0,\"stflop_rollout_v\"],[-1,\"3\"],[1,\"4\"],[0,\"` | Gen 2 | V2 +\"]],\"start1\":4712,\"start2\":4712,\"length1\":33,\"length2\":33},{\"diffs\":[[0,\" | V\"],[-1,\"2 + F1 (trap) + F4 (draw call) + F7 (raise safety) — **cash production**\"],[1,\"3 + Monte Carlo multi-way equity (HU exhaustive, multi-way MC)\"],[0,\" |\\\n|\"]],\"start1\":4738,\"start2\":4738,\"length1\":80,\"length2\":70},{\"diffs\":[[0,\"en 2 V3 \"],[1,\"/ V4 \"],[0,\"— Produc\"]],\"start1\":5135,\"start2\":5135,\"length1\":16,\"length2\":21},{\"diffs\":[[0,\"gy\\\n\\\n\"],[-1,\"`PostflopThresholds` has 80 configurable fields covering: draw quality, bet thresholds (Full Ring+Short Handed), call thresholds (Full Ring+Short Handed+HU), raise thresholds (incl. `npot_raise_ceiling` for F7 draw safety gate), check-raise, rope-a-dope, all-in, bet adjustments, raise sizing.\\\n\\\nUses `hp.compute()` — exhaustive enumeration against uniform opponent hands (no range weighting, no MC).\"],[1,\"V3 and V4 share **identical decision logic** (moved to `RolloutPostFlopBase` in round 3 refactor). The only difference is equity computation:\\\n\\\n- **V3:** Exhaustive enumeration against uniform opponent hands (exact)\\\n- **V4:** HU → exhaustive enumeration (exact); Multi-way (2+ opp) → Monte Carlo with `HandRange::init_all(1.0)` uniform range, true multi-way equity against strongest opponent\"],[0,\"\\\n\\\n##\"]],\"start1\":5172,\"start2\":5172,\"length1\":407,\"length2\":398},{\"diffs\":[[0,\"\\\n### V3 \"],[1,\"/ V4 \"],[0,\"Producti\"]],\"start1\":5567,\"start2\":5567,\"length1\":16,\"length2\":21},{\"diffs\":[[0,\"omoted)\\\n\"],[-1,\"\\\n\"],[0,\"1. **F1:\"]],\"start1\":5602,\"start2\":5602,\"length1\":17,\"length2\":16},{\"diffs\":[[0,\" 0.25)\\\n\\\n\"],[1,\"### V4 Monte Carlo Parameters\\\n- `mc_samples` (default 20,000, ±0.35% std error) — configured via `PostflopThresholds`\\\n- `mc_seed` (default 42) — RNG seed for reproducibility\\\n- Uses `compute_vs_range_multiway_shared` with `HandRange::init_all(1.0)` (uniform range = exhaustive sampling)\\\n\\\n\"],[0,\"---\\\n\\\n## \"]],\"start1\":5959,\"start2\":5959,\"length1\":16,\"length2\":303},{\"diffs\":[[0,\"fault 0.\"],[-1,\"20\"],[1,\"35\"],[0,\") by han\"]],\"start1\":6951,\"start2\":6951,\"length1\":18,\"length2\":18},{\"diffs\":[[0,\"lta colo\"],[1,\"u\"],[0,\"ring + C\"]],\"start1\":9982,\"start2\":9982,\"length1\":16,\"length2\":17},{\"diffs\":[[0,\"--\\\n\\\n\"],[-1,\"## Java → Rust Idiom Mapping\\\n\\\n| Java | Rust | Notes |\\\n|---|---|---|\\\n| `interface Strategy` | `trait Strategy` | `Send + Sync` bounds |\\\n| `ModularStrategy extends Strategy` | Struct implementing trait | Composition over inheritance |\\\n| `BigStackStrategy extends ModularStrategy` | `BigStackBot` implementing `Strategy` directly | Flat delegation |\\\n| `ModularStrategy implements HoldemPlayer` | `StrategyBot` wraps `Strategy` | Adapter pattern |\\\n| `HandAnalyzer` singleton | `HandAnalyzer` with `Arc<Evaluator>` | `OnceLock` singleton |\\\n| `null` | `Option<T>` | Idiomatic |\\\n\\\n---\\\n\\\n\"],[0,\"## D\"]],\"start1\":10020,\"start2\":10020,\"length1\":586,\"length2\":8},{\"diffs\":[[0,\" sweeps.\"],[1,\"\\\n- **V3/V4 shared decision logic in base:** V3 and V4 decision flow (`get_first_in_action_v3`, `get_raised_pot_action_v3`, etc.) lives in `RolloutPostFlopBase`. V3 (exhaustive equity) and V4 (MC equity) are thin wrappers that compute equity differently then delegate to the same decision methods.\"]],\"start1\":11283,\"start2\":11283,\"length1\":8,\"length2\":304}]"
metadata_diff: {"new":{},"deleted":[]}
encryption_cipher_text: 
encryption_applied: 0
updated_time: 2026-06-15T06:46:54.315Z
created_time: 2026-06-15T06:46:54.315Z
type_: 13