昨日の記事でONE_PLY(1手の深さ)を1以外にする話が出たが、これが理解できない人が大半だということにいまさらながら気づいた。
ONE_PLYというのは1手の深さのことである。仮にONE_PLY=2にしたときの1という深さは、0.5手を意味することになるわけだろ?0.5手みたいなものがあるのか?
結論から言うと、0.5手はある。
古くはYSSの山下さんが卒業論文で「0.5手延長」とか言い出したあたりにまで遡る。いや、歴史的にはそれより遥か昔になるのかも知れん。
何故0.5手みたいなものが必要なのか?それは空想上の概念なのか?
そうではない。
「王手の指し手を調べていくときは、0.5手延長する」というルールを定めたとしよう。
王手→王手回避→王手→王手回避
のように2回王手をした場合、0.5手延長×2になるので1手延長である。そこで、本来なら、4手の深さまでしか読まないところ、その指し手の変化については、5手の深さまで読むわけだ。
これが王手延長という考え方である。
昔のソフトは無駄に王手をして、都合の悪い変化を自分の読みの深さの外側に追いやってしまう(水平線効果)ことが多かったが、王手を延長することでその現象を少しだけ回避することが出来るし、王手をすることで詰むこともあるわけで、王手絡みの指し手を重点的に読むという意味もある。
そんなわけで「0.5手延長」みたいなことをしようと思ったときに、ONE_PLY = 1だとまずいわけだ。この場合だとONE_PLY = 2になっていれば、0.5手延長は、残り探索深さに1を足すだけで良い。具体的には次のようなプログラムになる。
1 2 3 4 5 |
// check extension(王手延長) // もし王手の指し手であるなら残り探索深さに0.5手を加算する。 if (pos.gives_check(m)) depth += ONE_PLY/2; |
こういうことをしようと思うとONE_PLY = 1だとまずいわけであるな。
しかし現在では王手延長は、0.5手ではなく1手延長のほうが主流なので、0.5手の延長が出来る必要はなく、ONE_PLY = 1でも(王手延長に関しては)問題とならない。
公開されているフリーの将棋ソフトって、王手千日手(反則)をやるのがたまに有りますが、回避プログラムは難しいんでしょうか?
どうでもいいことなんですが、技巧が公開される前の村山慈明7段の棋譜を技巧で解析したら、攻め筋と攻めのタイミングが妙に一致率が高かった。
これ以降、村山慈明7段が技巧にしか見えなくなりました。
連続王手の千日手、回避するコードを書くのわりと面倒ですね。連続王手の千日手はチェスにはない概念なので、Stockfishのコードにはそれが含まれていないので、Stockfishを参考にする場合でも、自ら実装しないといけない部分でもありますし。
>『技巧』ではONE_PLYは64
ONE_PLY を 2でも4でもなく、64 にする意味はあるのでしょうか?
人間のチェスでは、白黒両方指して1手と数えると記憶しています。人間の数え方にあわせてONE_PLY =2から始まったが、これだと、depth=2,4,6…となり、例えば、depth=15 で良い場合でも 16 まで読む。なので、ONE_PLY =1だとdepth=15 で読みを打ち切れるので”速い”という事でしょうか。
> ONE_PLY を 2でも4でもなく、64 にする意味はあるのでしょうか?
最小で1/64手が表現できます。王手延長のときに0.5手ではなく43/60手だけ延長するだとか、細かなコントロールが出来るようになります。
> 人間のチェスでは、白黒両方指して1手と数えると記憶しています。
game plyをそう数えることはありますが、ここでの話とは関係ないです。
43/64 と 44/64 に違いがあるかもしれないという設計思想(?)なのですね。これが、
>さすがチューニングの鬼と言ったところか。
につながるのか。。。
この違いを有意に検出しようとすると、対局数が100万局でも足りない気がします。(根拠はありません。)
> この違いを有意に検出しようとすると
まあ、勝率に直接響くようなパラメーターなら1万局もやればそこそこ調整は出来ますので…。
割とどうでもよいことかもしれませんが、ブログトップに全文掲載されているのは趣旨替えしたんですか?
続きを読むにするの忘れてました丸
さっぱりわからない
自分の理解
将棋ソフトは基本的に幅優先探索で1手づつ探索しているが、特定の指し手は他の手よりも価値が高い可能性が高いのでそういう手に限定して優先的に深く読みたい
そこで、特定の手を0.5手として扱うことでその手を優先的に深く読むようにしている
例えば王手回避が0.5手で10手先まで読むとすると、普通の手は10手先までしか読まないのに対して、詰み手順(連続王手)は13手先まで優先して読む
技巧はどの手を優先して読むかの調整が異常に細かくされている
この理解だと王手延長は1手のところが意味不明になるのが難点、ソースコードを読めということでしょうか
そこまでは完璧で、正しい理解です。その先があります。詳しくは明日の記事で。