Python interface to GameTheory.jl
jlgametheory is a Python package that allows passing
a NormalFormGame instance from
QuantEcon.py to
GameTheory.jl functions
via JuliaCall.
pip install jlgametheory
lrsnash: Compute in exact arithmetic all extreme mixed-action Nash equilibria of a 2-player normal form game with integer payoffs.hc_solve: Compute all isolated mixed-action Nash equilibria of an N-player normal form game.
import quantecon.game_theory as gt
import jlgametheory as jgtlrsnash calls the Nash equilibrium computation routine in lrslib
(through its Julia wrapper LRSLib.jl):
bimatrix = [[(3, 3), (3, 2)],
[(2, 2), (5, 6)],
[(0, 3), (6, 1)]]
g = gt.NormalFormGame(bimatrix)
jgt.lrsnash(g)[(array([Fraction(4, 5), Fraction(1, 5), Fraction(0, 1)], dtype=object),
array([Fraction(2, 3), Fraction(1, 3)], dtype=object)),
(array([Fraction(0, 1), Fraction(1, 3), Fraction(2, 3)], dtype=object),
array([Fraction(1, 3), Fraction(2, 3)], dtype=object)),
(array([Fraction(1, 1), Fraction(0, 1), Fraction(0, 1)], dtype=object),
array([Fraction(1, 1), Fraction(0, 1)], dtype=object))]
hc_solve computes all isolated Nash equilibria of an N-player game by using
HomotopyContinuation.jl:
g = gt.NormalFormGame((2, 2, 2))
g[0, 0, 0] = 9, 8, 12
g[1, 1, 0] = 9, 8, 2
g[0, 1, 1] = 3, 4, 6
g[1, 0, 1] = 3, 4, 4
jgt.hc_solve(g)[(array([0., 1.]), array([0., 1.]), array([1., 0.])),
(array([0.5, 0.5]), array([0.5, 0.5]), array([1.000e+00, 2.351e-38])),
(array([1., 0.]), array([0., 1.]), array([-1.881e-37, 1.000e+00])),
(array([0.25, 0.75]), array([0.5, 0.5]), array([0.333, 0.667])),
(array([0.25, 0.75]), array([1.000e+00, 1.345e-43]), array([0.25, 0.75])),
(array([0., 1.]), array([0.333, 0.667]), array([0.333, 0.667])),
(array([1., 0.]), array([ 1.00e+00, -5.74e-42]), array([1., 0.])),
(array([0., 1.]), array([1., 0.]), array([2.374e-66, 1.000e+00])),
(array([0.5, 0.5]), array([0.333, 0.667]), array([0.25, 0.75]))]