とりあえず、55将棋に絞って話を進める。55将棋では駒は12枚しかない。K(King)を除くと、10枚しかない。
つまり、KKPPのような4駒関係の評価関数を考えたとしても10×9=90回のテーブル参照で済む。
問題は、このときのテーブルサイズである。
・歩の存在する位置 = (盤上20升 + 手駒最大2枚 + 成りで盤上25升)×先後 = 94通り
・銀・角・飛車の存在する位置 = (盤上25升 + 成りで盤上25升)×先後 = 100通り
・金の存在する位置 = (盤上25升)×先後 = 50通り
2016/11/25 0:00追記。銀・角・飛車・金の手駒最大2枚というのを入れ忘れていました。まあ誤差なので以下の記事の修正はしません。
P = 94 + 100×3 + 50 = 444通り。
KKPP = 25×25×444×444×sizeof(int16_t) ≒ 235MB
手番を入れてもこの倍。どうにか収まる。
Pが動いたときは差分計算で済むが、それをしなくとも90回のテーブル参照ぐらいどうということはない。
KKPPよりはKPPPのほうが表現力が高いので、こちらの場合も考えよう。
KPPP = 25×444×444×444×sizeof(int16_t) ≒ 4.075GB
やや厳しいがメモリに入らなくはないし、学習も32GB搭載のPCで出来なくはない範囲。
KPPPよりはKKPPPの5駒関係のほうが遥かに表現力が高いので、出来るならこちらを採用したい。差分計算をしなくとも10×9×8=720回のテーブル参照で済むものなので、差分計算をしても10%ぐらいの高速化しかしない。差分計算をしなくていいなら実装面で楽である。
KKPPP = 25×25×444×444×444×sizeof(int16_t) ≒ 101.9GB
Kはミラーを考慮すると3/5で済むし、PPPは三角配列を使えば1/3! = 1/6程度で済む。
そう考えると3/5×1/6=1/10で済むから、これは10GB強で済むことになる。
学習には最低でも64GBメモリの搭載が必須になるが、不可能ではない。あまりやりたくはないが、出来なくはない。
KKPPPは、KKPP型に比べるとR500か1000ぐらい高くなっても不思議ではない。55将棋の先手の必勝定跡が誕生するかも知れない。
しかしそれには教師局面が桁違いに必要で、学習に要する計算資源も桁違いに必要だ。教師局面ファイルを保存するストレージ、バージョンごとの評価関数を保存しておくストレージも相当必要だ。
これはやりたいと思うものの、着手するには、まだ数年早いような気がする。
結局、いまはKKPPで妥協するしかないのだろう。少し物足りないが、KKPPP型の55将棋ソフトが出てくるまでは最強の座は譲らない。おそらく、従来の55将棋(誰が作ってるのかは知らん)と比べてR500〜1000ぐらい強いところまでは持っていける。
他にはPPAP型評価関数というのを考えたのだが…。
将棋の評価関数において、将棋で一番多い駒は歩だから、KPP(King-Piece-Piece)より、PPと歩(Pawn)との関係も見たほうが良いはずで、PPAP(Piece-Piece And Pawn)型評価関数というのを考えたのだが、これ、来年の今頃言ったら絶対すべるやつや!
— やねうら王 (@yaneuraou) November 24, 2016
私はわりと本気でPPAP型評価関数がベストではないかと思っているのだが、誰も賛同はしてくれそうにはない。
いつも(分からないなりに;)楽しく拝見しております。将棋は玉を詰ますゲームなので、KP、KPP、KKPとか少なくとも1つはKが入らないとと感じるのですが。。。ところで、(どこかに書いてるのかもしれませんが)駒全部の配置局面を3駒、4駒関係の総和で表せるというのは最初は誰がどういう発想で考え出したのでしょうか?チェスから?とか。あと55将棋の棋譜が無いと55将棋の学習は出来ないという理解で合ってますでしょうか?普通の99将棋の部分局面として切り出せないというのも不思議な感じがします。切りだせると思う方が不思議なのかもしれませんが。以上、コンピュータ将棋には興味有るけど知識が無いので素人質問コメントですいません。
> KP、KPP、KKPとか少なくとも1つはKが入らないとと感じるのですが。。。
はい、そうですね。KPP + PPAPとか。
> 駒全部の配置局面を3駒、4駒関係の総和で表せるというのは最初は誰がどういう発想で考え出したのでしょうか?
2駒関係で表現する、あるいは1駒関係(盤上に重力場のようなものを想定する)というのは、森田将棋のころからありますね。その起源を辿ると谷川浩司会長の『将棋に勝つ考え方』(1982年)あたりまで行くのではないでしょうか。
また、3駒関係で表現して強い将棋ソフトにしたのはBonanzaが最初でしょうけども3駒関係自体は先行事例があったはず…。
> あと55将棋の棋譜が無いと55将棋の学習は出来ないという理解で合ってますでしょうか?
強化学習を用います。自ら探索して教師棋譜を作ります。やねうら王手将棋のほうもそうやっています。
> 普通の99将棋の部分局面として切り出せないというのも不思議な感じがします。
今回のUECの55将棋大会でやねうら王を改造して55将棋ソフトにした人は、本将棋の評価関数を変形して流用したようですね。ただ、55将棋専用の評価関数と比べると弱いそうですが。まあ55将棋では歩が成れる升が1段目に限られますから、王に対する歩の位置関係による良さというのもずいぶん変わってくるでしょうし…。
早々と詳しい回答ありがとうございました。『将棋に勝つ考え方』(1982年)は週末に本屋で探して読んでみます。
追加で疑問が出てきたのですが、プロ棋戦の棋譜からスタートし強化学習して得られた評価関数と最初から強化学習のみで作っていく評価関数は同じ関数に収束していくものなのでしょうか?あるいは最初が違うとかなり違った方向に進むのでしょうか?教えていただければ幸いです。
> あるいは最初が違うとかなり違った方向に進むのでしょうか?
3駒型の評価関数の表現力の限界がありますから、その制約があるなかで最強のものに近づけようとしていくと結局は同じような棋風に行き着くと私は考えています。
PPAP評価関数は、かなり相対的な感じになりそうですね。勘ですけど。
KPPは割と絶対値のような風格を感じます。
PPAPはテーブルがデカくなりそうでちょっと複雑な気がするんですけど、対策とかあるんですか?
> PPAPはテーブルがデカくなりそうで
どんな計算で?
基本的に勘ですが、考え直したらKPPと変わらないかもですね。
その代わりポーンがたくさんあるので計算リソース食いそうかもと思い始めました。
ポーンポーンあんどピースも含んでいるのですか?
> その代わりポーンがたくさんあるので計算リソース食いそうかも
それはまたどんな計算で?
> ポーンポーンあんどピースも含んでいるのですか?
そのへんは工夫次第でしょうね…。
勘です。雑感としてそんな気がしました。Orz
ポーンの方がキングより多いので、PPaPはKPPの9倍必要なのでは。
PPaPでそっぽの端歩の価値を理解できればすごいですが、、、
それより、大駒を序中盤で詰められないように、
KPP RPP BPPの3倍化の方が簡単そうですが、大ゴマ切って強襲するスジを避けるようになっちゃいますかね。
> ポーンの方がキングより多いので、PPaPはKPPの9倍必要なのでは。
愚直にやるとそうなりますが、実際はそういう実装の仕方はしませんので…。
玉の逃げやすさみたいなもの
すなわち玉の周りに相手駒の利きが無いスペースとか
はどうでしょうか
そこに駒があればKPPのPとして足し合わされますから、スペース自体は間接的にはKPPで表現出来ていると考えられます。
スマホ版を作るとしたらツールは何を選びますか?
やっぱり今注目のXamarinですか(?_?)
それともブラウザ版も考慮してReact Nativeとかもアリですか?
React Native、スマホで動かしたときの動作が不評なのでスマホのほうはUnityとかで作って、ブラウザ版は別途作ったほうがいいかと思ってます。