an effective two-level proof-number search algorithm

Post on 05-Jan-2016

36 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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 Presentation

TRANSCRIPT

An effective two-level proof-number search algorithm

Mark H.M. Winands, Jos W.H.M. Uiterwijk, H. Jaap van den Herik

はじめに

研究の背景と目的 探索方法 既存の探索アルゴリズム 提案する探索アルゴリズム 評価 まとめ

研究の背景と目的

二人零和有限確定完全情報ゲーム・ 二人で対戦するゲーム 自分の有利  相手の不利

・ いつかは必ず終わり,偶然の要素が入り込まない

全ての可能性を探索する事は不可能

理論的には完全な先読みを行うことで必ず勝つ事が可能

探索木を構築し可能な範囲で何手か先まで読みその中から最善手を選択する

研究の背景と目的

自分・相手・自分・相手・自分・‥といった順に可能な指し手を枝別れするよう広げて構築

 ・ 値が大きいほど自分が有利

 ・ 値が小さいほど自分が不利

構築したゲーム木の探索方法が重要

ゲーム木

それぞれの局面を数値化

目 的

効率の良い新しい探索手法  PDS-PN の提案

探索方法

    予備知識を使わずに探索を行う

  - 深さ優先探索

 - 幅優先探索

     何らかの予備知識を使い効率よく探索を行う

  - 最良優先探索

幅優先探索のような振る舞いをする

ヒューリスティック探索

ブラインド探索 (単純な探索 )

深さ優先探索

A B

C D E F

G H

GOAL

枝を進めるかぎり掘り進めて行き詰ったら次の枝を調べる方法

探索が終了した部分の木をメモリに記憶する必要がなくメモリを節約できる

全ての枝を末端まで調べるので解を見つけるのが遅い

利点

欠点

深さ優先探索枝を進めるかぎり掘り進めて行き詰ったら次の枝を調べる方法

探索が終了した部分の木をメモリに記憶する必要がなくメモリを節約できる

全ての枝を末端まで調べるので解を見つけるのが遅い

利点

欠点

A B

E FGOAL

幅優先探索同じ深さの節点を調べ終わってから次の深さに進む方法

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

ルートまで返って解が求まらない場合閾値を設定し直して再探索

top related