def main(args): game, serial = gameio.read_game(json.load(args.input)) if args.type == 'pure': equilibria = nash.pure_nash(game, args.regret) if args.one and not equilibria: equilibria = nash.min_regret_profile(game)[None] elif args.type == 'mixed': rep_args = { 'max_iters': args.max_iterations, 'converge_thresh': args.convergence } equilibria = nash.mixed_nash(game, args.regret, args.distance, random_restarts=args.random_mixtures, grid_points=args.grid_points, at_least_one=args.one, processes=args.processes, replicator=rep_args, optimize={}) equilibria = game.trim_mixture_support(equilibria, args.support) elif args.type == 'min-reg-prof': equilibria = nash.min_regret_profile(game)[None] elif args.type == 'min-reg-grid': equilibria = nash.min_regret_grid_mixture( game, args.grid_points)[None] equilibria = game.trim_mixture_support(equilibria, args.support) elif args.type == 'min-reg-rand': equilibria = nash.min_regret_rand_mixture( game, args.random_mixtures)[None] equilibria = game.trim_mixture_support(equilibria, args.support) elif args.type == 'rand': equilibria = game.random_mixtures(args.random_mixtures) equilibria = game.trim_mixture_support(equilibria, args.support) else: raise ValueError('Unknown command given: {0}'.format(args.type)) # pragma: no cover # noqa json.dump([serial.to_prof_json(eqm) for eqm in equilibria], args.output) args.output.write('\n')
def main(args): """Entry point for nash finding""" game = gamereader.load(args.input) if args.pure: equilibria = nash.pure_equilibria(game, epsilon=args.regret) if args.style.endswith('*') and not equilibria: equilibria = nash.min_regret_profile(game)[None] json.dump([game.profile_to_json(eqm) for eqm in equilibria], args.output) else: equilibria = nash.mixed_equilibria( game, style=args.style, regret_thresh=args.regret, dist_thresh=args.distance, processes=args.processes) json.dump( [game.mixture_to_json(eqm) for eqm in game.trim_mixture_support(equilibria, thresh=args.support)], args.output) args.output.write('\n')
def main(args): """Entry point for nash finding""" game = gamereader.load(args.input) if args.pure: equilibria = nash.pure_equilibria(game, epsilon=args.regret) if args.style.endswith('*') and not equilibria: equilibria = nash.min_regret_profile(game)[None] json.dump([game.profile_to_json(eqm) for eqm in equilibria], args.output) else: equilibria = nash.mixed_equilibria(game, style=args.style, regret_thresh=args.regret, dist_thresh=args.distance, processes=args.processes) json.dump([ game.mixture_to_json(eqm) for eqm in game.trim_mixture_support(equilibria, thresh=args.support) ], args.output) args.output.write('\n')
def test_minreg_roshambo(): game = gamegen.rock_paper_scissors() eqm = nash.min_regret_profile(game) assert np.all(np.sort(eqm) == [0, 0, 2]), \ "min regret profile was not rr, pp, or ss"
def test_empty_game(): game = rsgame.Game(2, 3) with pytest.raises(ValueError): nash.min_regret_profile(game)
def test_min_regret_profile(): """Test minimum regret profile on rps""" game = gamegen.rock_paper_scissors() eqm = nash.min_regret_profile(game) assert utils.allequal_perm(eqm, [0, 0, 2]), \ 'min regret profile was not rr, pp, or ss'
def test_min_regret_profile(): """Test minimum regret profile on rps""" game = gamegen.rock_paper_scissors() eqm = nash.min_regret_profile(game) assert utils.allequal_perm(eqm, [0, 0, 2]), \ 'min regret profile was not rr, pp, or ss'