Example #1
0
 def test_multi_population_three_populations(self):
     payoff_matrix = np.arange(3 * 2 * 3 * 4).reshape(3, 2, 3, 4)
     rd = dynamics.replicator
     dyn = dynamics.MultiPopulationDynamics(payoff_matrix, [rd] * 3)
     x = np.concatenate(
         [np.ones(k) / float(k) for k in payoff_matrix.shape[1:]])
     self.assertEqual(dyn(x).shape, (9, ))
Example #2
0
def pd_phaseplot_boltzmann(fig):
    #Load game and payoff matrices
    size = 111
    game = pyspiel.load_game("matrix_mp")
    #A = game_payoffs_array(game)[0]
    #print(A)
    payoff_tensor = np.array([[[3, 0], [0, 2]], [[2, 0], [0, 3]]])

    #Make phase plot using LFAQ
    dyn = dynamics.MultiPopulationDynamics(payoff_tensor, lenient_boltzmannq)
    sub = fig.add_subplot(1, 2, 1, projection="2x2")
    sub.quiver(dyn)

    startx = [0.75, 0.45, 0.85, 0.3]
    starty = [0.75, 0.84, 0.45, 0.7]

    #Follow trajectory for 5 points
    for i in range(4):
        p_x = startx[i]
        p_y = starty[i]
        x = np.array([p_x, 1 - p_x, p_y, 1 - p_y])
        xlist = list()
        ylist = list()
        alpha = 0.01
        iterations = 1000
        for _ in range(iterations):
            x += alpha * dyn(x)
            xlist.append(x[0])
            ylist.append(x[2])
        sub.plot(xlist, ylist)
    sub.set_title("τ = 50, κ = 1")

    return fig
    def test_meshgrid(self):
        n = 10
        payoff_tensor = np.ones(shape=(2, 2, 2))
        identity = lambda x, f: x
        allzero = lambda x, f: np.zeros(x.shape)
        dyn = dynamics.MultiPopulationDynamics(payoff_tensor,
                                               (identity, allzero))
        x, y, u, v = visualization._eval_dynamics_2x2_grid(dyn, n)
        np.testing.assert_allclose(x, u)
        np.testing.assert_allclose(v, np.zeros(shape=(n, n)))

        dyn = dynamics.MultiPopulationDynamics(payoff_tensor,
                                               (allzero, identity))
        x, y, u, v = visualization._eval_dynamics_2x2_grid(dyn, n)
        np.testing.assert_allclose(u, np.zeros(shape=(n, n)))
        np.testing.assert_allclose(y, v)
Example #4
0
 def test_multi_population_rps(self):
     game = pyspiel.load_matrix_game('matrix_rps')
     payoff_matrix = game_payoffs_array(game)
     rd = dynamics.replicator
     dyn = dynamics.MultiPopulationDynamics(payoff_matrix, [rd] * 2)
     x = np.concatenate(
         [np.ones(k) / float(k) for k in payoff_matrix.shape[1:]])
     np.testing.assert_allclose(dyn(x), np.zeros((6, )), atol=1e-15)
Example #5
0
 def test_multi_population_four_populations(self):
     payoff_matrix = np.zeros((4, 2, 2, 2, 2))
     payoff_matrix[:, 0, 0, 0, 0] = np.ones((4, ))
     rd = dynamics.replicator
     dyn = dynamics.MultiPopulationDynamics(payoff_matrix, [rd] * 4)
     x = np.concatenate(
         [np.ones(k) / float(k) for k in payoff_matrix.shape[1:]])
     avg_fitness = 1. / float(2**4)  # if all players play uniform random
     dx = dyn(x)
     np.testing.assert_allclose(dx[::2], np.ones((4, )) * avg_fitness / 2.)
     np.testing.assert_allclose(dx[1::2],
                                np.ones((4, )) * (-avg_fitness) / 2.)
Example #6
0
def matrix_bots_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([[[3, 0], [0, 2]], [[2, 0], [0, 3]]])
    dyn = dynamics.MultiPopulationDynamics(payoff_tensor, dynamics.replicator)
    sub = fig.add_subplot(size, projection="2x2")
    sub.quiver(dyn)

    sub.set_title("Phaseplot Battle of the sexes")
    sub.set_xlabel("Man")
    sub.set_ylabel("Woman")
    return sub
Example #7
0
def matrix_mp_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_mp")
    payoff_tensor = game_payoffs_array(game)
    dyn = dynamics.MultiPopulationDynamics(payoff_tensor, dynamics.replicator)
    sub = fig.add_subplot(size, projection="2x2")
    sub.quiver(dyn)

    sub.set_title("Phaseplot Matching pennies")
    sub.set_xlabel("Player 1")
    sub.set_ylabel("Player 2")
    return sub
def _build_dynamics2x2():
    """Build multi-population dynamics."""
    game = pyspiel.load_game("matrix_pd")
    payoff_tensor = utils.nfg_to_ndarray(game)
    return dynamics.MultiPopulationDynamics(payoff_tensor, dynamics.replicator)
def _build_dynamics2x2_beta():
    """Build multi-population dynamics."""
    game = pyspiel.load_game("matrix_pd")
    payoff_tensor = utils.game_payoffs_array(game)
    return dynamics.MultiPopulationDynamics(payoff_tensor,
                                            dynamics_beta.replicator_beta)