アッラーの御名において、Stand-Patは気持ち悪い
先週の記事を書いたところ西村さんからご指摘をいただきまして。もう少しコメントします。
まず「静止探索」という用語ですが、私は単に一般的に「末端を安定した局面にする手法の総称」という意味で使ってます。ですが、西村さん記事を見て、Stand-Patを使う手法がもしかして一般的で、静止探索といえば普通こちらを指すのかな、と気になったので、以下ではこちらは「Stand-Pat方式」と呼んでおきます。
私のやってる(広義の)静止探索は、最初の記事に書いたとおり、通常探索と手生成の幅以外まったく変わりません。パスは2連続してはじめて末端になります。ですが西村さん記事を見ると、Stand-Pat方式ではパス1回で末端にしてることと等価、と思えます。(私はStand-Patのことを読んだのはだいぶ前で、ろくに覚えてませんが。勘違いしてたらご容赦。)で、先週の記事は、私の流儀を前提に書いてる、ということでご理解ください。
最初にDeep Purpleを作りはじめたとき、静止探索の手法も検討したはずですが、たしかそのときは検討したけど「何か変」とか思ってStandPatはやめた、と記憶してます。私は世の中のやり方に従うより「原理原則に照らして、本来どうあるべきか」と考えてしまう「原理主義者」なもので。
StandPat方式で、たとえば読み技23図△2五桂のあとでパスして末端、とする理由は、推察するに「▲3八馬みたいな応手がたぶんあるだろう。あると仮定しよう。また、細かい位置関係(馬が3七か3八か)は無視して駒の損得だけ考えることにすれば、3七馬の状態で評価したっていいはずだよね」なんだろうと思います。でもこれやっぱ変ですよね。駒が詰まされてたり両取りだったりして、うまい応手がないこともあるし。また、たとえば先手が2八玉、3七金とあるようなときに△2五桂が来たとして、金が3八へ引くか2六に出るしかないか、によって評価値はだいぶ変わる。3七で評価していいの?とか。
と言いつつも、ハードで作ると「応手」を生成するのがけっこう難しいので、StandPatも少し検討してみました。パス1回で末端にするのは簡単だったので実装してみて。あと先週書いた「打ち以外のみ生成」も実装したので、全幅1手+打ち以外1手+静止4手、の設定にして、「パス1回で末端(≒StandPat?)」と「2連パスで末端」とを両方読み技25題regressionして比較。手が変わるものもありますが、同じ手を返した問題どうしを比べると、2連パス末端の方が1.3~2倍くらいノード数が増えました。うーんこれはたしかに大きいのですが。
手が変わった中では、先週も出した23図でStandPatの方は▲6四馬、となりました。相手玉近くに利きが増えるのと、次△2七歩成を比べて、歩成の効果の方が小さいというのはまあチューニング不十分ですが、2八飛が詰んでることに気づかないのは致命的。StandPatだとここでパスして終わり、ですから。対して2連パスの方は▲3八馬になりました。△2五桂をあらかじめ避けたんでしょう。今回は2手めに打ちがないので、△6五歩の心配がなく、歩損がなくなったようです。
ノード数と悪手回避とどちらをとるか、ですが、この例見るかぎり私としては、んーやはりStandPatをやる気はしないな、と思ってしまうんですが。
静止探索の具体的手法って、強さに直結する割にはあまり議論されてないような気がするんですが、気のせい?探索がαβかPVSか、とかよりもよっぽどクリティカルだと思うのですが。理論化とかがしづらく議論しにくい話題なのか、それとも皆さんノウハウで外に出さないのでしょうか。
« Bugじゃない、Featureだ! | トップページ | AlteraさんAlteraさん、どうなってるんでつか? »
「将棋プロセサ」カテゴリの記事
- ボンクラーズの開発過程について書いた記事が掲載されました(2019.03.07)
- 「浅い評価値を深い評価値に近づける学習法」誕生の背景(2016.10.06)
- 塚田九段の対ボンクラーズ練習棋譜を公開します(2013.09.07)
- Puella α ソース公開(2013.08.28)
- クラスタ並列の解説記事を公開します(2013.08.22)
コメント
トラックバック
この記事へのトラックバック一覧です: アッラーの御名において、Stand-Patは気持ち悪い:
» [コンピュータ将棋]GA将!!!的には、Stand Patは“何となく”気持ち悪い [GA将!!! 作ってます]
http://aleag.cocolog-nifty.com/blog/2008/02/bugfeature_9888.html http://chocobo.yasuda-u.ac.jp/~nisimura/mymove/index.cgi?no=1057 http://aleag.cocolog-nifty.com/blog/2008/02/standpat_9ab2.html http://d.hatena.ne.jp/mkomiya/20080211/1202686964 ... [続きを読む]
« Bugじゃない、Featureだ! | トップページ | AlteraさんAlteraさん、どうなってるんでつか? »
FPGAに実装しやすいかどうか分かりませんが…
パスしたら、StandPatでその場の評価値を返す代わりに、『相手に自由に一手指させてみた』評価値を返すとか、『相手の指し手に応じた適当なペナルティー』を返すだけでも十分な効果があるのでは?
<ちなみに『れさぴょん』は前者に、『うさぴょん』は後者に近い方法です。
投稿: うさぴょんの育ての親 | 2008年3月 2日 (日) 11時24分
サジェスチョンありがとうございます。
「相手の指し手に応じた適当なペナルティー」はハードでは難しそうですが、「相手に自由に一手指させてみた評価値」はまあできそうと思います。これは、パス後1手で末端として、2手め以降はサーチしない、ということですよね。相手に有利めに読むわけですが、趣旨としてはわかる気がします。検討する価値ありそうです。
投稿: 伊藤 | 2008年3月 2日 (日) 19時24分
…あれれ、待てよ?読み技6図で脳内SIMLすると、全幅2手だと▲7七銀、△4九角のあと▲パス、△3八角成、で評価しちゃうか?これだと結局▲3二飛成で自爆しそうですね。
やっぱ、ノード数減らすとそれなりに読みの精度は下がる、ノード数と精度とのトレードオフでどこで妥協するか、なのかな…
投稿: 伊藤 | 2008年3月 3日 (月) 19時49分
うーん。
FPGAで、SEEは盤面全体で計算がすぐ出来るのなら、静止探索内で『パス』したら相手から見た一番でかいSEEを持つ手を指されたことにして、その分を引いておく、とかでバランス的にどうですかね?
<たとえば、TACOSって、SEEの75%の値を引くとかやってたような。…うろ覚え。
『静止探索』で、取る手・成る手のみ生成してPASS-PASSで終端だと色々まずいことが起きるのは…うさぴょんの前に鈴木将棋を作成してた時に経験しました(--;
#互いにほとんど自爆気味にメチャクチャな駒の取り合いをした評価値が帰って来ました…(--;
投稿: うさぴょんの育ての親 | 2008年3月 4日 (火) 00時25分