an effective two-level proof-number search algorithm
DESCRIPTION
An effective two-level proof-number search algorithm. Mark H.M. Winands, Jos W.H.M. Uiterwijk, H. Jaap van den Herik. はじめに. 研究の背景と目的 探索方法 既存の探索アルゴリズム 提案する探索アルゴリズム 評価 まとめ. 研究の背景と目的. 二人零和有限確定完全情報ゲーム. ・ 二人で対戦するゲーム 自分の有利 相手の不利 ・ いつかは必ず終わり,偶然の要素が入り込まない. 理論的には完全な先読みを行うことで必ず勝つ事が可能. - PowerPoint PPT PresentationTRANSCRIPT
An effective two-level proof-number search algorithm
Mark H.M. Winands, Jos W.H.M. Uiterwijk, H. Jaap van den Herik
はじめに
研究の背景と目的 探索方法 既存の探索アルゴリズム 提案する探索アルゴリズム 評価 まとめ
研究の背景と目的
二人零和有限確定完全情報ゲーム・ 二人で対戦するゲーム 自分の有利 相手の不利
・ いつかは必ず終わり,偶然の要素が入り込まない
全ての可能性を探索する事は不可能
理論的には完全な先読みを行うことで必ず勝つ事が可能
探索木を構築し可能な範囲で何手か先まで読みその中から最善手を選択する
研究の背景と目的
自分・相手・自分・相手・自分・‥といった順に可能な指し手を枝別れするよう広げて構築
・ 値が大きいほど自分が有利
・ 値が小さいほど自分が不利
構築したゲーム木の探索方法が重要
ゲーム木
それぞれの局面を数値化
目 的
効率の良い新しい探索手法 PDS-PN の提案
探索方法
予備知識を使わずに探索を行う
- 深さ優先探索
- 幅優先探索
何らかの予備知識を使い効率よく探索を行う
- 最良優先探索
幅優先探索のような振る舞いをする
ヒューリスティック探索
ブラインド探索 (単純な探索 )
深さ優先探索
S
A B
C D E F
G H
GOAL
枝を進めるかぎり掘り進めて行き詰ったら次の枝を調べる方法
探索が終了した部分の木をメモリに記憶する必要がなくメモリを節約できる
全ての枝を末端まで調べるので解を見つけるのが遅い
利点
欠点
深さ優先探索枝を進めるかぎり掘り進めて行き詰ったら次の枝を調べる方法
探索が終了した部分の木をメモリに記憶する必要がなくメモリを節約できる
全ての枝を末端まで調べるので解を見つけるのが遅い
利点
欠点
S
A B
E FGOAL
幅優先探索同じ深さの節点を調べ終わってから次の深さに進む方法
S
A B
C D E F
G H
GOAL
探索木全体をメモリに記憶させる必要があり、メモリの使用量が大きい
利点
欠点
効率よく見つける事が出来る
既存の探索アルゴリズム
• PN *探索
• Proof-number and Disproof-number Search (PDS)
深さ優先探索
• Proof-number Search (PN 探索 )
• PN2 探索
最良優先探索
証明数・反証数
局面を詰むために必要な先端局面の個数 値が小さいほど詰みやすい
局面が不詰めである事を示すために必要な先端局面の個数 値が小さいほど不詰めを示しやすい
攻め手側は証明数が最小の手を選ぶことが重要であり、相手側は反証数が最小の手を選ぶことが重要である
ヒューリスティックな評価関数を用いるよりもさらに探索を効率的に行うことができる概念
証明数 反証数
例) 詰め将棋の場合
PN 探索 既存の探索アルゴリズム
• 最良優先探索 • 証明数・反証数を用いて評価• 全ての木をメモリに記憶させる 必要がある• メモリ不足になると探索終了
特徴
探索を進めるにしたがって記憶するデータの量が大きく増加していく
• PN 探索を 2 段階に分けて行う• 最良優先探索• PN 探索よりメモリ使用が少ない• メモリ不足になると探索終了
特徴
木の根からある深さまで 1st PN 探索を行う
PN2 探索 既存の探索アルゴリズム
1st PN 探索
2nd PN 探索
木の根からある深さまで 1st PN 探索を行う
木の葉を親とした 2nd PN 探索を行う
PN2 探索 既存の探索アルゴリズム
1st PN 探索• PN 探索を 2 段階に分けて行う• 最良優先探索• PN 探索よりメモリ使用が少ない• メモリ不足になると探索終了
特徴
2nd PN 探索
探索済みの 2nd PN 探索のデータはメモリに記憶しない
木の根からある深さまで 1st PN 探索を行う
木の葉を親とした 2nd PN 探索を行う
PN2 探索 既存の探索アルゴリズム
1st PN 探索• PN 探索を 2 段階に分けて行う• 最良優先探索• PN 探索よりメモリ使用が少ない• メモリ不足になると探索終了
特徴
・深さ優先探索
・最良優先探索のような振る舞い
・全ての木をメモリに記憶させる必要がない
・ PN 探索よりも解を見つけるのが遅い
・証明数・反証数を対等に扱っていない
・深さ優先探索
・証明数・反証数を対等に扱っている
・全ての木をメモリに記憶させる必要がない
・ PN 探索よりも解を見つけるのが遅い
特徴
特徴
PN* 探索 既存の探索アルゴリズム
・深さ優先探索
・最良優先探索のような振る舞い
・全ての木をメモリに記憶させる必要がない
・ PN 探索よりも解を見つけるのが遅い
・証明数・反証数を対等に扱っていない
・深さ優先探索
・証明数・反証数を対等に扱っている
・全ての木をメモリに記憶させる必要がない
・ PN 探索よりも解を見つけるのが遅い
特徴
特徴
PDS 既存の探索アルゴリズム
提案する探索アルゴリズム
1st レベル‥‥‥ PDS
2nd レベル‥‥‥ PN 探索
PN2 探索のような 2 レベルの探索
PDS - PN 探索
PDS よりも速く解を見つけることが出来て
PN 探索のようなメモリ不足による探索終了に陥らない探索
・深さ優先探索
効率的なメモリの利用
・最良優先探索
解を速く見つけることが可能
PDS PN
PDS-PN
1st PDS
2ndPN 探索
木のルートからある深さまでPDS を行い,それ以降の深さはPN 探索を行う
PDS で末端の葉が PN 探索のルートとなる
アルゴリズムの比較
PN2
PDS
PDS-PN
メモリ使用速さ探索方法
最良優先
深さ優先
最良優先深さ優先
1st レベル探索: PDS
証明数・反証数を閾値として用いて,閾値の値を1 ずつ増やして探索の範囲を広げる
A
B C
閾値 探索する深さの目安
1st レベル探索: PDS
B C
D E F G
A
証明数・反証数を閾値として用いて,閾値の値を1 ずつ増やして探索の範囲を広げる
閾値 探索する深さの目安
1st レベル探索: PDS
A
B C
D E F G
解を見つける可能性が低い
BB
一つ上の親へ H I J
証明数・反証数を閾値として用いて,閾値の値を1 ずつ増やして探索の範囲を広げる
閾値 探索する深さの目安
2nd レベル探索 : PN• 最良優先探索アルゴリズム
• 有望なノード選択に証明数・反証数を用いる
• 1st レベル探索木の大きさで木の大きさが決まる
• 探索するノードの数を関数によって制限
• 探索済みのノードは削除される
- 有望なノードから優先的に選択する
- 葉の選択,拡張を繰り返して行う 通常のPN 探索
PN 探索と異なる点
2nd レベル探索 : PN• 1st レベル探索木の大きさで木の大きさが決まる
• 探索するノードの数を関数によって制限
• 探索済みのノードは削除される
PN 探索と異なる点
効率的にメモリを利用できる
PDS
PDS-PN
PN 探索PN 探索PN探索
探索済みの部分の木は削除 !!
PDS-PN
PN 探索
PDS
PN 探索PN探索
効率的なメモリ利用
PDS-PN
PN2
PDS
PDS-PN
メモリ使用速さ探索方法
最良優先
深さ優先
最良優先深さ優先
二人零和ゲームであり,同列にある駒数によって移動できる
マスの数が決まり,味方の駒をすべて連結すると勝ち
Lines Of Action (LOA)
いくつかの勝ちパターンがセットされた LOA を以下のアルゴリズムで解きその比較を行う
• PN2
• PDS
• PDS-PN
評価
評価結果Ⅰ : 時間
( 探索ノードの限界: 50,000,000)457 の解を探索した場合
・ PDS より速く解を見つける ことが出来た
・ PN2 を上回る事は
出来なかった
Total Time
0
5,000
10,000
15,000
20,000
25,000
30,000
35,000
40,000
PN2 PDS PDS- PN
10x 3 ms
PN2 PDS PDS-PN
Total time(ms)
PN2
PDS
PDS-PN
評価結果Ⅱ : メモリ
PN2
PDS-PN
AlgorithmNo.of positions solved (286)
265
276
探索ノードの限界: 500,000,000
セットされた勝ちパターン: 286
PN2 よりも多くの解を見つける事が出来た
( メモリ使用が多い場合 )
メモリ使用が多い場合
PDS - PN の方が効果的
PN2
PDS-PN
まとめ目 的
効率の良い新しい探索手法 PDS-PN の提案
PDS - PN PDS ( 深さ優先探索 )
PN ( 最良優先探索 )メモリ限界による探索終了がない
PDS よりも解を見つけるのが速い
結 論
・ PDS よりも速く解を見つける事ができた・ メモリ限界による探索終了はなかった・ メモリ使用が多い場合、 PN2 よりも効果的である
評価結果Ⅰ : 時間( 探索ノードの限界: 50,000,000)457 の解を探索した場合
・ PDS よりも速く解を見つけることが出来た
・ PN2 を上回る事が出来なかった
Total No. of nodes
0
200
400
600
800
1,000
1,200
1,400
1,600
1,800
2,000
PN2 PDS PDS- PN
10x 6
Total Time
0
5,000
10,000
15,000
20,000
25,000
30,000
35,000
40,000
PN2 PDS PDS- PN
10x 3 ms
PN2 PDS PDS-PN PN2 PDS PDS-PN
Total No. of nodes Total time(ms)
評価結果Ⅰ
αβ
PN2
PDS
PDS-PN
AlgorithmNo.of positions solved (488)
371 positions
Total No. of nodes Total time(ms)
382
470
473
467
2,645,022,391
505,109,692
239,896,147
924,924,336
33,878,642
3,642,511
16,960,325
5,860,908
探索ノードの限界: 50,000,000セットされた勝ちパターン: 488
評価結果Ⅱ
PN2
PDS-PN
AlgorithmNo.of positions solved (488)
471 positions
Total No. of nodes Total time(ms)
479
483
2,261,482,395
4,362,282,235
13,295,688
23,398,899
探索ノードの限界: 500,000,000セットされた勝ちパターン: 488
評価結果Ⅲ
PN2
PDS
PDS-PN
Algorithm Total No. of nodes Total time(ms)
1,275,155,583
498,540,408
1,845,371,831
9,357,663
36,802,350
11,952,086
探索ノードの限界: 50,000,000セットされた勝ちパターン: 457
・ PDS よりも速く解を見つけることが出来た
・ PN2 を上回る事が出来なかった
評価結果Ⅳ
PN2
PDS-PN
AlgorithmNo.of positions solved (286)
255 positions
Total No. of nodes Total time(ms)
265
276
10,061,461,685
16,685,733,992
57,343,198
84,303,478
探索ノードの限界: 500,000,000セットされた勝ちパターン: 286
探索ノード・時間は費やしているが PDS -PN はPN2 よりも多くの解を見つける事が出来た
※ 勝ちパターンが少なく解を見つけるのが難しい場合
問題が難解な場合 PDS - PN > PN2
PDS : 1st レベル探索証明数・反証数に閾値を設定
以下の条件を満たすまで深く掘り続ける
証明数の閾値 (pnt)
証明数( pn ) 反証数 (dn)
反証数の閾値 (dnt)
閾値が増加する条件
dnpn Proof-likely
dnpn disProof-likelydntpnt
dntpnt
• 証明数,反証数の値が閾値以上になった場合
• 解を見つけた場合
PDS : 1st レベル探索 閾値が増加する条件
dnpn Proof-likely
dnpn disProof-likelydntpnt
dntpnt
証明数・反証数の閾値を設定する1 11 1
A
PDS : 1st レベル探索 閾値が増加する条件
dnpn Proof-likely
dnpn disProof-likelydntpnt
dntpnt
証明数・反証数の閾値を設定する
1 1 1 1
1 21 1
ノードの拡張
1 1 1 1
1 2
証明数・反証数の計算法 ( 自分の盤の場合 )
子の証明数の最小値
子の反証数の合計
A
B C
PDS : 1st レベル探索
1 1 1 1
1 21 1
閾値が増加する条件
dnpn Proof-likely
dnpn disProof-likelydntpnt
dntpnt
証明数・反証数の値が閾値以上なので探索終了
証明数・反証数の閾値を設定する
ノードの拡張
A
B C
PDS : 1st レベル探索
1 1 1 1
1 21 1
閾値が増加する条件
dnpn Proof-likely
dnpn disProof-likelydntpnt
dntpnt
証明数・反証数の値をハッシュ表に格納し木は削除される
証明数・反証数の閾値を設定する
ノードの拡張
証明数・反証数の値が閾値以上なので探索終了
A
B C
PDS : 1st レベル探索
1 11 2
閾値が増加する条件
dnpn Proof-likely
dnpn disProof-likelydntpnt
dntpnt
ハッシュ表に格納されてある証明数・反証数の値を閾値に設定
A
PDS : 1st レベル探索
1 11 2
閾値が増加する条件
dnpn Proof-likely
dnpn disProof-likelydntpnt
dntpnt
2ハッシュ表に格納されてある証明数・反証数の値を閾値に設定
証明数・反証数の比較を行い閾値を増加させる
A
PDS : 1st レベル探索
1 22 2
閾値が増加する条件
dnpn Proof-likely
dnpn disProof-likelydntpnt
dntpnt
ハッシュ表に格納されてある証明数・反証数の値を閾値に設定
証明数・反証数の比較を行い閾値を増加させる
1 1 1 1
ノードの拡張
A
B C
PDS : 1st レベル探索
1 22 2
閾値が増加する条件
dnpn Proof-likely
dnpn disProof-likelydntpnt
dntpnt
ハッシュ表に格納されてある証明数・反証数の値を閾値に設定
証明数・反証数の比較を行い閾値を増加させる
1 1 1 1
ノードの拡張証明数・反証数の値が閾値以上でないので探索続行
A
B C
PDS : 1st レベル探索
1 22 2
1 1 1 1
閾値が増加する条件
dnpn Proof-likely
dnpn disProof-likelydntpnt
dntpnt
子の閾値を証明数・反証数に等しく設定1 1
A
B C
PDS : 1st レベル探索
1 22 2
閾値が増加する条件
dnpn Proof-likely
dnpn disProof-likelydntpnt
dntpnt
1 1 1 11 1
子の閾値を証明数・反証数に等しく設定
Proof-likely , disProof-likely のチェック
2
A
B C
PDS : 1st レベル探索
1 22
閾値が増加する条件
dnpn Proof-likely
dnpn disProof-likelydntpnt
dntpnt
2 1
2 1
1 11 1
子の閾値を証明数・反証数に等しく設定
Proof-likely , disProof-likely のチェック
ノードの拡張
1 1
2A
B C
D E
PDS : 1st レベル探索 閾値が増加する条件
dnpn Proof-likely
dnpn disProof-likelydntpnt
dntpnt
1 22 2
2 1
2 1
1 11 1
1 1
証明数・反証数の値が閾値以上なので探索終了
子の閾値を証明数・反証数に等しく設定
Proof-likely , disProof-likely のチェック
ノードの拡張
A
B C
D E
PDS : 1st レベル探索 閾値が増加する条件
dnpn Proof-likely
dnpn disProof-likelydntpnt
dntpnt
1 22 2
2 1
2 1
1 11 1
1 1
証明数・反証数の値が閾値以上なので探索終了
子の閾値を証明数・反証数に等しく設定
Proof-likely , disProof-likely のチェック
ノードの拡張
証明数・反証数の値をハッシュ表に格納し木は削除される
A
B C
D E
PDS : 1st レベル探索 閾値が増加する条件
dnpn Proof-likely
dnpn disProof-likelydntpnt
dntpnt
1 22 2
2 1
2 11 1
証明数・反証数の値が閾値以上なので探索終了
子の閾値を証明数・反証数に等しく設定
Proof-likely , disProof-likely のチェック
ノードの拡張
証明数・反証数の値が閾値以上ではないので、探索を続行
A
B C
PDS : 1st レベル探索証明数・反証数を閾値に設定
• 証明数,反証数の値が閾値以上になった場合
• 解を見つけた場合
以下の条件を満たすまで深く掘り続ける
A
B C
PDS : 1st レベル探索証明数・反証数を閾値に設定
• 証明数,反証数の値が閾値以上になった場合
• 解を見つけた場合
以下の条件を満たすまで深く掘り続ける
A
B C
D E F G
閾値よりも小さい場合探索続行
B
A
PDS : 1st レベル探索証明数・反証数に閾値を設定
• 証明数,反証数の値が閾値以上になった場合
• 解を見つけた場合
以下の条件を満たすまで深く掘り続ける
A
B C
D E F G
閾値以上の場合探索終了 A
BB
一つ上の親へ
閾値よりも小さい場合探索続行
H I J
ルートまで返って解が求まらない場合閾値を設定し直して再探索