将棋方程式を発見した!(0)


将棋方程式を発見した!(3)を書く前に、ひとつ、お断りしておくことがある。


コンピュータ将棋の評価関数に正解は無いと言うことだ。
制作者がどのように将棋をとらえ、どのように評価関数を作成しても自由である。


しかし、なるべく正確に将棋というゲームの性質をとらえて、緻密にモデル化したほうが強い将棋プログラムが出来る可能性は高まる。ただし、そのための計算量が大幅に増えてはいけない。計算量が大幅に増えるなら、単純な評価関数で先読み出来る手数を伸ばしたほうがよっぽどいいからである。


そのへんのバランスが実に難しい。探索手法と評価関数の精度と速度とが三位一体となって、将棋プログラムとして強いか弱いかが決まる。


また、コンピュータの先読みさせる手数によっても良い評価関数の基準は変わってくる。無限に先読みできるなら、詰みか詰みでないかの判定を行なう評価関数(?)だけあれば良い。逆に3手しか先読みできないなら、「飛車が詰んでいて取られそう」だとかその手の評価もしないと大駒をすぐにとられてしまうだろう。(初期の金沢将棋がそうだった)


この連載では、プロ棋士のトップに勝てるコンピュータ将棋を製作することを前提に考えている。3,4年後のコンピュータ(FPGAか?)を想定している。つまり、読みの性能としては、100Mnpsぐらいで、全幅14手 (+ 詰め将棋や詰めろ探索のための延長 8手〜16手) (+ 静止評価のための延長 5手)ぐらい先読みすることの出来るコンピュータがあると仮定して考えている。だから評価関数はそれなりに凝ったものにしても良いと言う前提に立って話している。


コンピュータ将棋の制作者は、マシンスピードの向上とともに、評価関数を先読みする手数に合わせて何度も何度も練り直している。AI将棋3を現在の最新のパソコンで動かしてもそんなに強くはない。これは長手数の先読みに対応するような評価関数にチューンされていないためである。


だから、この連載で「こういうモデル化は正しくない」だとか「こういう評価関数にはしてはならない」と書いてあったとしても、それは「将来私が作ろうと考えている3,4年先のコンピュータ用のコンピュータ将棋では、こう出来ればいいね」という程度の話であって、現在の最新のパソコンにとっては私が「してはならない」と書いてある実装のほうが好ましい場合も当然ある。私が書いているのは、(現在のコンピュータでは実現できる保証はない)理想論だと思っていただきたい。


コンピュータ将棋の黎明期、コンピュータ将棋の代名詞と言えば「森田将棋」であった。作者の森田氏は、当初、(いまの用語で言うところの)ファジー理論のようなもので評価関数を作ろうとしていた。*1 だけど、当時のコンピュータにそぐわない(「自分がやろうとすると10年ぐらいかかる」と書いてあったと思う。)ので、それはやらなかったらしい。私には、ある意味、それが森田将棋の成功の秘訣だったように思う。

*1:当時のマイコンBasicマガジンのコラムでその話が書かれていた。