def demo(): game = Nash() game.fill_payoff() game.show_payoff() game.find_nash() if game.nash.__len__() == 0: print("game has no nash equilibrium") return else: for n in game.nash: print("({},{})".format(n.x, n.y)) player1 = [] player2 = [] i_0 = random.randint(0, 4) j_0 = random.randint(0, 4) player1.append(game.payoff[i_0][j_0].x) player2.append(game.payoff[i_0][j_0].y) count = 0 while game.is_nash(i_0, j_0) == False and count < 20: i = Player.B_1(j_0, game.payoff) j = Player.B_2(i_0, game.payoff) i_0 = i j_0 = j player1.append(game.payoff[i_0][j_0].x) player2.append(game.payoff[i_0][j_0].y) count += 1 player1.append(game.payoff[i_0][j_0].x) player2.append(game.payoff[i_0][j_0].y) count += 1 x = range(count + 1) player1_curve, = plt.plot(x, player1, label="player 1") player2_curve, = plt.plot(x, player2, label="player 2") plt.legend([player1_curve, player2_curve], ['player 1', 'player 2']) plt.xlabel('attempt of game') plt.ylabel('payoff') plt.grid() plt.show()
game = Nash() # payoff matrix of "oscillating game" # game.payoff = [ # [Tuple(6, 7), Tuple(5, 2), Tuple(5, 8), Tuple(0, 2), Tuple(0, 1)], # [Tuple(1, 1), Tuple(3, 2), Tuple(5, 2), Tuple(1, 3), Tuple(5, 1)], # [Tuple(1, 7), Tuple(2, 7), Tuple(1, 7), Tuple(4, 8), Tuple(8, 1)], # [Tuple(0, 1), Tuple(4, 7), Tuple(8, 2), Tuple(3, 0), Tuple(0, 3)], # [Tuple(8, 4), Tuple(3, 2), Tuple(1, 4), Tuple(9, 6), Tuple(1, 0)] # ] # payoff matrix of "normal game" game.payoff = [ [Tuple(9, 8), Tuple(3, 0), Tuple(4, 2), Tuple(1, 1), Tuple(0, 2)], [Tuple(3, 6), Tuple(9, 3), Tuple(8, 5), Tuple(3, 8), Tuple(9, 6)], [Tuple(8, 9), Tuple(4, 7), Tuple(5, 3), Tuple(4, 4), Tuple(6, 5)], [Tuple(1, 7), Tuple(5, 8), Tuple(9, 4), Tuple(1, 2), Tuple(3, 3)], [Tuple(1, 7), Tuple(8, 8), Tuple(0, 9), Tuple(0, 5), Tuple(9, 3)] ] game.show_payoff() game.find_nash() G = nx.DiGraph() for i in range(5): for j in range(5): play_game(G, game, i, j) nx.draw(G, pos=nx.spring_layout(G), with_labels=True, scale=10, center=(0,0)) plt.show()