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

yaneurao2008-04-14



前回までで思考するための道具が揃ってきたので、「何故、人間は矢倉囲いに囲えるのか?」という当初の問題について、もう少し突っ込んで考察して行かなければならない。


将棋世界 2008年 05月号 [雑誌]
右図は、今月号の将棋世界に載っている羽生-谷川戦の局面。見ての通り、角換り腰掛け銀で先手が右玉に囲ったものを中住まいに戻したところ。

マチュアの初段ぐらいまでの人は、後手は矢倉の堅陣で、先手の玉はいかにも薄いので後手有利かと思うかも知れない。しかし、プロの視点では、先手の形が良すぎるので先手持ちだと言う。このあとの進行も、先手は4一角と打ち込み、後手が暴れるのを手なりで受け止めそのまま勝利してしまった。(詳しくは今月号の将棋世界をご覧あれ。)

果たして、現代のコンピュータ将棋(or コンピュータ将棋開発車ならば、「あなたの作っているコンピュータ将棋で」)において―――


・この局面を先手持ちだと判断出来るだろうか?
・出来ないとすれば、何手先まで読めばこの局面が先手持ちだとわかるだろうか?
・先手の囲いのバランスの良さを正しく評価するにはどのような評価関数が考えられるだろうか?


コンピュータ将棋をプロレベルに到達させたいなら、この局面を先手持ちだと判断出来ることが大切だと私は考える。この局面を先手持ちだと判断出来ないような評価関数にはしたくない。


ちなみに、コンピュータ将棋開発者は、必ずこういう懸案の局面をいくつも頭のなかに抱えている。だけど、すべての懸案の局面がうまく解決出来るような評価関数を作ることはとても難しく、ある程度、妥協の上で評価関数を作り、あとはコンピュータの先読みする力に頼ってなんとかなればと願っている。


ここまでで、わかることは、


・矢倉だから堅いのではなく、相手の囲いとの相対的な関係において、堅さが決定される

と言うことである。決して、矢倉 = 堅さの数値100 , 中住まい = 堅さの数値120だから、矢倉より中住まいのほうが堅いよね、という比較では決してない。相手の形を見ずに堅陣に囲えばそれでいいというものではないのである。


将棋の囲いや攻めにはジャンケンのような関係が存在することがある。例えば、スタンダードな角換り戦型(飛車先を突き越している形)における、腰掛け銀に対する早繰り銀、早繰り銀に対する棒銀棒銀に対する腰掛け銀。


コンピュータ将棋でも初期のころには矢倉に囲わせるために数年前には落とし穴方式と言って、矢倉の形になれば評価値を加点するというのが流行った。


例えば、GA将!!!の作者のblogでもこの方式を実装したときの話が書かれている。


【開発日記:6月24日】囲い用絶対テーブル(超簡易版)の実装完了
http://streakeagle.blog15.fc2.com/blog-entry-563.html


この方式は、確かに囲いを組むには組むのだが、そこで加点してしまうことに問題がある。囲いというのは無数にあって、登録されている形にのみ加点するのでは不公平である。(加点されないけどいい囲いというのが存在すると、そこで形勢判断を誤ってしまう) また、相手との囲いとの相対的な関係で加点しているわけではないので、この意味でも正しく機能しないことがあることは明らかである。


だからと言って、他にやりようが難しいのも事実で、組み上がってしばらくすれば矢倉のための加点を0にするなどの方法が考えられるが、これもあまり良いモデル化とは言えなくて、この部分は、そのような手心は加えずに正しく評価されて欲しいのである。


そこで、Bonanzaのように部分的な形に対する評価値を棋譜から学習させられれば、矢倉や穴熊に自然に組んでくれるようになるが、囲いの相対的な堅さを理解しているわけではないので、やはり今日の問題の局面などはうまく判断出来ないのである。


それで、「人間は何故、矢倉にうまく囲えるんだろねぇ」と言う最初の話が出てくるのだが…。