Skip to content

Adding support of subgame equilibirum computation in IIEFGs.#1489

Open
alexunderch wants to merge 3 commits intogoogle-deepmind:masterfrom
alexunderch:subgame-equilibrium
Open

Adding support of subgame equilibirum computation in IIEFGs.#1489
alexunderch wants to merge 3 commits intogoogle-deepmind:masterfrom
alexunderch:subgame-equilibrium

Conversation

@alexunderch
Copy link
Contributor

@alexunderch alexunderch commented Mar 4, 2026

  • Implemented optimisation problem from the paper for 2p0s games in python
  • Added games "Guess the ace" and "Kuhn poker with raise action"
  • Add more tests to understand if the implementation computes the sequential equilibrium
  • Add the implementation for C++ ortools version

Now the implementation just extends current solver with noise in accordance with the paper. However, there're 2 questions, whether I need explicitly state the slack variables (currently they are under control of the solver, AIs told me this) and to implement all the tests + pygambit eval, showing that it works. To make it simpler to criticise, I make the PR public.

Current simplest tests (just computing values and policies pass)
ETA: 2-3 weeks.

@lanctot is it okay to start with that simple of extenstion? Because we don't actually converge to the equilibrium at the limit, only approximately. For the former, iirc, I need to implement one of: symbolic solver or Lemke algo.

@lanctot
Copy link
Collaborator

lanctot commented Mar 4, 2026

Thanks!

@lanctot
Copy link
Collaborator

lanctot commented Mar 8, 2026

BTW about this: "Add the implementation for C++ ortools version": we've remove the testing of the OpenSpiel build with OR-Tools from GitHub Actions and will probably mark it as unmaintained as of OpenSpiel 2.0. So might not be worth the effort. Having the Python implementation is enough -- if anybody wants to extend it to C++, they can. :)

@lanctot lanctot added the waiting Waiting to hear back from contributor (tests failed or thread reply / code update required) label Mar 9, 2026
@alexunderch
Copy link
Contributor Author

@lanctot , I made several substantial changes:

  1. Slack variables are really handled by the solver, however, it zeroes out its coefficients in the objective. Thus, I explicitly introduced slack variables, u and v to solve the dual problem. The problem construction is updated to support recursion over slacks as well.
  2. I added an explonential noise schedule with a degree proportional to the depth of the tree.
  3. Added 2 games: Guess the Ace and Poker with raise that are tested for convergence and rationality. The only thing is, afaik, open spiel's efg format has some subtle differences with gambit's one. Thus, I've generated efg's with AI, testing them with graphviz. SO, you might want to give them a look.
  4. Tests (that I've got) reproduce the paper's findings, I guess.

@lanctot lanctot removed the waiting Waiting to hear back from contributor (tests failed or thread reply / code update required) label Mar 9, 2026
@alexunderch
Copy link
Contributor Author

related to #1467, however, I don't understand why the solution is like that. There's some logic behind the comments, but there's a question if all together can be viewed as some method.

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.

2 participants