示例#1
0
def test_sample_regret(players, strategies):
    n = 100
    game = gamegen.role_symmetric_game(players, strategies)
    max_regret = np.max(game.max_payoffs() - game.min_payoffs())
    mix = game.random_mixtures()[0]
    dev_profs = game.random_deviator_profiles(mix, n)
    dev_profs.shape = (-1, game.num_role_strats)
    inds = np.broadcast_to(np.arange(game.num_role_strats),
                           (n, game.num_role_strats)).flat
    dev_payoffs = np.fromiter(
        (game.get_payoffs(p)[i] for p, i in zip(dev_profs, inds)),
        float, n * game.num_role_strats)
    dev_payoffs.shape = (n, game.num_role_strats)
    mix_payoffs = game.role_reduce(dev_payoffs * mix)
    boots = bootstrap.sample_regret(game, mix_payoffs, dev_payoffs, 200)
    assert boots.shape == (200,)
    assert np.all(boots <= max_regret)
    assert np.all(boots >= 0)

    perc_boots = bootstrap.sample_regret(game, mix_payoffs, dev_payoffs, 200,
                                         [2.5, 97.5])
    assert perc_boots.shape == (2,)
    assert np.all(perc_boots <= max_regret)
    assert np.all(perc_boots >= 0)
示例#2
0
def main(args):
    data = json.load(args.input)
    if args.regret is not None:
        game, serial = gameio.read_base_game(json.load(args.regret[0]))
        mix = serial.from_prof_json(json.load(args.regret[1]))
        devs = load_devs(game, serial, data)
        expect = game.role_reduce(devs * mix)
        result = bootstrap.sample_regret(game, expect, devs, args.num_bootstraps, args.percentiles)
        if args.mean:
            mdevs = devs.mean(0)
            mexpect = game.role_reduce(mdevs * mix, keepdims=True)
            mean = np.max(mdevs - mexpect)

    elif args.dev_surplus is not None:
        game, serial = gameio.read_base_game(json.load(args.dev_surplus[0]))
        mix = serial.from_prof_json(json.load(args.dev_surplus[1]))
        devs = load_devs(game, serial, data)
        surpluses = np.sum(devs * mix * game.role_repeat(game.num_players), 1)
        result = bootstrap.mean(surpluses, args.num_bootstraps, args.percentiles)
        if args.mean:
            mean = surpluses.mean()

    else:
        data = np.asarray(data, float)
        result = bootstrap.mean(data, args.num_bootstraps, args.percentiles)
        if args.mean:
            mean = data.mean()

    if args.percentiles is None:
        args.percentiles = np.linspace(0, 100, args.num_bootstraps)
    jresult = {str(p).rstrip("0").rstrip("."): v.item() for p, v in zip(args.percentiles, result)}
    if args.mean:
        jresult["mean"] = mean

    json.dump(jresult, args.output)
    args.output.write("\n")