一眼問題と詰碁における探索技術について

高性能な詰碁ソルバーの
探索技術について
岸本 章宏
公立はこだて未来大学システム情報科学部
情報アーキテクチャ学科
[email protected]
共同研究者: Martin Mueller
Department of Computing Science,
University of Alberta, Canada
[email protected]
発表概要
研究背景
 関連研究
 詰碁ソルバー:TsumeGo Explorer
 実験結果 – GoToolsとの性能比較
 まとめと今後の課題

ゲームと人工知能研究

なぜゲームなのか?
– 探索アルゴリズムにとって理想的な題材



簡単なルールと結果
膨大な探索空間
リアルタイムに応答する必要性
– 多くのアプリケーションが存在


シークエンスアラインメント問題
定理証明など
– 研究者への明確な動機付け

世界チャンピオンに勝てるようなプログラムの作成
コンピュータ囲碁研究の意義

チェスでのDeep BlueのKasparovへの勝利
– 探索ベースのアプローチ
より難しいゲームへ

次のターゲットは囲碁
– 大きな探索空間
 チェス 1040 囲碁 10170
– 局面の評価の難しさ
 チェス 駒の損得
囲碁 ???
囲碁のルール





白黒が交互にプレイ
空点に石を打つ手か
パスが合法
石を取ることが可能
自殺手は禁止
地の大きな方が勝ち
例
コンピュータ囲碁の現状

強さ
– 中級者が最強のプログラムに簡単に勝てるレ
ベル

足りないものは?
– よい評価関数
– 効率のよい探索アルゴリズム
囲碁は難しいので「賢い」探索アルゴリズム
が必要
コンピュータ囲碁における
詰碁(死活)問題
囲碁はやはり探索するのが困難
 囲碁の部分問題に着目

– 詰碁は探索アルゴリズムにとって理想的な部分問題


強い囲碁プログラムの重要な要素の一つである
現状では常に正しい結果を保証するには探索しか
ない
詰碁問題とは?
攻め方は△のついた
石をすべて取る
 受け方は活きようとす
る

– 例: 二眼、セキ

着手は領域内に制限
例
AND/OR木と詰碁の関係

AND/OR木探索アルゴリズムを用いて詰
碁を解くことが可能
– 先手は勝ちに至る少なくとも一つの着手
を見つければよい
(OR節点)
– 後手は全ての着手が負けに至ることを
示せばよい
(AND節点)
AND/OR木の定義 (1 / 2)

OR節点とAND節点
– OR(AND)節点の子節点はAND(OR)節点

各節点は3つの値の可能性
– 勝ち: ORの勝ち
– 負け: ANDの勝ち
– 不明: 今のところ分からない

終端節点:子節点のない節点
ルート節点
A
内部
節点
B
C
– 勝ちか負けの値



先端節点:未展開の節点
内部節点:子節点を持つ節点
ルート節点:開始節点(OR節点)
OR節点
AND節点
D
E
F
不明
先端節点
勝ち
負け
終端節点
AND/OR木の定義 (2 / 2)

OR(AND)節点の値の決定
例
– 1つ以上の子節点が勝ち(負
け)ならば勝ち(負け)
負
– 全ての子節点が負け(勝ち)な
B
らば負け(勝ち)
– それ以外は不明
負
不明

ルート節点が勝ちか負けに
なるまで木を展開
OR節点
D
H
E
I
A 勝
勝
C
勝
F
勝
G
J
K
L
M
AND節点
不明 負け 負け 勝ち 勝ち 勝ち
探索効率向上技術の重要性

探索空間 O(bd)
例
A 勝
– b: 分岐因子
– d: 深さ

負
証明木: O(bd/2)
– 節点が勝ちであることを証
明する木
トレードオフ:探索速度を落
とさずに探索節点数を減
らしたい
H
OR節点
証明木
不明
AND節点
勝
B
不明
D
I
負け
C
負
E
J
勝
勝
G
F
K
L
M
勝ち 勝ち 勝ち 勝ち
探索効率向上へのアプローチ

ゲーム非依存の性質を用いる
– AND/OR木探索一般に応用可能

ゲーム依存の知識を用いる
– そのゲームにのみ利用可能
高性能なソルバーは両方を用いるのが通常
性能向上手法の例 (1 / 2)
トランスポジションテーブル

DAGの性質を利用
 前の探索結果をハッ
シュに保存
 ゲーム非依存の方法
例
A
B
C
ハッシュ表
D
A
B
勝ち
1回の探索でOK
C
D
勝ち
OR節点
AND節点
性能向上手法の例 (2 / 2)
評価関数による節点の並べ替え

評価関数
– 局面を「評価」し、点数化
– ゲーム依存の知識




ある石を捕れるのでプラス10点
2つの石がつながっているのでプラス5点
…
評価関数による子節点の並べ替え
– 探索時にすべての子節点を評価
– 評価値のよい子節点から探索
– この枠組み自体はゲーム非依存
1 2
20
11
3
5
以前の詰碁ソルバーの研究

GoTools [Wolf:2000]
– 石の生死を判定する強力なルール
– 何年にもわたって書かれた囲碁の知識

着手の並べ替え等に利用
– 単純なαβ法+トランスポジションテーブル
– 過去15年にわたって最強の詰碁ソルバーとして君臨
– 14空点程度の問題しか解けない
「多数」のゲーム「依存」の手法 + 「単純」なゲーム「非依存」の手法
コンピュータ将棋における研究

詰将棋ソルバー
– 強力な探索アルゴリズム

Df-pnアルゴリズム+トランスポジションテーブル
[Nagai & Imai:1999]
– 様々な将棋の知識

囲碁における知識よりもずっと単純
– プロ棋士を凌駕する解答能力
現存する100手詰以上の問題はすべて解答可能
[Nagai:2002]
比較的「少数」のゲーム「依存」の手法 + 「強力」なゲーム「非依存」
の手法

研究成果

詰碁ソルバーTsumeGo Explorer の実装
– 新しい探索アルゴリズム df-pn(r)を利用




Df-pn アルゴリズム[Nagai & Imai:1999]をベースに利用
Graph-History Interaction (GHI)問題の解決策
[Kishimoto & Mueller:AAAI2004]
サイクルに関する証明数・反証数計算の問題の解決
[ Kishimoto and Mueller:ACG2003]
df-pnの閾値の調整法 [Kishimoto & Mueller:AAAI2005]
– 現状での最強の詰碁ソルバー
[Kishimoto & Mueller:AAAI2005]
比較的「少数」のゲーム「依存」の手法 + 「強力」なゲーム「非依存」
の手法を用いたアプローチ
TsumeGo Explorerの概要
探索エンジン: df-pn(r)
 ゲーム依存プラグイン

– 終端局面の判定
– 着手生成
– 性能向上手法
 接続 [Mueller:GPW1997]
 強制手順
 シミュレーション [Kawano:1996]
 評価関数
Df-pn アルゴリズム
[Nagai & Imai:1999]
証明数と反証数 [Allis:94]を利用
 深さ優先探索

– 証明数と反証数の閾値を持つ

トランスポジションテーブルによる効率化
証明数の定義

節点nの証明数pn(n)
– nが勝ちであるために展開しなければならな
い先端節点数の下限値
2
pn(n) = min(pn(c1), …, pn(ck))
(n: 内部OR節点, ci:子節点)
pn(n) = pn(c1) + … + pn(ck)
2
3
(n: 内部AND節点)
pn(n)= 1 (n:先端節点)
pn(n)= 0 (nが勝ち)
1
1
1
1
1
pn(n)=∞ (nが負け)
pn OR節点 pn AND節点
反証数の定義

節点nの証明数dn(n)
– nが負けであるために展開しなければならな
い先端節点数の下限値
dn(n) = dn(c1)+…+ dn(ck)
(n: 内部OR節点, ci:子節点)
dn(n) = min(dn(c1),…,dn(ck))
(n: 内部AND節点)
dn(n)= 1 (n:先端節点)
dn(n)= 0 (nが負け)
dn(n)=∞ (nが勝ち)
1
dn
2
2
1
3
1
1
OR節点 dn AND節点
1
Df-pnアルゴリズム(1 / 2)
閾値を用いた深さ優先探索
例
pn(A)=1
thpn(A)=INF
dn(A)=2
thdn(A)=INF
A
dn(G)=2>=thdn(G)=2
pn(B)=1
pn(B)=3
pn(C)=2
pn(C)=1
thpn(C)=4
thpn(B)=2
dn(B)=1
B pn(B)=3>=thpn(B)=2C
dn(C)=1
thdn(C)=INF-1
thdn(B)=INF-1
pn(H)=1
thpn(G)=3
D
E
F thpn(H)=3
H
pn(G)=1 G
dn(H)=1
thdn(G)=2
dn(G)=1
dn(G)=2
pn(D)=1 pn(E)=1 pn(F)=1thdn(H)=3
I
J
dn(D)=1 dn(E)=1 dn(F)=1
OR節点
AND節点
Df-pnアルゴリズム (2 / 2)
何度も内部節点を展開
 トランスポジションテーブルの利用

– 以前に展開した節点を保存
 証明数・反証数など
– 探索や証明数の計算時に参照
– 内部節点の再展開を減少
Graph-History Interaction
(GHI)問題 [Palay:83]
詰碁の探索空間はサイク 例
ルを含む
A
– 以前の局面に戻る着
手は禁じ手
B
C
C.f. SSKルール
 トランスポジションテーブ
D
ルは経路を無視
勝ち or 負け?
– 間違えた答えを返す
可能性
ABD(B) 勝ち
OR節点
Dの値は一意に決まらない
ACDB(D) 負け
AND節点

Df-pn(r)におけるGHI問題対策
[Kishimoto & Mueller:AAAI2004]




トランスポジションテーブル 例
の各エントリーに局面+経
路情報を保持
不明の節点は証明数・反証
数の情報を利用
サイクルがらみの勝ち負け
は勝ち/負け via pathと保存
サイクルが無関係のときは
「無条件」勝ち/負けと保存
A
B
D via ABD 勝ち
D via ACD 負け
C
D
TsumeGo Explorerの中身
(残りの部分)
探索エンジン: df-pn(r)
 ゲーム依存プラグイン

– 終端局面の判定
– 着手生成
– 性能向上手法
 接続 [Mueller:GPW1997]
 強制手
 シミュレーション [Kawano:1996]
 評価関数
TsumeGo Explorerの
ゲーム依存プラグイン

着手生成
– パス+領域内の着手全て
– 強制手

終端節点の判定
– 活き形である
例:二眼、セキ
受け方の勝ち
– 眼を作るスペースがない
攻め方の勝ち
黒:受け方 白:攻め方
見合い戦略[Mueller:GPW97]を
用いた接続
攻め方の接続のみを
考慮
 不安定な石を活きた
石と判定可能
 受け方の石の死を早
い段階で判定

黒:受け方 白:攻め方
黒死の例
強制手:安全枝刈り方法
強制手の例
シミュレーション [Kawano:96]

「似た」局面の証明木を高速に構築する方法
勝ちの局面
似た局面
P1
P2
P3
P5
OR節点
Q1
Q2
P4
Q3
P6
Q5
AND節点
Q4
Q6
シミュレーションの詰碁への適用
P1
A4
勝ち
P2
A4
P3
P4
P5
Simulation
Df-pn(r)
Df-pn(r)
評価関数を利用した
証明数・反証数の初期化 (1 / 2)

Df-pnベースの方法の
問題
P1
– 石を捕ることを嫌う
– 一時的な証明数・反証
数が大きくなる

証明数・反証数の初期
化のために評価関数を
利用 [Nagai:GPW2001]
P2
先端節点
pn(P2) = 1 dn(P2) = 1
pn(P2) = evalPN(P2)
dn(P2) = evalDN(P2)
評価関数を利用した
証明数・反証数の初期化 (2 / 2)

二眼を作れる距離の概算
4 2 4 15
2 4
5 5

目を奪う着手の評価値
2 1 2 3
2 1
2 3
その他の話題
(囲碁プレイヤー向け)

コウの取り扱い
– 詰碁問題の結果に影響

TsumeGo Explorer のでコウの取り扱い
– 2回の探索によって対応
 1回目:コウ立てなしとして探索
 2回目:負けたプレイヤーに無限にコウダテがある
と仮定して再探索
通常は再探索のオーバーヘッドは少ない
TsumeGo Explorerと
GoToolsの性能比較
マシン環境: Athlon XP 2800+
 制限時間: 各問5分
 利用した問題

– Muellerのテスト問題



Muellerによって作成された148題
簡単なものから非常に難しいものまで様々な難易度
http://www.cs.ualberta.ca/~games/go/oneeye/
– Wolfのテスト問題

GoToolsにとっての難問418題
利用した問題の例
Muellerのテスト問題
(白先白活)
Wolfのテスト問題
(白先白活)
Wolfの問題における性能比較
解けた問題数
実行時間の
合計(秒)
GoTools
TsumeGo Explorer
合計数
418
418
418
1,235
448
Wolfの問題における
パフォーマンスグラフ
両方のプログラムで解けた問題のプロット
Muellerの問題における
性能比較
実行時間の
解けた問題の数 合計(秒)
(119問)
GoTools
TsumeGo Explorer
合計
119
142
148
957
47
Muellerのテスト問題における
パフォーマンスグラフ
両方のプログラムで解けた問題のプロット
Lessons Learned (1 / 3)

白先黒死

GoToolsの知識は小サ
イズの問題には有効
– GoToolsは静的に解答
– TsumeGo Explorerは
3,159節点で解答(0.1秒)
Lessons Learned (2 / 3)

黒先黒活

難しい問題ではより良
い探索アルゴリズム
が必要
– GoToolsは5分以内に
解答不可能
– TsumeGo Explorer は
0.73秒(22,616節点)で
解答
Lessons Learned (3 / 3)

性能向上には強力な探索アルゴリズムと様々な
性能向上のためのアイデアの両方が必要
566題のテスト問題を用いた場合の性能比較
(1): df-pn(r)
(2): (1) + 連結
(3): (2) + 強制手
(4): (3) + シミュレーション
(5): (4) + 評価関数
解けた問題 合計実行時間 展開節点総数
(566題中)
(564題中)
(564題中)
564
6,262
399,195,987
564
3,828
185,639,307
566
1,480
63,049,713
566
1,146
54,265,265
566
808
36,592,360
まとめと今後の課題

まとめ
– df-pnベースのアルゴリズムを詰碁へ応用
– 比較的少ないゲーム依存の知識
– 現在最高性能の詰碁ソルバーの実装に成功

今後の課題
– より大きなサイズの問題への挑戦



22~27空点サイズの問題を解くのが限界
C.f. GoToolsは14空点程度
知識をもっと足す必要あり?
– 開いた問題を解けるソルバーの開発
– 実際の囲碁を打つシステムへの利用
最終的に解きたい問題の例

囲碁発陽論 第1番 (白先白活)
宣伝:現在進行中のプロジェクト

Akebonoプロジェクト
– 「日本発」の強いコンピュータ囲碁プログラムの開発
– 現在のメンバー




岸本章宏 (はこだて未来大学情報アーキテクチャ学科助手)
金子知適 (東京大学大学院広域科学専攻助手)
美添一樹 (東京大学大学院情報理工学系研究科今井研)
吉本晴洋 (東京大学大学院情報理工学系研究科田浦研)
– 現在は9路盤のみ実装、将来は19路盤も
– 興味のある方は [email protected] まで