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
From 34d4a56 (and for inclusion in 16.3), we re-implemented support enumeration in strategic games following the heuristic recommended by Porter et al.
As part of the work re-instating enumpoly_solve, we also did some tidying of enumerating (behavior) supports for extensive games; this is in src/solvers/nashsupport. However, by comparison, this enumeration leaves much to be desired.
There are several intertwined areas which need to be addressed.
There is an infrastructure in BehaviorSupportProfile which attempts to track which information sets are reachable from the root node, given the actions currently contained in the support profile. However, in the support enumeration, this is not meaningfully taken advantage of.
There is a class called ActionCursor which does the (naive) iteration over support profiles. At a minimum this should be re-written as a more standard modern C++ iterator over the set of support profiles.
But also, it is precisely in this iteration where information about the structure of the tree could (should?) be used to filter out support profiles which differ only on information sets which are rendered unreachable by the rest of the support. It would make much more sense to do this in the iteration rather than the complicated internals currently in the support.
This interacts also with a test currently in enumpoly_solve which checks whether a candidate profile extends to a Nash equilibrium by solving a polynomial system. At the moment this appears largely redundant because the support enumeration is naive. However, it is also not clear that even under a more sophisticated support enumeration method, that polynomial solvers are necessary - as opposed simply to trying to fill in pure strategies off the path.
Actions
This is a placeholder for now to note that this will require attention in future. We will need to break this down into a strategy with smaller steps. Overall, working on this requires both some understanding of game theory (especially on extensive games) as well as software engineering on the details of C++ implementation.
The text was updated successfully, but these errors were encountered:
Overview
From 34d4a56 (and for inclusion in 16.3), we re-implemented support enumeration in strategic games following the heuristic recommended by Porter et al.
As part of the work re-instating
enumpoly_solve
, we also did some tidying of enumerating (behavior) supports for extensive games; this is insrc/solvers/nashsupport
. However, by comparison, this enumeration leaves much to be desired.There are several intertwined areas which need to be addressed.
BehaviorSupportProfile
which attempts to track which information sets are reachable from the root node, given the actions currently contained in the support profile. However, in the support enumeration, this is not meaningfully taken advantage of.ActionCursor
which does the (naive) iteration over support profiles. At a minimum this should be re-written as a more standard modern C++ iterator over the set of support profiles.enumpoly_solve
which checks whether a candidate profile extends to a Nash equilibrium by solving a polynomial system. At the moment this appears largely redundant because the support enumeration is naive. However, it is also not clear that even under a more sophisticated support enumeration method, that polynomial solvers are necessary - as opposed simply to trying to fill in pure strategies off the path.Actions
This is a placeholder for now to note that this will require attention in future. We will need to break this down into a strategy with smaller steps. Overall, working on this requires both some understanding of game theory (especially on extensive games) as well as software engineering on the details of C++ implementation.
The text was updated successfully, but these errors were encountered: