倶楽部入口倶楽部活動検索累計訪問者数Live Stats For Website 一年目 約9万3千 2009-02-27 10万人 2009-09-17 20万人 2010-04-27 30万人 2010-11-15 40万人 2011-06-22 50万人 2012-02-26 60万人 2012-11-09 70万人 2013-10-24 80万人 2015-08-27 90万人 |
ボナンザの定跡ファイル構造 備忘録Bonanzaの定跡データベースはどういう構造になっているのか? ボナンザに付いてくるファイル(key.h, probe.c, readme.txt)をしっかり読んで、LS3600様の解説ブログで補完すれば楽勝でしょうが、我なりに気付いた点を少々... Zobrist hashing ハッシュ値は極めて普通の Zorbrist Hash で求まりますが、それだけでは不十分です。盤を左右反転させた状態でハッシュ値を計算して、二つの値の内小さい方が真のハッシュ値となります。(probe.c を読まずに説明書だけでコードを書いているとこの落とし穴に嵌ります...我がそうでした) この時、どちらの値(正規・反転)を使用したのか覚えておくこと。 ...これは対称の局面も定跡データに収めるため(だと思います...でも大駒のお陰でなかなかその様な局面は無いのでは?...と思った) そのあと定跡データを引っ張って来るわけですが、反転ハッシュで検索した場合定跡データも「反転」しています...よって補正が必要となります。 ここまでくれば初期盤面から以下の定跡データが読み込めます... frequency=52306, move=[P1:FU (7,7)-(7,6) ..] ...で・す・が、先手「2六歩」と進めた状態で検索すると空振りします。ボナンザの視点は盤の下側に固定されている*ので(前後同型を処理するためでしょう) frequency=37201, move=[P2:fu (8,3)-(8,4) ..] ...の定跡データが戻ってくるのでめでたしめでたし...です。 たまには役に立つこと書けた...かな? *ボナが後手のときは盤を回転させてハッシュ値を計算します。
投稿者: 紫外線 投稿日時: 水, 08/11/2010 - 12:08 categories [ ]
|
掲示板更新状況最近のコメント
|
準課題終了
...しました。これで最初の数手だけはボナと同等。(笑)
週末のタスクは少々コードのお掃除です。
ボナンザの定跡読み出しテスト
データ構造上、盤面から定跡データを検索できても定跡データからは盤面は割り出せないので厳密なテストは無理です。
「擬似的」テストとして、
初期盤面から...
①定跡データから手をランダムに選ぶ
②選んだ手が合法手かチェック
③1手進める
①~③を定跡データに該当する局面が無くなるまで回します。
以上を数千~数十万回繰り返してエラーが出なかったらよろしい...とします。
次の準課題
ボナ定跡読み込み関数をUSIクライアントに組み込んで
①定跡から手を選んで「対局」する
②定跡から外れたらランダムに手を選んで対局を進行
...これで
A. 定跡読み込み挙動チェック
B. 合法手生成チェック
...です。