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, ))
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)
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)
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.)
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
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)