Пример #1
0
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()
Пример #2
0
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()