Skip to content

Commit

Permalink
Merge pull request #15 from kobanium/develop
Browse files Browse the repository at this point in the history
fix#12 and support komi and get_komi GTP command
  • Loading branch information
kobanium authored Mar 5, 2023
2 parents 3757781 + c016167 commit b432e91
Show file tree
Hide file tree
Showing 7 changed files with 36 additions and 14 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
- 大会参加時に必要なコマンド
Expand Down
22 changes: 20 additions & 2 deletions board/go_board.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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):
"""盤面の情報をコピーする。
Expand Down
10 changes: 5 additions & 5 deletions gtp/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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",
Expand All @@ -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)", \
Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -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コマンドを処理する。
Expand Down
9 changes: 6 additions & 3 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()


Expand Down
2 changes: 1 addition & 1 deletion mcts/constant.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,4 @@
PLAYOUTS = 100

# 探索時のミニバッチサイズ
NN_BATCH_SIZE = 1
NN_BATCH_SIZE = 1
2 changes: 1 addition & 1 deletion mcts/tree.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
3 changes: 2 additions & 1 deletion program.py
Original file line number Diff line number Diff line change
Expand Up @@ -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"

0 comments on commit b432e91

Please sign in to comment.