読者です 読者をやめる 読者になる 読者になる

Aestetica

コンピュータ将棋Selene(セレネ)を作っています。名前は西海枝昌彦(さいかいし まさひこ)と読みます。

さらにいろいろ見てみた

ただでさえいろいろとあるのに、ドラマの「大奥」のDVDを借りてきて見ちゃったよ・・。
面白いわ・・。やだわあ・・。


開発の経過。
私は外枠から埋めていくタイプなので、探索以外のところ、盤面と指し手生成と評価値とかそのへんがじわじわできてきた。
作り方はみんなそうか。
並列探索を行うところをStockfishと同じにしようとすると、スレッドのところから探索の最初の部分がどんどんまったく同じになってしまうので、作り直しているのだけれど、もういいかとあきらめて、スレッドの仕組み・構成は同じになりそう。
探索のところを学習可能なところまで持って行って、一回まわしたいのだけど。

で、Aperyを読んでみた。前回は評価値のところと学習のところを数分くらい見ただけだったけれども、今度はちゃんと見てみると、AWAKE風の利きを学習するところの種類が半端ない。
玉と駒と利き、玉と利きと利き、玉と駒と相対位置、駒と利き、利きと利き、等々、学習のupdateにめちゃくちゃ時間かかりそう。
探索はほぼ最新のStockfishと同等。

それと、やねうら王の将棋フレームワークも読んでみた。
こちらも忠実にStockfishの移植をしたもの。学習部分が無いのと、探索のソース中にも学習に対応した箇所が無い(例えば置換表を使用しないなど)ので、評価値のバイナリは別で作ったもの?Aperyのバイナリなのかな?
なんか、めちゃくちゃな量の詳しい説明がコメントで入っていて、探索のアルゴリズムに興味はあるけど、プログラムはちょっと・・みたいな人は、こちらのコメントだけ読んでいけばいい感じ。

探索アルゴリズム中のパラメータについて、対戦させて自動で最適なものを見つけるようになっていて、このあたりは数年前からSeleneで採用している形式。Seleneの場合は完全ランダムではなくて、有効なパラメータをデータベースに取っておいて、次から参照して同じ方向にもっていく(マージンにプラスしたらよかった場合、さらにプラスさせる)とか、ひとつのパラメータだけを変えるものと複数を突然変異させたものを対戦させるとか、なんちゃって遺伝的アルゴリズム風にしていた。あとはパラメータだけではなく、アルゴリズムの使用・不使用、選択もか。

うーん。やはり流行りはStockfish+AWAKE形式で、それ以外全滅。みたいな感じだなあ。巨瀬さんがすごいわ。
これら、コンピュータ将棋協会のライブラリにしちゃっていいのかどうか若干不安になる(笑)Stockfish作者の許可とかいらないのかな。
技巧もオープンソース化するとのことで、これからは技巧が主流になるかも?そうそうに切り上げて、NDF形式の学習を始めることでさらに+200~+300とかかな。そうこうしているうちに、Stockfishが新しくなるので、取り入れればさらに+100とか。
何度も書くけど、もう、個人でやるにはStockfishの進化に追い付かないです・・。

ということは、勝ちたいんだったら探索はStockfish固定でAWAKE、NDF形式にするか技巧にするか。個性を出したいんだったら、やはり強化学習路線を続けるしかないかなあ。
数年やってきて、現状の方法だと将棋のような複雑な情報を持つもの。「複雑な」というのは盤面を動かしてみないと、つまり読みを入れないと判断がつかないようなもので、かつ正解が非常に少ないものについては、基本がランダムでそれを効率化させたようなアルゴリズムでは到達するのに非常に時間がかかりすぎて、現実的な時間では到達不可能。なんらかの方向性を仕組んでおかないとダメなのかなあ。と、思っています。
それが方策?だとすると、どういう方策にしたらいいかが難しい。

アルファ碁も、プロの棋譜から学習したものから強化学習していて、チェスのnightcapも同様。完全にゼロから強化学習だけでマスターレベルに達したものは今まであるのかな?
55将棋から強化学習して、相対位置だけ移植してみようかな?とかなんとか、いろいろ考えるけど、まずは完全にゼロからレーティング3000を目指したいところ。そんなことをやっていると、各種大会ではぜんぜん勝てないんだけど、もう、いいんだそんなことは!(笑)