Exemplo n.º 1
0
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')
Exemplo n.º 2
0
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')
Exemplo n.º 3
0
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')
Exemplo n.º 4
0
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"
Exemplo n.º 5
0
def test_empty_game():
    game = rsgame.Game(2, 3)
    with pytest.raises(ValueError):
        nash.min_regret_profile(game)
Exemplo n.º 6
0
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'
Exemplo n.º 7
0
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'