fix: Enforce Subgame Perfection in Sequence Form LP (#1304)#1467
fix: Enforce Subgame Perfection in Sequence Form LP (#1304)#1467SH20RAJ wants to merge 1 commit intogoogle-deepmind:masterfrom
Conversation
…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.
|
Hi @lanctot and the OpenSpiel team, This PR serves as a core technical contribution for my GSoC 2025 candidacy. It addresses the subgame perfection issue in the Sequence Form LP solver (Issue #1304), which is critical for equilibrium finding in zero-sum games. Summary for GSoC Context
I hope this demonstrates my ability to work with the core solver algorithms and ensure mathematical correctness in the codebase. I would appreciate any feedback! |
|
For completeness regarding my GSoC application, I would also like to cross-reference my other contributions to OpenSpiel: Merged / Internally Imported:
Active / Ready for Review:
This set of PRs covers core algorithms, game logic correctness, infrastructure/serialization, and code quality (typing). |
|
Hi @SH20RAJ , I was waiting for the tests to pass before taking a look. Now that I see this more closely, I think #1489 subsumed it, so we should probably close this. If you would like to make a contribution to OpenSpiel, I think it'd be best to discuss what it could be before you go off to implement something based on the issues. Feel free to open an issue yourself to discuss, or comment on an open issue to ask the status. |
|
I've now put up a post for new contributors: #1511 This would have been an example where I would likely have discouraged a PR because the conversation in that issue was a bit confusing. The initial suggestion did not make much sense to me. I think sequential equilibrium made more sense, and it was added in #1489 . Happy to discuss future contributions, but let's try to talk about what they could be first (by responding to or opening a new issue). Thanks. |
Description
Enforces subgame perfection in the Sequence Form LP solver, addressing Issue #1304.
Previously, the solver could produce arbitrary policies (e.g., uniform random) in unreachable information states. This PR modifies the formulation to use dual variables (slacks) to extract game-theoretically optimal actions even in unreachable subgames.
Changes
open_spiel/python/algorithms/sequence_form_lp.pyto use slack variables for policy extraction.check_subgame_perfection.pyto verify the fix on Kuhn Poker (asserts Player 0 folds 'J' in unreachable subgame).Verification
check_subgame_perfection.pypasses (Output verified locally: "Assertion logic passed: P0 folds correctly.")open_spiel/python/algorithms/sequence_form_lp_test.pypassed (6/6 tests).Dependencies
Requires
cvxopt(andnumpy).