Exemple #1
0
def test_not_in_db():
    some_simple_game = """
  (role white)
  (role black)

  (init o1)

  (legal white a)
  (legal white b)
  (legal black a)

  (<= (next o2) (does white a) (true o1))
  (<= (next o3) (does white b) (true o1))

  (<= (goal white 0) (true o1))
  (<= (goal white 10) (true o2))
  (<= (goal white 90) (true o3))

  (<= (goal black 0) (true o1))
  (<= (goal black 90) (true o2))
  (<= (goal black 10) (true o3))

  (<= terminal (true o2))
  (<= terminal (true o3))
    """

    gm = GameMaster(some_simple_game)

    # add two python players
    gm.add_player(get.get_player("pyrandom"), "black")
    gm.add_player(get.get_player("ggtest1"), "white")

    gm.start(meta_time=10, move_time=5)
    gm.play_to_end()
Exemple #2
0
def get_player(player_type, move_time, gen=None, **extra_opts):
    if gen:
        assert player_type == "puct", "unknown player type: %s" % player_type
        return PUCTPlayer(get_puct_config(gen, **extra_opts))

    add_extra_opts = False
    assert gen is None
    if player_type == "s":
        player = get.get_player("simplemcts")
        player.max_tree_search_time = move_time
        add_extra_opts = True
    elif player_type == "m":
        player = get.get_player("pymcs")
        player.max_run_time = move_time
        add_extra_opts = True

    elif player_type == "r":
        player = get.get_player("random")

    elif player_type == "g":
        from gurgeh.player import GurgehPlayer
        player = GurgehPlayer()
        add_extra_opts = True

        player.max_tree_search_time = move_time
    else:
        assert False, "unknown player type: %s" % player_type

    if add_extra_opts:
        for k, v in extra_opts.items():
            setattr(player, k, v)

    return player
Exemple #3
0
def test_tictactoe_take_win():
    gm = GameMaster(get_gdl_for_game("ticTacToe"))

    # add two c++ players
    gm.add_player(get.get_player("ggtest1"), "xplayer")
    gm.add_player(get.get_player("ggtest1"), "oplayer")

    str_state = '''
    (true (control xplayer))
    (true (cell 2 2 x))
    (true (cell 3 2 o))
    (true (cell 3 3 x))
    (true (cell 2 3 o))
    (true (cell 3 1 b))
    (true (cell 2 1 b))
    (true (cell 1 3 b))
    (true (cell 1 2 b))
    (true (cell 1 1 b)) '''

    gm.start(meta_time=30, move_time=2,
             initial_basestate=gm.convert_to_base_state(str_state))

    # play a single move - should take win
    move = gm.play_single_move()
    assert str(move[0]) == "(mark 1 1)"
    assert str(move[1]) == "noop"

    gm.play_to_end(last_move=move)

    # check scores/depth make some sense
    assert gm.scores['xplayer'] == 100
    assert gm.scores['oplayer'] == 0
    assert gm.get_game_depth() == 1
Exemple #4
0
def test_tictactoe_cpp_play():
    gm = GameMaster(get_gdl_for_game("ticTacToe"))

    # add two c++ players
    gm.add_player(get.get_player("random"), "xplayer")
    gm.add_player(get.get_player("legal"), "oplayer")

    gm.start(meta_time=10, move_time=5)
    gm.play_to_end()

    # check scores/depth make some sense
    assert sum(gm.scores.values()) == 100
    assert 5 <= gm.get_game_depth() <= 9
def test_tictactoe_play_verbose():
    gm = GameMaster(lookup.by_name("ticTacToe"), verbose=True)

    # add two python players
    gm.add_player(get.get_player("pyrandom"), "xplayer")
    gm.add_player(get.get_player("pylegal"), "oplayer")

    gm.start(meta_time=10, move_time=5)
    gm.play_to_end()

    # check scores/depth make some sense
    assert sum(gm.scores.values()) == 100
    assert 5 <= gm.get_game_depth() <= 9
Exemple #6
0
def main():
    import sys
    from ggplib.player.get import get_player

    player_type = sys.argv[1]
    port = int(sys.argv[2])

    # if third argument, set to player name
    try:
        player_name = sys.argv[3]
        player = get_player(player_type, player_name=player_name)
    except IndexError:
        player = get_player(player_type)

    play_runner(player, port)
Exemple #7
0
def create_player():
    from ggplib.player import get
    player = get.get_player("simplemcts")
    player.max_tree_search_time = 0.25
    player.skip_single_moves = True
    player.dump_depth = 1
    return player
Exemple #8
0
def play_game(generation_name, player_clz, num_previous_states=1):
    game = "breakthrough"

    # ensure we have a network
    man = get_manager()
    generation_descr = templates.default_generation_desc(
        game,
        multiple_policy_heads=True,
        num_previous_states=num_previous_states)

    nn = man.create_new_network(game, "tiny", generation_descr)
    man.save_network(nn, generation_name)
    nn.summary()

    conf = get_default_conf(generation_name,
                            max_dump_depth=2,
                            playouts_per_iteration=42)

    attrutil.pprint(conf)

    gm = GameMaster(lookup.by_name(game))

    gm.add_player(player_clz(conf), "white")
    gm.add_player(get.get_player("random"), "black")

    gm.start(meta_time=30, move_time=15)

    last_move = None
    while not gm.finished():
        last_move = gm.play_single_move(last_move=last_move)

    gm.finalise_match(last_move)
    return gm
Exemple #9
0
def test_trained():
    # simplemcts vs GOOD_GEN
    simple = get.get_player("simplemcts")
    simple.max_run_time = 0.5

    eval_config = confs.PUCTEvaluatorConfig(verbose=True,
                                            puct_constant=0.85,
                                            puct_constant_root=3.0,
                                            dirichlet_noise_pct=-1,
                                            fpu_prior_discount=0.25,
                                            fpu_prior_discount_root=0.15,
                                            choose="choose_temperature",
                                            temperature=2.0,
                                            depth_temperature_max=10.0,
                                            depth_temperature_start=0,
                                            depth_temperature_increment=0.75,
                                            depth_temperature_stop=1,
                                            random_scale=1.0,
                                            batch_size=1,
                                            max_dump_depth=1)

    puct_config = confs.PUCTPlayerConfig("gzero", True, 200, 0, GOOD_GEN1,
                                         eval_config)
    attrutil.pprint(puct_config)

    puct_player = PUCTPlayer(puct_config)

    play(simple, puct_player)
def main():
    setup()

    simplemcts = get.get_player("simplemcts")
    simplemcts.skip_single_moves = True

    pymcs = get.get_player("pymcs")
    pymcs.skip_single_moves = True
    pymcs.max_run_time = 0.5

    mapping = {
        'breakthrough' : ["v5_%s" % s for s in [80, 92]],
        'cittaceot' : ["v8_%s" % s for s in [20, 30]],
        'checkers' : ["v7_%s" % s for s in [10, 16]],
        'connectFour' : ["v7_%s" % s for s in [25, 38]],
        'escortLatch' : ["v7_%s" % s for s in [5]],
        'hex' : ["v7_%s" % s for s in [15, 20]],
        'reversi' : ["v7_%s" % s for s in [30, 40, 50]],
        # 'speedChess' : ["v9_%s" % s for s in [26]]
    }

    players = {}
    for game in mapping:
        players.setdefault(game, [pymcs, simplemcts])

        path_to_matches = matches_path(game)
        if not os.path.exists(path_to_matches):
            os.makedirs(path_to_matches)

    for game, gens in mapping.items():
        for gen in gens:
            conf = templates.puct_config_template(gen, "compete")
            players[game].append(CppPUCTPlayer(conf=conf))

    meta_time = 20
    move_time = 5
    while True:
        game = random.choice(mapping.keys())
        players_available = players[game]
        random.shuffle(players_available)

        do_game(game, gen, players_available[:2], meta_time, move_time)

        # wait 5 seconds between games
        time.sleep(5)
Exemple #11
0
def test_tictactoe_play_test_db_lookup():
    game_gdl_str = get_gdl_for_game("ticTacToe", dict(mark="kram",
                                                      noop="notamove",
                                                      cell="bell",
                                                      oplayer="doobie"))

    gm = GameMaster(game_gdl_str)

    # add two python players
    gm.add_player(get.get_player("pyrandom"), "xplayer")
    gm.add_player(get.get_player("pylegal"), "oplayer")

    gm.start(meta_time=10, move_time=5)
    gm.play_to_end()

    # check scores/depth make some sense
    assert sum(gm.scores.values()) == 100
    assert 5 <= gm.get_game_depth() <= 9
Exemple #12
0
def test_speed():
    gm = GameMaster(get_gdl_for_game("reversi"))

    # add two python players
    a = get.get_player("simplemcts")
    a.skip_single_moves = True
    a.max_tree_playout_iterations = 200

    b = get.get_player("simplemcts")
    b.skip_single_moves = True
    b.max_tree_playout_iterations = 200

    gm.add_player(a, "red")
    gm.add_player(b, "black")

    import time
    gm.start(meta_time=10, move_time=5)
    s = time.time()
    gm.play_to_end()
    print "DONE", time.time() - s
Exemple #13
0
def test_random():
    # add two players
    # simplemcts vs RANDOM_GEN
    pymcs = get.get_player("simplemcts")
    pymcs.max_run_time = 0.25

    eval_config = templates.base_puct_config(verbose=True, max_dump_depth=1)
    puct_config = confs.PUCTPlayerConfig("gzero", True, 100, 0, RANDOM_GEN,
                                         eval_config)

    attrutil.pprint(puct_config)

    puct_player = PUCTPlayer(puct_config)

    play(pymcs, puct_player)
Exemple #14
0
def test_breakthrough():
    ' mcs player vs ggtest1 '
    gm = GameMaster(get_gdl_for_game("breakthrough"))

    # add two players
    white = get.get_player("pymcs")
    white.max_run_time = 0.25

    black = get.get_player("simplemcts")
    black.skip_single_moves = True

    gm.add_player(white, "white")
    gm.add_player(black, "black")

    gm.start(meta_time=30, move_time=2.0)
    gm.play_to_end()

    # hopefully simplemcts wins!  Not a great test.
    assert gm.scores["white"] == 0
    assert gm.scores["black"] == 100

    # check scores/depth make some sense
    assert sum(gm.scores.values()) == 100
    assert gm.get_game_depth() >= 10
def test_breakthrough():
    gm = GameMaster(get_gdl_for_game("breakthrough"))

    # add two players
    pymcs = get.get_player("pymcs")
    pymcs.max_run_time = 0.25

    gurgeh = GurgehPlayer("Gurgeh")
    gurgeh.max_tree_search_time = 1
    gurgeh.max_tree_search_time = 1
    gurgeh.thread_workers = 2

    gm.add_player(pymcs, "white")
    gm.add_player(gurgeh, "black")

    gm.start(meta_time=30, move_time=15)
    gm.play_to_end()

    print "white_score", pymcs.name, gm.get_score("white")
    print "black_score", gurgeh.name, gm.get_score("black")
Exemple #16
0
def play_game(generation_name, num_previous_states):
    game = "breakthrough"

    # ensure we have a network
    man = get_manager()
    generation_descr = templates.default_generation_desc(game,
                                                         multiple_policy_heads=True,
                                                         num_previous_states=num_previous_states)

    nn = man.create_new_network(game, "tiny", generation_descr)
    man.save_network(nn, generation_name)
    nn.summary()

    conf = templates.puct_config_template(generation_name, "compete")

    gm = GameMaster(get_gdl_for_game(game))

    gm.add_player(CppPUCTPlayer(conf=conf), "white")
    gm.add_player(get.get_player("random"), "black")

    gm.start(meta_time=30, move_time=15)
    gm.play_to_end()
Exemple #17
0
def test_puct_tournament():
    gm = GameMaster(get_gdl_for_game("breakthrough"))

    # add two players
    pymcs = get.get_player("pymcs")
    pymcs.max_run_time = 0.1

    black = PUCTPlayer(conf=default_puct_config)

    gm.add_player(pymcs, "white")
    gm.add_player(black, "black")

    acc_black_score = 0
    acc_red_score = 0
    for _ in range(ITERATIONS):
        gm.start(meta_time=30, move_time=15)
        gm.play_to_end()

        acc_black_score += gm.scores["black"]
        acc_red_score += gm.scores["white"]

    print "white_score", gm.players_map["white"].name, acc_red_score
    print "black_score", gm.players_map["black"].name, acc_black_score