You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
- Empty visible squares are shown as part of the rank count (e.g., `8`, `1`)
264
264
265
265
The engine will:
266
266
1. Parse and store the fog FEN
267
-
2. Use it to initialize the belief state (set of possible positions consistent with observations)
268
-
3. Search over the belief state to find the best move
269
-
270
-
**Note**: The fog_fen feature is currently a basic implementation. The engine stores the fog FEN and reports it, but full integration with belief state enumeration requires additional development.
267
+
2. Enumerate positions consistent with what the fog FEN shows (permuting hidden opponent pieces across unseen squares)
268
+
3. Use that belief state to guide the Obscuro search before selecting a move
271
269
272
270
## Viewing the Fog-of-War Board State
273
271
@@ -344,14 +342,12 @@ The current implementation includes:
- ⚠️ KLUSS order-2 neighborhood is still simplified
350
+
- ⚠️ Resolve/Maxmargin gadget details are incomplete
355
351
- 🔲 Instrumentation (Appendix B.4 metrics)
356
352
357
353
@@ -369,16 +365,16 @@ The current implementation includes:
369
365
370
366
**What Doesn't Work Yet**:
371
367
372
-
1.**Belief enumeration**: The engine doesn't enumerate possible positions consistent with what you see. It only uses the true position, meaning it plays as if it has perfect information about hidden pieces.
373
-
374
-
2.**fog_fen analysis**: While you can specify a partial observation with `position fog_fen`, the engine doesn't use it to build a proper belief state. It starts from the variant's starting position.
368
+
1.**Belief diversity limits**: Enumeration permutes hidden opponent pieces from the current position and caps at 1024 states; it does not yet model captures beyond the observed piece set or piece-in-hand drops for crazyhouse variants.
369
+
370
+
2.**KLUSS neighborhood**: The KLUSS computation is still a placeholder and does not freeze/unfreeze infosets per the paper's order-2 definition.
375
371
376
-
3.**True imperfect information play**: Without belief enumeration, the engine essentially plays perfect information chess with FoW move restrictions, rather than reasoning about what might be hidden.
372
+
3.**Purification and gadgets**: Action purification and Resolve/Maxmargin gadget details remain simplified, so play quality may vary in tricky information sets.
377
373
378
374
### Practical Usage
379
375
380
-
**Current best use case**: Using the standard FoW search to explore how the engine handles the FoW visibility rules and move generation. The search infrastructure is in place for future belief state enumeration.
376
+
**Current best use case**: Using `position fog_fen`to explore imperfect-information situations where hidden opponent pieces could be on multiple unseen squares. The engine will enumerate those possibilities and search them, but higher-level gadgets and purification are still simplified.
381
377
382
-
**Not yet suitable for**: Analyzing positions where you want the engine to reason about hidden pieces based on partial observations.
378
+
**Not yet suitable for**: Positions that rely on advanced KLUSS freezing/unfreezing logic or deep purification requirements (e.g., adversarial bluffing scenarios and crazyhouse drop speculation).
383
379
384
380
For development status and technical details, see `OBSCURO_FOW_IMPLEMENTATION.md`.
@@ -150,107 +151,17 @@ This section provides a detailed analysis of what remains to be implemented to a
150
151
151
152
152
153
153
-
#### 1. Full Belief State Enumeration (HIGH PRIORITY)
154
+
#### Addressed Critical Gaps
154
155
155
-
156
-
157
-
**Current State**: The belief state module (`Belief.cpp`) stores only the true position FEN. The `sample_states()` method returns a single-element vector containing just the current position.
158
-
159
-
160
-
161
-
**What's Needed**:
162
-
163
-
-**Observation-consistent enumeration**: Given an observation (what the player sees), enumerate ALL positions that could produce that observation
164
-
165
-
-**Efficient representation**: Use bitboards or piece placement constraints to represent the set of unknown piece locations
166
-
167
-
-**Incremental updates**: When a new observation arrives, filter existing belief states rather than re-enumerating from scratch
168
-
169
-
170
-
171
-
**Algorithm** (from Figure 9, lines 2-4):
172
-
173
-
```
174
-
175
-
P ← EnumerateConsistentPositions(observation_history)
176
-
177
-
I ← SampleSubset(P, MinInfosetSize) // Sample 256 positions
The latest update implements the two previously missing foundation pieces:
246
157
247
-
3. Connect fog_fen to belief state in Planner
158
+
-**Full belief state enumeration**: `BeliefState::enumerate_candidates()` now permutes hidden opponent pieces across unseen squares (masked by visibility) and keeps every state consistent with the latest observation. Enumeration is capped at 1024 states to prevent combinatorial blowups, and illegal or king-capturable positions are filtered out before sampling.
248
159
249
-
4. Handle piece-in-hand visibility for crazyhouse variants
160
+
-**fog_fen integration**: `BeliefState::parse_fog_fen()` converts partial FoW FEN strings (supports `*` or `?`for unknown squares) into observations, and `Planner::construct_subgame()` seeds the belief state directly from a supplied `fog_fen` before running the solver.
0 commit comments