Skip to content

[Bug]: enumpoly returns a profile with undefined probabilities that may not be a Nash eq #660

@rahulsavani

Description

@rahulsavani

Where did you find this bug?

PyGambit

What operating system are you using?

macOS

What version of Gambit are you using?

16.4.0

What happened?

This was spotted when working on issue #636, which is about using UndefinedToCentroid rather than leaving probabilities at certain infosets as 0 in pygambit, or *s in the GUI. In making that change I noticed the following case (currently incorrectly included as a test case in test_enumpoly_ordered_behavior in test_nash.py).

The game in question is the "one-shot trust game", created in tests/games.py::create_one_shot_trust_efg, with the following efg file:

EFG 2 R "One-shot trust game, after Kreps (1990)" { "Buyer" "Seller" }
""

p "" 1 1 "" { "Trust" "Not trust" } 0
p "" 2 1 "" { "Honor" "Abuse" } 0
t "" 1 "Trustworthy" { 1, 1 }
t "" 2 "Untrustworthy" { -1, 2 }
t "" 3 "Opt-out" { 0, 0 }

The issue is that the second "equilibrium" found by enum_poly in mixed behaviors is not always an equilibrium:

import pygambit as gbt
g = gbt.read_efg('one_shot_trust.efg')
result = gbt.nash.enumpoly_solve(g)
print(result.equilibria[0])
print(result.equilibria[1])

giving

In [14]: print(result.equilibria[0])
[[[0.0, 1.0]], [[0.5, 0.5]]]

In [15]: print(result.equilibria[1])
[[[0.0, 1.0]], [[0.0, 0.0]]]

The second once should have [0.0, 1.0] for player 2, but is instead returned as "undefined", i.e. [0.0, 0.0] in pygambit, and wildcards * in the GUI:

Image

However, if player 2 puts more than 0.5 probability on "Honor" then "No Trust" is no longer a best response for player 1.

Player 2's info set is only one deviation from the equilibrium path (i.e. "Not Trust"), and so actually should have specified probabilities and not be undefined (which should occur only for info sets that would only be reached with deviations of more than one player).

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions