win-rate first search

Post on 08-Jul-2015

1.256 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

モンテカルロ法から勝率優先探索へ「どうぶつしょうぎ」

2010/05/22井原健紘

要するに

• コンピュータ将棋のアルゴリズムの話• 目次

– どうぶつしょうぎエキシビション– 昔からあるmin-max法のおさらい

– 原始的なモンテカルロ法のおさらい– 本題:勝率優先探索

どうぶつしょうぎ

• どうぶつしょうぎで実験した• どうぶつしょうぎ:ミニチュア将棋• 本将棋だと盤が大きすぎて実験には適さ

ない

どうぶつしょうぎルール1

駒の動きは5種類初期配置は右図らいおんをとれば勝ちらいおんが入玉しても勝ち

ひよこは敵陣でにわとりに成る

どうぶつしょうぎルール2

どの駒も1マスずつ動く

前だけ斜め前と前後左右将棋の金

八方 斜め四方

前後左右

将棋と同じで、取った駒は使える反則はほぼない(2ひよこ・打ひよこ詰め・行き所のないひよこ打OK)

どうぶつしょうぎ著作権

• どこが著作権保持者なのか外部から見て分からない– 藤田麻衣子(イラスト作成)– 北尾まどか(ルール作成)– LPSA(作成時二人が所属)– 幻冬舎エデュケーション(販売元)

イラスト

• なお、このスライドでは、藤田女史のイラストではなく、下記サイトのイラストを用いる(著作権が複雑なため)

• 素材屋じゅん• (http://park18.wakwak.com/~osyare/)

エキシビション0手目

先手:勝率優先探索(提案手法)後手:駒割のみのmin-max法の9手読み(従来手法)

エキシビション1手目

先手、きりんを上がる

エキシビション2手目

後手、きりんを上がる

エキシビション3手目

先手、ひよこ交換をせまる

エキシビション4手目

後手、ぞうでひよこを取る

エキシビション5手目

先手、ぞうを上がるひよこ換わり相腰掛けぞうに収まる

エキシビション6手目

後手、一段ひよこを打つ

エキシビション7手目

先手、きりんが下がる渋い手

エキシビション8手目

後手のきりんが進出

エキシビション9手目

きりんを追い払うべく、先手も一段ひよこ

エキシビション10手目

後手、きりんでぞうを取る

エキシビション11手目

先手、らいおんできりんを取る一手

エキシビション12手目

後手、ぞう打ちぞうが横に並ぶかたちは強い後手優勢

エキシビション13手目

先手、らいおんを逃げるしかない

エキシビション14手目

後手、らいおんで圧迫

エキシビション15手目

先手、きりんを打ってらいおんを追い払う

エキシビション16手目

後手、らいおんをここに逃げる

エキシビション17手目

先手、きりんを上がる後手のぞうに、取るか逃げるかの選択を迫っている

エキシビション18手目

後手、ぞうできりんを取った

エキシビション19手目

先手、らいおんでぞうを取る

エキシビション20手目

後手、きりん打ちこのあたりで形勢が五分に戻る

エキシビション21手目

先手、らいおんの後ろにぞうを打つという珍しい手

エキシビション22手目

後手、ぞうを引くどうぶつしょうぎは引く手はあまり悪手にならない

エキシビション23手目

先手、ぞうを上がるここで、先手の評価値が少し上がる

エキシビション24手目

後手、きりんとぞうの交換をせまる

エキシビション25手目

先手、交換に応じてぞうで取る

エキシビション26手目

後手、ひよこでぞうを取るここでぞうで取っていたらきりん打ちから後手のらいおんが詰んでいた

エキシビション27手目

先手、らいおんを逃げる

エキシビション28手目

後手、ぞう打ち

エキシビション29手目

先手、きりん打ちどうやらこれで勝負ありのようである

エキシビション30手目

後手、一応ぞうできりんを取る

エキシビション31手目

先手、らいおんでひよこを取る後手、投了投了図以下、入玉を阻むために後手が自玉の横にきりんを打つ・先手のきりんがぞうを取って王手・らいおんがそのきりんを取る・ひよこが上がる・ひよこを取ると入玉されるので後手のらいおんは下がる・後手のらいおんの頭にひよこを打って詰み

min-max法

• 古くからある手法• 現在でも将棋では最も有力な手法• 木構造を使って説明する

min-max法 例:三手読むことにする

現在の局面

途中の局面

三手先の局面

min-max法

三手先の局面の評価値が

分かったとする

-4 -3 10 3 -9 5 23 -8

min-max法

二手先の評価値は

それぞれの最大値となる

-4 -3 10 3 -9 5 23 -8

-3 10 5 23

min-max法

一手先の評価値は

それぞれの最小値となる

-4 -3 10 3 -9 5 23 -8

-3 10

5

23

-3

5

min-max法

最大の評価値となる

手を選ぶ

-4 -3 10 3 -9 5 23 -8

-3 10

5

23

-3

5

5

min-max法

• 原理的にはこれでN手先に評価が最大になる手を指すことができる

• 終局まで読み切れば、理論的には必勝法を作ることができる

• 現実には全ての手を読んでいたら時間が足りなくなる

min-max法

• 計算量低減について様々な手法が考案されているが、ここではふれない

• 探索局面を減らすことによる計算量の低減を枝刈りという

• 全ての手を読んだのと全く等価の枝刈りもあれば、ほぼ等価の枝刈りもあれば、近似の強引な枝刈りもある

min-max法のまとめ

• 木構造を使って読む• 途中(N手先)の局面評価が必要

• 枝刈りが必要

モンテカルロ法

• 数学的にはいろいろと歴史があるようだが思考ゲームの世界ではコンピュータ囲碁で成功した手法

• コンピュータ囲碁はこの手法で爆発的に強くなった(正確には「モンテカルロ木探索」で強くなった)

• 将棋にはまだ適していないといわれる

モンテカルロ法概略1

• 全くランダムに手を進める

• そうすると終局する→勝敗が分かる

• ランダムに手を進めて終局させることを「プレイアウト」という

最初の手

終局結果

プレイアウト

ランダムな着手

モンテカルロ法概略2

• プレイアウトを何度も繰り返す

• 最初の手に対する勝率が分かる

• (勝数)/(プレイアウト数)

• 勝率のよい手を最終的に選ぶ

モンテカルロ法概略3

• 簡単すぎるかもしれないが、概略はこれだけ

• これに木探索を混ぜて「モンテカルロ木探索」をしたら強くなった(が、その説明はしない)

• また、プレイアウトを単純乱数ではなく、囲碁の知識にそったものにするという改良も加えられる

知識ありプレイアウトの例

• 例えば、周囲3×3を見る

• 上の図の中央に黒石を打つ割合を低くする

• 下の図の中央に黒石を打つ割合を高くする

将棋でモンテカルロ

• ここまでは囲碁の例• 将棋に単純なモンテカルロ法を適用しよう

とするとまともに動かない(明らかな悪手ばかりを指す)

• 原因として、将棋の合法手はほとんどが悪手だからではないかと考えられる

• かといって、最初から知識を植えつけておくのは(私としては)気持ち悪い

将棋でモンテカルロ導入動機

• 投了図から次の一手を計算することができるのが最大の美点(投了図から逆算すべし!)

• 評価関数が要らない(単純モンテカルロなら、事前知識も要らない)

• プレイアウト数が増えるほど精度が増すので、マシンパワーを高めれば勝手に強くなる(ように工夫すべし)

木構造からモンテを考察1

全くランダムだと

赤も緑も勝率は同じ

本当は緑が勝ちで赤が負け木構造を見ることの重要さが分かる

木構造からモンテを考察2

三手先の勝率が理想的に

分かったとする

0.1 0.3 0.7 0.8 0.2 0.6 0.9 0.4

この値から赤と緑の勝率を計算したいしかも、プレイアウトで

木構造からモンテを考察3

理想的には m

in-max

同じ値となる

0.1 0.3 0.7 0.8 0.2 0.6 0.9 0.4

0.3 0.8 0.6 0.9

0.3 0.6

木構造からモンテを考察4

• Q:下のノードの0.2と0.6から上のノードの0.6をプレイアウトで計算するにはどうするか?

• A:0.2を無視する

0.2 0.6

0.6

木構造からモンテを考察5

• Q:0.2を無視するには?

• A1:常に勝率が最大のノードを探索していればいい(事前知識ありの極端な例のような感じ)

• A2:ただし、たまにランダムに勝率が最大でないノードも探索する

0.2 0.6

0.6

木構造からモンテを考察6

勝率の高い方を

常に選択して探索

0.1 0.3 0.7 0.8 0.2 0.6 0.9 0.4

ひとりでにこの道筋が見つかる

勝率優先探索

• 探索したことのある局面について勝率を保持しておく

• ほぼ常に勝率が最大(または最小)のノードを選んでたどる

• たまにランダムにノードをたどる(理想的にはこれは必要ないが)

• 最善の次の一手が見つかる

勝率優先探索の補足

• 保持されている勝率はプレイアウトごとに随時更新する

• 勝率として分母と分子を保持しておく• 勝ったら分母分子両方に定数を足す• 負けたら分母のみに定数を足す

勝率優先探索の問題点

• 未探索ノードの勝率の設定(以下、これについて語る)

• その他いろいろ(これは語らない)

未探索ノード

• まだ勝率のついていないノードが存在する

• 勝率の初期値は1/1=1としていたが、これでは収束が遅くなる

• 未探索ノードにも勝率がほしい

0.4 0.6 0.3未探索

別の勝率テーブル

• ここまで将棋ならではの知識はまったく出てこなかったが、ようやく将棋の知識を使う

• ノードではなく、「指し手の種類」に対して勝率を出す

• 例えば、「取る手」「成る手」など

今回使用した勝率テーブル1

• 次の項目について勝率を出した–移動元と移動先の駒の位置– 動かす駒の種類と取る駒の種類–移動元と移動先の利き

• これらについて(線形結合ではなく)全ての場合のテーブルを用意した

• このテーブルは最初から値を用意しておくのではなく、プレイアウトによってゼロから学習する

今回使用した勝率テーブル2

• もう一つ勝率テーブルを用意した– 動かす駒の種類と取る駒の種類–移動元と移動先の利き

• このテーブルは小さいので、学習が速い• 「テーブル1」に勝率がついていないときに

使用• どのテーブルにも勝率がついていない場合

は、勝率=1とした

手法のまとめ

• 探索したノード全てに対して勝率を保持しておく(この勝率はプレイアウトによって学習する)

• プレイアウト中は最も高い勝率のノードを選ぶ(勝率優先探索)

• たまに勝率に関わらずランダムにノードを選ぶ

• 未探索ノードの勝率は、指し手に対する勝率に従う(これもプレイアウトで学習する)

シミュレーション条件

• 原始的なmin-max法と対戦させた(評価関数は駒割のみ)

• 千日手の判定はせず、80手を越えたら引き分けとした

シミュレーション結果1

プレイアウト数 10000 30000 100000

提案手法が先手 22-76 44-52 48-49

提案手法が後手 16-81 30-68 61-35

100局対戦したときの提案手法から見た勝敗100に満たない分は、引き分けMin-maxは6手読みプレイアウト数を増やすと強くなる

シミュレーション結果2

100局対戦したときの提案手法から見た勝敗100に満たない分は、引き分け提案手法のプレイアウト数は100000回min-max6手読みといい勝負

min-maxの読み 4手 5手 6手 7手 8手 9手

提案手法が先手 94-6 77-20 48-49 37-61 24-73 14-85

提案手法が後手 78-21 78-20 61-35 38-57 40-52 20-74

対局を見た感想

• しばしば明らかな悪手を指す(min-max6手読みあたりから、悪手が挽回できなくなる)

• 詰みや必至がある場合にはちゃんと見つけてくれる

• 一本道の読みは得意• プレイアウト数によって明らかに強さに差が

出る

まとめ

• まとめ– 勝率優先でプレイアウト–事前知識ほとんどなしで指し手を決定–終局結果から指し手を決定

• 今後–誰か本将棋や5五将棋で試してください–誰か囲碁で試してください–私はほかのことをする

top related