KKPとKPPのこと

一日考えてみて、どうもBonanza6からKKPの値を抽出するコードは合ってるんじゃないかと思うに至りました。

問題点を簡単に整理しますと、例えば先手が居飛車穴熊に組むとします。99に自玉があります。このとき、自駒の金を自陣のどこに配置するのが評価値の点数が最大になるかという問題です。

一番働いている場所は88であることに異論はないでしょう。敵が上からでも右上からでも右からでも、どこから攻撃してきても働くからです。

決して79ではないです。79だと87桂で両取りがかかりますし、87とか97とか上部から抑えこまれても嫌です。

銀はどこにあるのが一番働くのかというと、銀の場合もおそらく88でしょう。79ではないはずです。79だとさきほどと同じ理屈によりマイナスです。

ところが穴熊の形としては、88銀〜79金型が良いわけです。これはKKP(KP)的に良いのではなく、88銀と79金という連携の良さがKPP的(KKPではなく!)に良いからです。

ゆえに、この形をコンピューターに選ばせようと思うと、KKPではどうやっても不可能でKPPでなければならないことがわかります。

ではKPでこの形を学習できないのかというと学習は一応できます。99玉〜79金型に加点するわけです。しかし79金に加点してしまいますと、88金より79金のほうがいいことになりかねず、これは明らかに無理のある評価点数です。

穴熊戦のときは確かにこの評価関数でも88銀〜79金と囲うでしょうけども、それは意味がわかって囲っているのではなく、79金に金が置いてあるほうが働いていると思ってここに移動させているだけですので、終盤の小競り合いで88に置くべき金を79に好んで移動させたりして負けかねません。

要するにKPという評価関数は、結構無理があることは明らかです。

それで私は初代BonanzaKKP相当ぐらいじゃないかと思っていたのですが、うさ親さんからコメント欄でBonanzaのGPW2006の発表資料に特徴因子が書いてあるとの指摘を受けまして、「あーそう言えば書いてあったなー」と思って読み直したら、KKP以外にもいろいろと怪しげな特徴因子がありました。

結局のところ、KKPだけではR2150〜R2200程度(floodgateに投入したzattai-bonanzaのレーティングからすると)、KKP+α(初代Bonanza)ではR2400程度、KPP(Bonanza 4以降)でR2600程度ではないかと勝手に思いました。

だいたいの目安がわかったので、棋譜からの学習でKKPのパラメータを作る必要がなくなりました。また、KKPだとR2200ぐらいが限界だとわかったので、もうちょっとマシな評価関数を設計しなくてはなりませんね。