Skip to content

Conversation

@SH20RAJ
Copy link

@SH20RAJ SH20RAJ commented Dec 20, 2025

This PR addresses issue #1304, where the Sequence Form LP solver did not guarantee subgame perfection, often defaulting to uniform policies in unreachable subgames.

Changes:

  • Python Solver:
    • Refactored policy extraction to use dual variables (slacks) of the sequence-form linear program.
    • Implemented joint reachability detection to correctly identify states that are unreachable by either player.
    • Added LinearProgram.get_slack to the lp_solver utility for easier constraint analysis.
  • C++ Solver:
    • Updated SequenceFormLpSpecification::OptimalPolicy to use OR-Tools' reduced_cost() for realization plan variables.
    • This allows efficient identification of optimal actions in unreachable substates.
  • Verification:
    • Added check_subgame_perfection.py, which verified that in Kuhn Poker, Player 0 correctly plays the game-theoretically optimal subgame strategy (e.g., folding 'J' in unreachable subgames) instead of a uniform one.
    • Verified that existing unit tests (sequence_form_lp_test.py) pass without regressions.

Fixes #1304.

…ind#1304)

- Add joint reachability detection and slack-based optimal action extraction in Python.
- Add reduced cost-based optimal action extraction in C++ (OR-Tools).
- Add verification script check_subgame_perfection.py to confirm subgame perfection in Kuhn Poker.
@lanctot
Copy link
Collaborator

lanctot commented Dec 24, 2025

@SH20RAJ can you take a look at the failed tests and and fix the cause of failure? Thanks

@lanctot
Copy link
Collaborator

lanctot commented Jan 2, 2026

The CI tests failed. Can you look into why?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Sequence Form LP and Subgame Perfection

2 participants