Exemplo n.º 1
0
def get_replicator_dynamics(game_name,
                            iterations,
                            learning_rate=0.01,
                            verbose=False):
    game = pyspiel.load_game(game_name)
    if not isinstance(game, pyspiel.MatrixGame):
        print(
            "Game " + game_name +
            "is not a matrix game, construction of payoff matrix will take a long time..."
        )
    payoff_matrix = game_payoffs_array(game)
    dyn = dynamics.SinglePopulationDynamics(payoff_matrix, dynamics.replicator)

    legal_actions = game.num_distinct_actions()
    x = [np.random.rand() for _ in range(legal_actions)]
    s = sum(x)
    x = [v / s for v in x]

    actions = np.zeros((iterations, legal_actions))
    for i in range(0, iterations):
        x += learning_rate * dyn(x)
        actions[i] = x

    if verbose:
        util.pretty_print_strategies(game, actions)

    return actions
Exemplo n.º 2
0
 def test_rd_rps_pure_fixed_points(self):
     game = pyspiel.load_matrix_game('matrix_rps')
     payoff_matrix = game_payoffs_array(game)
     rd = dynamics.replicator
     dyn = dynamics.SinglePopulationDynamics(payoff_matrix, rd)
     x = np.eye(3)
     np.testing.assert_allclose(dyn(x[0]), np.zeros((3, )))
     np.testing.assert_allclose(dyn(x[1]), np.zeros((3, )))
     np.testing.assert_allclose(dyn(x[2]), np.zeros((3, )))
Exemplo n.º 3
0
def rps_phaseplot_boltzmann(fig):
    size = 111

    game = pyspiel.load_game("matrix_rps")
    payoff_tensor = game_payoffs_array(game)
    print(payoff_tensor[0])
    dyn = dynamics.SinglePopulationDynamics(payoff_tensor, lenient_boltzmannq)
    sub = fig.add_subplot(size, projection="3x3")
    sub.quiver(dyn)

    sub.set_title("Phaseplot Rock Paper Scissors")
    return sub
Exemplo n.º 4
0
def matrix_rps_biased_phaseplot(size=None, fig=None):
    fig = plt.figure(figsize=(10, 10)) if fig is None else fig
    size = 111 if size is None else size
    assert isinstance(fig, plt.Figure)

    payoff_tensor = np.array([[[0, -1, 2], [1, 0, -1], [-2, 1, 0]],
                              [[0, 1, -2], [-1, 0, 1], [2, -1, 0]]])
    dyn = dynamics.SinglePopulationDynamics(payoff_tensor, dynamics.replicator)
    sub = fig.add_subplot(size, projection="3x3")
    sub.quiver(dyn)

    sub.set_title("Phaseplot Rock Paper Scissors")
    return sub, pyspiel.create_matrix_game(payoff_tensor[0], payoff_tensor[1])
Exemplo n.º 5
0
def matrix_rps_phaseplot(size=None, fig=None):
    fig = plt.figure(figsize=(10, 10)) if fig is None else fig
    size = 111 if size is None else size
    assert isinstance(fig, plt.Figure)

    game = pyspiel.load_game("matrix_rps")
    payoff_tensor = game_payoffs_array(game)
    dyn = dynamics.SinglePopulationDynamics(payoff_tensor, dynamics.replicator)
    sub = fig.add_subplot(size, projection="3x3")
    sub.quiver(dyn)

    sub.set_title("Phaseplot Rock Paper Scissors")
    return sub
Exemplo n.º 6
0
 def test_dynamics_rps_mixed_fixed_point(self, func):
     game = pyspiel.load_matrix_game('matrix_rps')
     payoff_matrix = game_payoffs_array(game)
     dyn = dynamics.SinglePopulationDynamics(payoff_matrix, func)
     x = np.ones(shape=(3, )) / 3.
     np.testing.assert_allclose(dyn(x), np.zeros((3, )), atol=1e-15)
def _build_dynamics3x3():
    """Build single-population dynamics."""
    game = pyspiel.load_game("matrix_rps")
    payoff_tensor = utils.nfg_to_ndarray(game)
    return dynamics.SinglePopulationDynamics(payoff_tensor,
                                             dynamics.replicator)
def _build_dynamics3x3_beta():
    """Build single-population dynamics."""
    game = pyspiel.load_game("matrix_rps")
    payoff_tensor = utils.game_payoffs_array(game)
    return dynamics.SinglePopulationDynamics(payoff_tensor,
                                             dynamics_beta.replicator_beta)