忍者ブログ
コンピュータ将棋など…。
[8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

思ったように動作しなく、assertを入れまくった結果、1手進める/戻す処理でデータ不整合となっていました。
先手番ではうまく動作して後手番でうまく動作しないというありがちな状況で今までテスト漏れしていました。

3枚目の角が出現したりしてます。

本番で出ませんように…。
PR

非常にマズイ気がする…。
かぞえチャオ!の計測で現在3300行。
先は長い…。

・局面データ生成
・利き情報の生成
・ピン情報の生成
・合法手の生成
・1手進める/1手戻す
・利き情報の差分更新
・ピン情報の差分更新
・局面ハッシュの差分更新 ←今ここ
・王手生成
・詰将棋(反復深化)
・詰将棋(df-pn)       ←年内の目標
・局面の静的評価
・αβ探索
・SEE
・パラメータの学習
・GUIとの結合
・floodgate参戦

 :

・GUI開発
なのはの局面データは利き情報(先手、後手)とピン情報を持っている。
手を進める処理および手を戻す処理においてのピン情報の更新を次のように行っている。
まず、玉の利きを延長し、利き情報に入れておく(下図:黒=自玉、赤=相手玉)。
※実際には局面データの初期化時に設定し、玉移動時に更新する。

PIN情報更新

自玉を動かす場合:
・自玉に関するピン情報を更新する。
・相手玉の利きの延長線上に自玉の移動元、移動先がある場合、その線上のピン情報を更新する。
  (2六玉とする場合、4四から1七のラインのピン情報を更新する)

玉以外の駒を動かす場合:
・移動元、移動先が自玉、相手玉の利きの延長線上にある場合、その線上のピン情報を更新する。
  (5五に角がいて3三に移動する場合、自玉の4六~9一、3六~3一のライン、相手玉の5四~5九、4四~1七のラインのピン情報を更新する)

王手がかかっているときの合法手生成のテストをしてて見つけたバグ…。

1. _BitScanForward()の使い方のミス

離れた位置からの王手に対する移動合がおかしな位置にされ、どうも立っているbitの位置を間違っているようなのでよく見たら、_BitScanForward()の使い方を間違っていました。

なぜか

Index = _BitScanForward(&Index, Mask);

としていました。
他の箇所はちゃんとやってたのに何でだろう…。

2. 紐のついた駒を玉で取ってしまう

玉を動かす関数とは別に、指定場所に駒を動かす関数があり、その中で玉を区別していなかった。


・・・。
うーん、完成するんだろうか・・・?

 

駒番号を見ての着手生成が出来ました。
ループ回数が81回から40回に減ったことで高速化されました。
しかし、BitBoardにはちょっと追いつけそうにありません…。
・例の局面 … 66万回/秒
・初期局面 … 103万回/秒

まだ、ピン情報は未確認です。
着手による盤面の更新処理はどうしたものかなぁ~。

v飛・・歩・歩・・玉

のような並びのときに歩を動かしたときに、動かさないほうの歩がピンされた状態になるけど、これを高速に差分更新するにはどうしたらいいんだろう??
うーん、ピンは都度生成したほうがいいのかな?


忍者ブログ [PR]
カレンダー
03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
フリーエリア
なのはの応援をしていただき、かつ協力いただける方は、アマゾンでの買い物は下のリンクからお願いします
最新CM
[04/27 とおりすがり]
[10/21 おてだま]
[10/20 おてだま]
[01/24 なのはminiふぁん]
[01/08 sakura]
最新TB
プロフィール
HN:
かず
性別:
非公開
バーコード
ブログ内検索
最古記事
カウンター
アクセス解析