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