From 378aff56cc7cebdfe02aca36636a4eef73a13ee7 Mon Sep 17 00:00:00 2001 From: Yuki Kobayashi Date: Sat, 4 Mar 2023 00:32:05 +0900 Subject: [PATCH 1/3] fix value update process --- mcts/tree.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mcts/tree.py b/mcts/tree.py index f00f12d..de26b45 100644 --- a/mcts/tree.py +++ b/mcts/tree.py @@ -180,7 +180,7 @@ def process_mini_batch(self, board: GoBoard): # pylint: disable=R0914 self.node[leaf[0]].set_leaf_value(leaf[1], value) - for index, child_index in path: + for index, child_index in reverse_path: self.node[index].update_child_value(child_index, value) self.node[index].update_node_value(value) value = 1.0 - value From 878e4b582bfb53a2918fd0d9f659e64ba6b1561e Mon Sep 17 00:00:00 2001 From: Yuki Kobayashi Date: Mon, 6 Mar 2023 00:41:50 +0900 Subject: [PATCH 2/3] support komi and get_komi GTP command --- README.md | 2 +- board/go_board.py | 22 ++++++++++++++++++++-- gtp/client.py | 10 +++++----- main.py | 9 ++++++--- mcts/constant.py | 2 +- 5 files changed, 33 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 096ddee..94877f4 100644 --- a/README.md +++ b/README.md @@ -115,7 +115,7 @@ Policyの値による色付けはPolicyの値が大きいほど赤く、小さ - [x] 碁盤の操作 : boardsize, clear_board - [x] 碁盤の表示 : showboard, showstring - [x] 着手 : play, genmove - - [ ] コミの設定と取得 : komi, get_komi + - [x] コミの設定と取得 : komi, get_komi - [x] コマンドの確認 : known_command, list_commands - [x] SGFファイルの読み込み : load_sgf - 大会参加時に必要なコマンド diff --git a/board/go_board.py b/board/go_board.py index 512072f..e56bbcc 100644 --- a/board/go_board.py +++ b/board/go_board.py @@ -15,15 +15,17 @@ class GoBoard: # pylint: disable=R0902 """碁盤クラス """ - def __init__(self, board_size: int, check_superko: bool=False) -> NoReturn: + def __init__(self, board_size: int, komi: float=7.0, check_superko: bool=False) -> NoReturn: """碁盤クラスの初期化 Args: board_size (int): 碁盤の大きさ。 - check_superko (bool): 超劫の判定有効化。 + komi (float): コミの値。デフォルト値は7.0。 + check_superko (bool): 超劫の判定有効化。デフォルト値はFalse。 """ self.board_size = board_size self.board_size_with_ob = board_size + OB_SIZE * 2 + self.komi = komi def pos(x_coord, y_coord): return x_coord + y_coord * self.board_size_with_ob @@ -313,6 +315,22 @@ def get_symmetrical_coordinate(self, pos: int, sym: int) -> int: """ return self.sym_map[sym][pos] + def set_komi(self, komi: float) -> NoReturn: + """コミを設定する。 + + Args: + komi (float): 設定するコミの値。 + """ + self.komi = komi + + def get_komi(self) -> float: + """現在のコミの値を設定する。 + + Returns: + float: 現在のコミの値。 + """ + return self.komi + def copy_board(dst: GoBoard, src: GoBoard): """盤面の情報をコピーする。 diff --git a/gtp/client.py b/gtp/client.py index 3c6f117..3a54fb3 100644 --- a/gtp/client.py +++ b/gtp/client.py @@ -27,7 +27,7 @@ class GtpClient: # pylint: disable=R0903 """_Go Text Protocolクライアントの実装クラス """ def __init__(self, board_size: int, superko: bool, \ - model_file_path: str, use_gpu: bool, policy_move) -> NoReturn: + model_file_path: str, use_gpu: bool, policy_move: bool, komi: float) -> NoReturn: # pylint: disable=R0913 """Go Text Protocolクライアントの初期化をする。 Args: @@ -36,6 +36,7 @@ def __init__(self, board_size: int, superko: bool, \ model_file_path (str): ネットワークパラメータファイルパス。 use_gpu (bool): GPU使用フラグ。 policy_move (bool): Policyの分布に従って着手するフラグ。 + komi (float): コミの値。 """ self.gtp_commands = [ "version", @@ -57,7 +58,7 @@ def __init__(self, board_size: int, superko: bool, \ "gogui-analyze_commands" ] self.superko = superko - self.board = GoBoard(board_size=board_size, check_superko=superko) + self.board = GoBoard(board_size=board_size, komi=komi, check_superko=superko) self.coordinate = Coordinate(board_size=board_size) self.gogui_analyze_command = [ GoguiAnalyzeCommand("cboard", "Display policy distribution (Black)", \ @@ -153,12 +154,12 @@ def _list_commands(self) -> NoReturn: def _komi(self, s_komi: str) -> NoReturn: """komiコマンドを処理する。 入力されたコミを設定する。 - TODO Args: s_komi (str): 設定するコミ。 """ komi = float(s_komi) + self.board.set_komi(komi) self._respond_success("") def _play(self, color: str, pos: str) -> NoReturn: @@ -259,9 +260,8 @@ def _time_left(self) -> NoReturn: def _get_komi(self) -> NoReturn: """get_komiコマンドを処理する。 - TODO """ - self._respond_success("7.0") + self._respond_success(str(self.board.get_komi())) def _showboard(self) -> NoReturn: """showboardコマンドを処理する。 diff --git a/main.py b/main.py index 4d625bd..b50a58e 100644 --- a/main.py +++ b/main.py @@ -19,18 +19,21 @@ help="ニューラルネットワークの計算にGPUを使用するフラグ。デフォルトはFalse。") @click.option('--policy-move', type=click.BOOL, default=False, \ help="Policyの分布に従った着手生成処理フラグ。デフォルトはFalse。") -def gtp_main(size: int, superko: bool, model:str, use_gpu: bool, policy_move: bool): +@click.option('--komi', type=click.FLOAT, default=7.0, \ + help="コミの値の設定。デフォルトは7.0。") +def gtp_main(size: int, superko: bool, model:str, use_gpu: bool, policy_move: bool, komi: float): # pylint: disable=R0913 """GTPクライアントの起動。 Args: size (int): 碁盤の大きさ。 superko (bool): 超劫の有効化フラグ。 model (str): プログラムのホームディレクトリからのモデルファイルの相対パス。 - use_gpu (bool): ニューラルネットワークでのGPU使用フラグ。 + use_gpu (bool): ニューラルネットワークでのGPU使用フラグ。デフォルトはFalse。 policy_move (bool): Policyの分布に従った着手生成処理フラグ。デフォルトはFalse。 + komi (float): コミの値。デフォルトは7.0。 """ program_dir = os.path.dirname(__file__) - client = GtpClient(size, superko, os.path.join(program_dir, model), use_gpu, policy_move) + client = GtpClient(size, superko, os.path.join(program_dir, model), use_gpu, policy_move, komi) client.run() diff --git a/mcts/constant.py b/mcts/constant.py index 2fb675d..0f29355 100644 --- a/mcts/constant.py +++ b/mcts/constant.py @@ -11,4 +11,4 @@ PLAYOUTS = 100 # 探索時のミニバッチサイズ -NN_BATCH_SIZE = 1 \ No newline at end of file +NN_BATCH_SIZE = 1 From 0890ff3c675c47d14c145420056b53655259ba44 Mon Sep 17 00:00:00 2001 From: Yuki Kobayashi Date: Mon, 6 Mar 2023 02:35:29 +0900 Subject: [PATCH 3/3] change version --- program.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/program.py b/program.py index fb7e4d9..fdd2866 100644 --- a/program.py +++ b/program.py @@ -11,4 +11,5 @@ # Policy Networkを使用した着手生成ロジックの実装。 # Version 0.2.1 : Residual Blockの構造を修正。学習の再実行。 # Version 0.3.0 : モンテカルロ木探索の実装。 -VERSION="0.3.0" +# Version 0.3.1 : モンテカルロ木探索のValue更新処理のバグ修正。komi, get_komiコマンドのサポート。 +VERSION="0.3.1"