将棋ベーシック改というと三手読みの全幅探索ですが、強くなるかどうかはさておき、深読みするためには枝狩りが必要(計算資源は同じだから)ということで、モンテカルロ法的に手生成をしてから間引いて探索するアルゴリズムとして、手生成をした結果の探索を乱数で1~3ステップに間引くという実装を試した。
弱い!タダ取りの駒を見逃したり、詰まされるのに逃げなかったりだ。しかしまあ、実装としては前進である。失敗なしに進歩はない。間引けることが分かったら、次は間引いてはいけない手の判定ということになるのだろう。そうすると関数が増えそうだ。関数が増えると重くなりそうだが、そこは間引くので差し引きで深くなり強くなる。そうあってほしいものだ。
んで、まあ改造した部分をトグル出来るようにして元のロジックにも問題なく戻せる。そうしてまた1局指してみたのであった。
今回は人間の勝利。まだ弱いけど、ちょうどいい相手でもある。開発者と二人三脚で強くなるという理想には適っている。激指の鶴岡先生とかアマ五段だったな。
日進月歩で将棋ソフトは強くなっていて、そして独自研究はしているもののサボり調子で、他のソフトの研究とかもほとんど出来ていない。スパイ行為をするまでもなくストックフィッシュ16もオープンソースソフトウェアOSSなわけだが、C++のヘッダーファイルがかなりの数で、どこから取りかかったら全体像が把握できるかも分からない。だからスパイをあきらめて、自分のソフトの研究に専念するのであった。
まあ、秘密の大半はコードではなく機械学習の成果である定跡のデータにあると見ている。極端な話、モンテカルロ法などの乱数を使わないと手が一定になるので、負ける手筋が見つかると定跡だけで負けてしまう。やねうら王が三連覇の前にポナンザに負けたのも事前研究から定跡で不利に導かれ、そして先手後手先手で先手二回を引いていたのに先手側で同じ手を二度指さないのが祟って負けたのだったと記憶している。
三手読みの範囲で全幅探索しているわけで、三手の範囲で将棋ベーシック改は最善手を打つ。この場合の最善とは駒得と駒利きの評価で三手先の中で最駒得手になる。それで人間がまだ勝てるわけで、三手の最駒得手は駒得という論理体系の中での最善手だが、将棋の神が指す最善手とは何らか論理が異なっているということになる。
そうすると、乱数なんてとても非論理的に思えるが、現状の将棋神である将棋ソフトで乱数が使われていると、乱数でもって負ける可能性があったとしても、一定の手を指し続けるよりそちらの方がレートが高いわけで、論理的にバラつかせる乱数を使うことが現況最善であるということになるのではないだろうか。
となれば、一旦は弱くなったとして、何らかの枝狩りをして負けることがあったとして、そうして手を改めることでまた新しい将棋観というか棋理が見えてくる。外しちゃいけないところと、揺さぶって良いところ、その判別と勘所。
昨日よりは真理に一歩近づいたようで、何とも掴みどころのない研究への出発だ。
いっぱい書き直すのは面倒なので、ひとまずロールバック可能にしておいて、何から手を付けたものか。何も手を付けるところが見つからないのではなく新しい無数の可能性に一歩リーチしたことだけは間違いがないと思っている。乱数を使うのか!
ハニーワッフルの渡辺先生が、馬券を全通り買ったら当たったのに負けた(損した)というものすごいヒントをSNSで下さった。勝つためには博打を打って当てねばならぬ。そんなことをコンピュータにやらせるわけだから、もはやバカの集団である。
とりあえず、ランダマイズを初期化関数で何故か以前に実装した形跡があって、やらねばならんとは思っていたところまでやっとスタートラインに自分でも漕ぎ着けたのだ。確実な勝ちを計算で求めようとした結果としてコンピュータに博打を打たせる。
もうこの時点で、大会は勝ったやつが勝者であって論理で勝ちを求めるのではなく乱数を使って勝負をしているという事案から、参加して勝者を決めるセレモニーに確実な勝ち方が見つかるまで不参加で研究したいという姿勢がアウトなのだろう。
そんな事なのに、最新スペックのコンピュータで追い続けるってちょっとイカれてる。でもそのイカれっぷりは、見る人によってはイカしてる。互いに乱数を使って勝者を決めるゲームをするわけだから、最近やらなくなったカルドセプトの双六大会と何か違うのだろうかと思うと、まあそれでも技術介入度がハンパじゃなく高いわけで。
そうなると研究が自己対局ではなく相手のいるフラゲになるのも理解できた。