将棋ベーシック改を改造しました

探索部は合法手生成と分岐探索で出来ているのですが、手生成と探索に合法手を受け渡すメモリのコピーが遅いかもしれないと思って手生成した手をそのままグローバルの探索ノードに追加していくようにプログラムを組み替えてみました。

昨晩思いつき、晩酌をやめて打ち込んで、予想より大きな変更が必要とわかって結局冷蔵庫から出して缶のまま置いていたクリアアサヒを飲んで寝て、朝から取り掛かってバグに悩んでマシンのメモリが一杯になってハングアップして再起動して、昼食前くらいに何とか形になりました。

1手読みで計測すると確実に速くなったのですが、ゲームを進めていくとだんだん遅くなって熱や他のアプリやOSのせいか、何かリソースを食いつぶす要因がプログラムそのものにあるのか、調べるのにも組み直すのにも方法から考え直す必要あり。

しかしまあ、5年間放ったらかしだったので改良のアイデアを出して着手できたのは大きな1歩。

 

俺は子供の頃に親父の通り道に落とし穴を掘って怪我をさせたという記憶があったけど、正確には穴を掘って親父が転んで怪我をして「落とし穴掘っただろ!」と怒られてゲンコツを食らったけど、どうして穴を掘ったかというと母親によると恐竜の化石を発掘しようとしていたらしいですね。記憶っていい加減なものよね。

 

将棋のプログラムもコード量が多くて実際に計算を走らせてみるまでに仕込んで組み込んでいる間にわくわく感はあるんですよね。楽しいもんです。棋士さんにとってはとんだ落とし穴に感じる方もおられるかとは思いますが。

 

忘れていたことだけど、専門学校で学んだプログラムってシステムの部分モジュールを組み立てる作業員になるためのレクチャーしか受けていないから、習ったことだけでは大したものが組めなかったんですよね。グローバル変数や無限ループは極力使わないとか、集団作業とかバグを少なくするための工法から入っていて、ある日縛りを全て解き放って無限ループを使った素数を計算するプログラムを組んでみたんですね。

 

好奇心を満たすためだけにコンピュータが暴走して壊れてもいいやというような使い方のプログラム。走らせてディスプレイに並ぶ素数の列を見ながら満足して、そのパソコンをはしらせた状態で部屋で眺めてそのまま毛布にくるまって寝て。ずっと番をしていると、やがて億単位くらいでコンソールがピタッと動かなくなったんですよ。大きな桁の素数をひとつ求めるためにもうマシンがいっぱいいっぱい。

 

将棋もその延長というか、好奇心で強い手が知りたいと組んで走らせて、待っていた時期があるんですよね。故人ではありますが米長邦雄永世名人の「我、破れたり」では2六歩とか7六歩とかの手ではなく、棋界秘蔵の1手から始めてコンピュータが勝ちという。

 

いやいまこのブログ書いている裏で新しいプログラムがバックグラウンドで走ってるんですけどね。もうワクワクするより「早く終わらんかな」みたいに思ってて。