def test_nash_value_sequence_form_lp(self): """Checks Nash value using a Python sequence form LP solver.""" game = pyspiel.load_game("python_kuhn_poker") val1, val2, _, _ = sequence_form_lp.solve_zero_sum_game(game) # value from Kuhn 1950 or https://en.wikipedia.org/wiki/Kuhn_poker self.assertAlmostEqual(val1, -1 / 18) self.assertAlmostEqual(val2, +1 / 18)
def test_leduc_poker(self): game = pyspiel.load_game("leduc_poker") val1, val2, _, _ = sequence_form_lp.solve_zero_sum_game(game) # values obtained from Appendix E.2 of Lanctot et al. 2017, A Unified # Game-Theoretic Approach to Multiagent Reinforcement Learning. # https://arxiv.org/abs/1711.00832 self.assertAlmostEqual(val1, -0.085606424078, places=6) self.assertAlmostEqual(val2, 0.085606424078, places=6)
def test_iigoofspiel4(self): game = pyspiel.load_game_as_turn_based("goofspiel", { "imp_info": True, "num_cards": 4, "points_order": "descending", }) val1, val2, _, _ = sequence_form_lp.solve_zero_sum_game(game) # symmetric game, should be 0 self.assertAlmostEqual(val1, 0) self.assertAlmostEqual(val2, 0)
def test_kuhn_poker(self): game = pyspiel.load_game("kuhn_poker") val1, val2, _, _ = sequence_form_lp.solve_zero_sum_game(game) # value from Kuhn 1950 or https://en.wikipedia.org/wiki/Kuhn_poker self.assertAlmostEqual(val1, -1 / 18) self.assertAlmostEqual(val2, +1 / 18)
def test_rock_paper_scissors(self): game = pyspiel.load_game_as_turn_based("matrix_rps") val1, val2, _, _ = sequence_form_lp.solve_zero_sum_game(game) self.assertAlmostEqual(val1, 0) self.assertAlmostEqual(val2, 0)