Example #1
0
def test_deviation_profile_count(players, strategies):
    game = rsgame.BaseGame(players, strategies)
    sup = (rand.random(game.num_roles) * game.num_strategies).astype(int) + 1
    inds = np.concatenate([rand.choice(s, x) + o for s, x, o
                           in zip(game.num_strategies, sup, game.role_starts)])
    mask = np.zeros(game.num_role_strats, bool)
    mask[inds] = True

    devs = subgame.deviation_profiles(game, mask)
    assert devs.shape[0] == subgame.num_deviation_profiles(game, mask), \
        "num_deviation_profiles didn't return correct number"
    assert np.sum(devs > 0) == subgame.num_deviation_payoffs(game, mask), \
        "num_deviation_profiles didn't return correct number"
    assert np.all(np.sum(devs * ~mask, 1) == 1)

    count = 0
    for r_ind in range(game.num_roles):
        r_devs = subgame.deviation_profiles(game, mask, r_ind)
        assert np.all(np.sum(r_devs * ~mask, 1) == 1)
        count += r_devs.shape[0]
    assert count == subgame.num_deviation_profiles(game, mask)

    red = reduction.DeviationPreserving(
        game.num_strategies, game.num_players ** 2, game.num_players)
    dpr_devs = red.expand_profiles(subgame.deviation_profiles(
        game, mask)).shape[0]
    num = subgame.num_dpr_deviation_profiles(game, mask)
    assert dpr_devs == num, \
        "num_dpr_deviation_profiles didn't return correct number"
Example #2
0
def test_deviation_profile_count(players, strategies, _):
    game = rsgame.basegame(players, strategies)
    mask = game.random_subgames()

    devs = subgame.deviation_profiles(game, mask)
    assert devs.shape[0] == subgame.num_deviation_profiles(game, mask), \
        "num_deviation_profiles didn't return correct number"
    assert np.sum(devs > 0) == subgame.num_deviation_payoffs(game, mask), \
        "num_deviation_profiles didn't return correct number"
    assert np.all(np.sum(devs * ~mask, 1) == 1)

    count = 0
    for r_ind in range(game.num_roles):
        r_devs = subgame.deviation_profiles(game, mask, r_ind)
        assert np.all(np.sum(r_devs * ~mask, 1) == 1)
        count += r_devs.shape[0]
    assert count == subgame.num_deviation_profiles(game, mask)

    red = reduction.DeviationPreserving(
        game.num_strategies, game.num_players ** 2, game.num_players)
    dpr_devs = red.expand_profiles(subgame.deviation_profiles(
        game, mask)).shape[0]
    num = subgame.num_dpr_deviation_profiles(game, mask)
    assert dpr_devs == num, \
        "num_dpr_deviation_profiles didn't return correct number"
Example #3
0
def test_subgame():
    game = rsgame.BaseGame([3, 4], [3, 2])
    subg = np.asarray([1, 0, 1, 0, 1], bool)
    devs = subgame.deviation_profiles(game, subg)
    assert devs.shape[0] == 7, \
        "didn't generate the right number of deviating profiles"
    adds = subgame.additional_strategy_profiles(game, subg, 1).shape[0]
    assert adds == 6, \
        "didn't generate the right number of additional profiles"
    subg2 = subg.copy()
    subg2[1] = True
    assert (subgame.subgame(game, subg2).num_all_profiles ==
            adds + subgame.subgame(game, subg).num_all_profiles), \
        "additional profiles didn't return the proper amount"

    serial = gamegen.game_serializer(game)
    sub_serial = subgame.subserializer(serial, subg)
    assert (subgame.subgame(game, subg).num_role_strats ==
            sub_serial.num_role_strats)
Example #4
0
 def expand_deviation_profiles(self, subgame_mask, role_index=None):
     """Expand profiles that contribute to deviation payoffs"""
     return subgame.deviation_profiles(self.full_game, subgame_mask,
                                       role_index)