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