思うだけで学ばない日記 2.0

思うだけで学ばない日記から移転しました☆!よろしくお願いします。

【Rotated】R7B5P【Bitmap】

王周辺の利き評価の問題は一応対策したが*1この評価関数はやめにしてKKPとKPPにしようっと

メモリはKKPとKPPに使いたいので指し手生成はそこそこの速度あたりを目指して少メモリに収め隊、

つまり指し手生成ではテーブルを極力引かないということであって、ビットマップからビット演算でただちに利きとか列挙できることが望ましいから普通のビットマップのまま処理する*2

90度回転や45度回転は、ビット演算による上位側へのビット寄せで実現汁、

どういうことだってばよ?

すわなち、4x4の将棋盤だったとして、16 bitのビットマップxxAx xxBx xxCx xxDx をABCD yyyy yyyy yyyy とかにできればおk(90度回転)
もしくは、Axxx xBxx xxCx xxxDをABCD yyyy yyyy yyyyとか(45度回転)

とにかく、縦でも横でも斜めでも、1つの軸上の全ビットをまとまった位置に寄せてしまえば、ビット敷衍化テクでその方向への駒の移動可能範囲を出したりあまつさえ列挙までできそう、

もっとも、n個のビットを寄せるのに加算と&がn回づつぐらい要るので今日日のIAにおいてビットマップを使わずに盤にアクセスするループを回すやり方より速くなるかどうかは個人的に知らない
ただし、ビット寄せの最終位置を多少分散させれば1回の加算と&で同時複数ビット寄せも可能な感じ
これわ1方向の列挙がL1内に収まるぐらい行けば勝利

また、うまくすれば大○軍みたく探索において局面をロールバックせずに済ませることも可能かもしれない、*3
これわ多分指し手生成において駒移動を表すXOR用のビットマップを生成し、再帰呼び出しのとき子ルーチンに渡しっぱなしにするの意
すると深さ優先探索は平手ビットマップに対して駒移動ビットマップをXORしてXORしてXORして...XORして探索の末端で破棄、の繰り返しで済み、再帰から戻る度にいちいちわざわざ駒移動をロールバックするフェーズが要らなくなる
しかし自己駒のビットマップ128 bitと相手駒のビットマップ128 bitと駒移動のビットマップ128 bitを毎回渡すのはかなりオーバーヘッドがありそう、、
スタック渡しになったりすると目も当てられない

いや逆に考えるんだ

お前はいままでロールバックの度にアクセスしてきたメモリのバイト数を憶えているのか、、

*1:駒打ちは半ば好きなときにできるから、探索の先端で打つ手を根のあたりで打つ手に置き換えても(それらの優劣をつけられない探索能力の限界故に)結果的に大過ないと言える少なくともこれで駒をむやみに捨てる挙動はなくなった

*2:bitboardとかは使わない

*3:むしろ高速化の気体としてはこちらのが大きい