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