メモリの有効活用を考えることとした

 俺は将棋ソフト開発者以前にファミコン愛好家なので、メモリの小さいプログラムが良いプログラムであるというような考え方がどこかにあった。

 だから将棋の指し手を考えるときにやねうら王から「そんなもん800^depthくらいメモリを確保したら出来るんやからメモリが大量にいるとかウソやろ!」と言われた時にその将棋の読み筋だけでストIIが丸々入るんやぞ?とか思っていた気はする。

 ただ、それでも同じスペックでもっと強いソフトはあるわけで、コンピュータの有効活用という意味で他の開発者の方がマシンを上手く使っている気はする。特に機械学習の流行期には指し手を逐一探索するのではなく、事前計算してメモリ上に記憶して、対局中に引っ張るわけで、ファミコンと違ってHDDとかSSDを活用できていないのだ。

 その意味では、探索以前の指し手生成も将棋ベーシック改では逐一計算していてメモリは最小だが、どうやらPonanzaの山本一成さんの論文あたりからMagicBitboardとはいったい何だったのか今更に読ませてもらうと、どうやら利きを対局前に全通り事前計算してメモリに持っておく方式のようである。

 これ、ウチもやろう!

 BitBoardはVBでも作れたわけだから、利きBoardを作って利きAND(利きXOR自駒)みたいなことをすれば飛び道具以外は1発でBitBoardになるわけだ。

 どんくさい俺のために色々の開発者の方がPEXTなどの説明文をそっとブログ記事として書いてくださって、ちゃんと勉強している人には当たり前だけどウチはまだなのだ。

 さらにいうと「たややん」の問題発言藤井総太さんの指し手は水匠で6億手読ますと出たみたいなのも、実は将棋ベーシック改はVBだから遅いと思ってたけど、5分~10分くらい読むときがあって、その時は5億ノードくらいに達する可能性がある。

 それって結局は全幅探索だから無駄局面を枝刈りせずに全部読んでヘボい手を返しているだけで、スペックとか言語の問題ではなく枝刈りを始めとする思考ロジックの論理性の差によるところが大きいわけで。

 まあ、結局はノイマン式コンピュータってCPUとメモリしか無いわけで、計算するか覚えるかで、事前計算てのがメモリの無駄遣いに思えたけど覚えたら1発のことを逐一計算してやるのって数学の問題で公式を暗記せずに逐一導き出しているようなもんで、ここが東大合格レベルと落第レベルの差でありコンピュータの使い方もそう!

 ということが分かったものでした。でも「たややん」さん、いつの間にか東大卒から慶応卒に変わってない?俺のメモリ違い?曖昧に東京の大学ってことで解決!

 まあ、ダイソーで買った13桁のそろばんでも9兆9999億9999万9999まで計算できるわけなんだから、インテルコア2のSSD500GBくらいある俺の富士通ノートの可能性はもっとある!そう考えると6億局面はそろばん9桁くらいなわけで、9x9マスの将棋の達人とそろばん1級の暗算は同程度までの計算で、そのレベルならコンピュータと人間は拮抗できるのかもしれないよなとか考えたりもしてます。


🄫1999-2023 id:karmen