Esempio n. 1
0
def test_if_only_root_is_chance():
    logical_expression = lambda node: not node.is_chance()
    root = KuhnRootChanceGameState(CARDS_DEALINGS)
    assert root.is_chance()
    for k in root.children:
        child = root.children[k]
        __recursive_tree_assert(child, logical_expression)
Esempio n. 2
0
def test_termination():
    root = KuhnRootChanceGameState(CARDS_DEALINGS)
    assert not root.is_terminal()
    assert not root.play(KQ).play(BET).is_terminal()
    assert not root.play(JQ).play(CHECK).play(BET).is_terminal()
    assert not root.play(QJ).play(CHECK).is_terminal()

    assert root.play(KQ).play(BET).play(FOLD).is_terminal()
    assert root.play(JQ).play(CHECK).play(CHECK).is_terminal()
    assert root.play(JK).play(BET).play(CALL).is_terminal()
    assert root.play(QJ).play(CHECK).play(BET).play(FOLD).is_terminal()
    assert root.play(QJ).play(CHECK).play(BET).play(CALL).is_terminal()
def test_termination():
    root = KuhnRootChanceGameState(2, CARDS_DEALINGS)

    assert not root.is_terminal()
    assert not root.play(K0Q0).play(BET).is_terminal()
    assert not root.play(J0Q0).play(CHECK).play(BET).is_terminal()
    assert not root.play(Q0J0).play(CHECK).is_terminal()

    assert root.play(K0Q0).play(BET).play(FOLD).is_terminal()
    assert root.play(J0Q0).play(CHECK).play(CHECK).is_terminal()
    assert root.play(J0K0).play(BET).play(CALL).is_terminal()
    assert root.play(Q0J0).play(CHECK).play(BET).play(FOLD).is_terminal()
    assert root.play(Q0J0).play(CHECK).play(BET).play(CALL).is_terminal()
Esempio n. 4
0
def test_if_possible_to_play_unavailable_action():
    root = KuhnRootChanceGameState(CARDS_DEALINGS)
    with pytest.raises(KeyError):
        root.play(CALL)
    with pytest.raises(KeyError):
        root.play(BET).play(BET)
    with pytest.raises(KeyError):
        root.play(CHECK).play(CALL)
Esempio n. 5
0
def test_kuhn_player_to_act_changes_correctly_for_children():
    logical_expression = lambda node: all([
        node.player_to_act == -node.children[k].player_to_act
        for k in node.children
    ])
    root = KuhnRootChanceGameState(CARDS_DEALINGS)
    for k in root.children:
        child = root.children[k]
        __recursive_tree_assert(child, logical_expression)
def test_kuhn_to_move_changes_correctly_for_children():
    logical_expression = lambda node: all([
        node.current_player == node.children[k].current_player.get_next_player(
        ) for k in node.children
    ])
    root = KuhnRootChanceGameState(2, CARDS_DEALINGS)
    for k in root.children:
        child = root.children[k]
        __recursive_tree_assert(child, logical_expression)
def test_evaluation():
    root = KuhnRootChanceGameState(2, CARDS_DEALINGS)

    KQ_node = root.children[K0Q0]

    assert KQ_node.play(BET).play(FOLD).evaluation() == 1
    assert KQ_node.play(BET).play(CALL).evaluation() == 2
    assert KQ_node.play(CHECK).play(BET).play(FOLD).evaluation() == -1
    assert KQ_node.play(CHECK).play(CHECK).evaluation() == 1

    QJ_node = root.children[Q0J0]

    assert QJ_node.play(BET).play(FOLD).evaluation() == 1
    assert QJ_node.play(BET).play(CALL).evaluation() == 2
    assert QJ_node.play(CHECK).play(BET).play(FOLD).evaluation() == -1
    assert QJ_node.play(CHECK).play(CHECK).evaluation() == 1

    KJ_node = root.children[K0J0]

    assert KJ_node.play(BET).play(FOLD).evaluation() == 1
    assert KJ_node.play(BET).play(CALL).evaluation() == 2
    assert KJ_node.play(CHECK).play(BET).play(FOLD).evaluation() == -1
    assert KJ_node.play(CHECK).play(CHECK).evaluation() == 1

    QK_node = root.children[Q0K0]

    assert QK_node.play(BET).play(FOLD).evaluation() == 1
    assert QK_node.play(BET).play(CALL).evaluation() == -2
    assert QK_node.play(CHECK).play(BET).play(FOLD).evaluation() == -1
    assert QK_node.play(CHECK).play(CHECK).evaluation() == -1

    JQ_node = root.children[J0Q0]

    assert JQ_node.play(BET).play(FOLD).evaluation() == 1
    assert JQ_node.play(BET).play(CALL).evaluation() == -2
    assert JQ_node.play(CHECK).play(BET).play(FOLD).evaluation() == -1
    assert JQ_node.play(CHECK).play(CHECK).evaluation() == -1

    JK_node = root.children[J0K0]

    assert JK_node.play(BET).play(FOLD).evaluation() == 1
    assert JK_node.play(BET).play(CALL).evaluation() == -2
    assert JK_node.play(CHECK).play(BET).play(FOLD).evaluation() == -1
    assert JK_node.play(CHECK).play(CHECK).evaluation() == -1
Esempio n. 8
0
def test_kuhn_tree_actions_number_equal_to_children():
    root = KuhnRootChanceGameState(CARDS_DEALINGS)
    __recursive_tree_assert(root, lambda node: len(node.children) == len(node.actions))
Esempio n. 9
0
def test_inf_sets():
    root = KuhnRootChanceGameState(CARDS_DEALINGS)
    assert root.inf_set() == "."
    assert root.play(KQ).inf_set() == ".K."
    assert root.play(KQ).play(BET).inf_set() == ".Q.BET"
    assert root.play(KQ).play(BET).play(FOLD).inf_set() == ".K.BET.FOLD"

    assert root.inf_set() == "."
    assert root.play(QJ).inf_set() == ".Q."
    assert root.play(QJ).play(BET).inf_set() == ".J.BET"
    assert root.play(QJ).play(BET).play(FOLD).inf_set() == ".Q.BET.FOLD"
    assert root.play(QJ).play(BET).play(CALL).inf_set() == ".Q.BET.CALL"

    assert root.inf_set() == "."
    assert root.play(JK).inf_set() == ".J."
    assert root.play(JK).play(CHECK).inf_set() == ".K.CHECK"
    assert root.play(JK).play(CHECK).play(CHECK).inf_set() == ".J.CHECK.CHECK"
    assert root.play(JK).play(CHECK).play(BET).inf_set() == ".J.CHECK.BET"
    assert root.play(JK).play(CHECK).play(BET).play(CALL).inf_set() == ".K.CHECK.BET.CALL"
    assert root.play(JK).play(CHECK).play(BET).play(FOLD).inf_set() == ".K.CHECK.BET.FOLD"
Esempio n. 10
0
def test_player_a_acts_first():
    root = KuhnRootChanceGameState(CARDS_DEALINGS)
    for k in root.children:
        child = root.children[k]
        assert child.to_move == A
Esempio n. 11
0
def test_kuhn_to_move_chance_at_root():
    root = KuhnRootChanceGameState(CARDS_DEALINGS)
    assert root.to_move == CHANCE
from common.constants import CARDS_DEALINGS, NUM_PLAYERS
from games.algorithms import ChanceSamplingCFR, VanillaCFR
from games.kuhn import KuhnRootChanceGameState

root = KuhnRootChanceGameState(NUM_PLAYERS, CARDS_DEALINGS)
print("\nChance Sampling CFR without tied-rewards")
chance_sampling_cfr = ChanceSamplingCFR(root)
chance_sampling_cfr.run(iterations=1000, tied_rewards=False)
chance_sampling_cfr.compute_nash_equilibrium()
# read Nash-Equilibrum via chance_sampling_cfr.nash_equilibrium member
# try chance_sampling_cfr.value_of_the_game() function to get value of the game (-1/18)
results = chance_sampling_cfr.value_of_the_game()
print("results:: Game value: {}".format(results[0]))
print("Player rewards:: ",
      "".join(["{}: {} ".format(k, v) for k, v in results[1].items()]))
print("Team 1 reward: {} Team 2 reward: {}".format(
    (results[1][0] + results[1][2]) / 2, (results[1][1] + results[1][3]) / 2))
print("Avg Team reward: {}".format(sum(results[1].values()) / 4))

root = KuhnRootChanceGameState(NUM_PLAYERS, CARDS_DEALINGS)
print("\nChance Sampling CFR with tied-rewards")
chance_sampling_cfr = ChanceSamplingCFR(root)
chance_sampling_cfr.run(iterations=1000, tied_rewards=True)
chance_sampling_cfr.compute_nash_equilibrium()
# read Nash-Equilibrum via chance_sampling_cfr.nash_equilibrium member
# try chance_sampling_cfr.value_of_the_game() function to get value of the game (-1/18)
results = chance_sampling_cfr.value_of_the_game()
print("results:: Game value: {}".format(results[0]))
print("Player rewards:: ",
      "".join(["{}: {} ".format(k, v) for k, v in results[1].items()]))
print("Team 1 reward: {} Team 2 reward: {}".format(
Esempio n. 13
0
def test_kuhn_player_to_act_chance_at_root():
    root = KuhnRootChanceGameState(CARDS_DEALINGS)
    assert root.player_to_act == CHANCE
Esempio n. 14
0
from common.constants import CARDS_DEALINGS
from games.kuhn import KuhnRootChanceGameState
from games.algorithms import ChanceSamplingCFR, VanillaCFR
import matplotlib.pyplot as plt
import numpy as np

root = KuhnRootChanceGameState(CARDS_DEALINGS)

print('Chance_sampling')
chance_sampling_cfr = ChanceSamplingCFR(root)
X1 = []
Y1 = []
X2 = []
Y2 = []
for i in range(80):
    X1.append(i * 10)
    chance_sampling_cfr.run(iterations=10)
    chance_sampling_cfr.compute_nash_equilibrium()
    value1 = chance_sampling_cfr.value_of_the_game()
    Y1.append(value1)

print('Vanilla')
vanilla_cfr = VanillaCFR(root)
for j in range(80):
    X2.append(j * 10)
    vanilla_cfr.run(iterations=5)
    vanilla_cfr.compute_nash_equilibrium()
    value2 = vanilla_cfr.value_of_the_game()
    Y2.append(value2)

plt.figure()
def test_inf_sets():
    root = KuhnRootChanceGameState(2, CARDS_DEALINGS)
    assert root.inf_set() == "."

    assert root.play(K0Q0).inf_set() == ".K0."
    assert root.play(K0Q0).play(BET).inf_set() == ".Q0.BET"
    assert root.play(K0Q0).play(BET).play(FOLD).inf_set() == ".K0.BET.FOLD"

    assert root.inf_set() == "."

    assert root.play(Q0J0).inf_set() == ".Q0."
    assert root.play(Q0J0).play(BET).inf_set() == ".J0.BET"
    assert root.play(Q0J0).play(BET).play(FOLD).inf_set() == ".Q0.BET.FOLD"
    assert root.play(Q0J0).play(BET).play(CALL).inf_set() == ".Q0.BET.CALL"

    assert root.inf_set() == "."

    assert root.play(J0K0).inf_set() == ".J0."
    assert root.play(J0K0).play(CHECK).inf_set() == ".K0.CHECK"
    assert root.play(J0K0).play(CHECK).play(
        CHECK).inf_set() == ".J0.CHECK.CHECK"
    assert root.play(J0K0).play(CHECK).play(BET).inf_set() == ".J0.CHECK.BET"
    assert root.play(J0K0).play(CHECK).play(BET).play(
        CALL).inf_set() == ".K0.CHECK.BET.CALL"
    assert root.play(J0K0).play(CHECK).play(BET).play(
        FOLD).inf_set() == ".K0.CHECK.BET.FOLD"
def test_player_a_acts_first():
    root = KuhnRootChanceGameState(2, CARDS_DEALINGS)
    for k in root.children:
        child = root.children[k]
        # assert child.to_move == A
        assert child.current_player.index == 0