args = parser.parse_args() setting_file = args.settings[0] settings = importlib.import_module('games.' + setting_file) rows, cols = settings.payoff_matrix_row.shape # algorithm settings rate = 10 ** -5 iters = 2 * 10 ** 5 import matplotlib.pyplot as plt for _ in range(10): str_row_init = utils.randomize_mixed_strategy(rows) str_col_init = utils.randomize_mixed_strategy(cols) fpi = FPI_2P_Stgy([str_row_init, str_col_init], [settings.payoff_matrix_row, settings.payoff_matrix_col]) fpi.converge(rate, iters) eqpt = fpi.eqpt() FPI_2P_Stgy.display_eqpt(eqpt) row_x_a, row_y_a = utils.barycentric_to_cartesian(np.array(fpi.get_stats()['str_row_l'])) col_x_a, col_y_a = utils.barycentric_to_cartesian(np.array(fpi.get_stats()['str_col_l'])) plt.plot(row_x_a, row_y_a, color='red', alpha=.5) plt.plot(col_x_a, col_y_a, color='blue', alpha=.5) import matplotlib.patches as mpatches ax = plt.gca() triangle = mpatches.Polygon(np.array([[0, 0], [np.sqrt(2) / 2, np.sqrt(6) / 2], [np.sqrt(2), 0]]), fc="gray", alpha=.2) ax.add_artist(triangle) plt.axis('scaled') plt.xlim(0, np.sqrt(2)) plt.ylim(0, np.sqrt(6) / 2)
import numpy as np import utils from FPI_2P import FPI_2P_Stgy import matplotlib.pyplot as plt import contraction plt.figure(figsize=(utils.xy_x, utils.xy_x)) settings = utils.read_settings() # run the FPI fpi = FPI_2P_Stgy([settings.str_row_init_l[0], settings.str_col_init_l[0]], [settings.payoff_matrix_row, settings.payoff_matrix_col]) if settings.display_game: fpi.print_game() fpi.converge(settings.rate, settings.iters) FPI_2P_Stgy.display_eqpt(fpi.eqpt()) if settings.use_LH: fpi.lemke_howson() stats = fpi.get_stats() str_row_l = stats['str_row_l'] str_col_l = stats['str_col_l'] d_l = [] for i in range(1, settings.iters): tuple_i = (str_row_l[i], str_col_l[i]) tuple_i_minus_1 = (str_row_l[i - 1], str_col_l[i - 1]) d_l.append(contraction.distance_function_1(tuple_i_minus_1, tuple_i)) q_l = [] for i in range(1, len(d_l)): q_l.append(d_l[i] / d_l[i - 1])