ボナンザを色々改良してみる

 

将棋ソフトの開発用に、ボナンザを深さ固定にして将棋所を使って対戦しています。そのためのいくつかのメモです。

 

1.ボナンザのソース、u2b、将棋所

 

■ボナンザのソース

http://www.geocities.jp/bonanza_shogi/

 ソース一式が置いてあります。

 

u2b

http://www.geocities.jp/shogi_depot/

 ボナンザを将棋所などで使うためのソフトです。ボナンザの実行ファイルと同じ場所にu2b.exeを置いて、

 これを将棋所でエンジン登録すると自動的にボナンザを認識します。

 

■将棋所

http://www.geocities.jp/shogidokoro/

とても使いやすい将棋用GUIです。これにボナンザをエンジンとして登録して対戦します。

 

2.ボナンザをコンパイルする

ボナンザはgcciccでもコンパイルできるようですが、僕はMicrosoft VS2010 Express(無料)でコンパイルしています。

 

http://www.microsoft.com/japan/msdn/vstudio/express/

 

ここではVSでのコンパイル方法を述べます。

#ボナンザは64ビット版にも対応しているようです。

#64ビット版でコンパイルするためには、VSX64のSDKなどをダウンロードする必要があると思います。

 

2.1 プロジェクトの作成

メニューの「ファイル」→「既存のコードからプロジェクト作成」→ボナンザのソースのフォルダ(例えば、bonanza_v6.0/src/client)を指定します。

プロジェクト名は適当に。ビルドバーでReleaseモードを選んで、ビルド(F7)でコンパイル。初期状態ではDebugモード(遅い)になっているので注意。

コンパイルが成功すると、bonanza_v6.0/src/client/Releaseに実行ファイルができます。

また、以下のようにwinbinのフォルダに実行ファイルを出力するようにすると便利です(fv.binbook.binがあるため)。

 

2.2 CSA対応にする

将棋所で使えるようにするためには、以下をshogi.hの先頭に加える必要があるようです。

 

//---------------------------

# define CSASHOGI    1

# define NDEBUG      1

# define MINIMUM     1

# define NO_LOGGING  1

//---------------------------

 

2.3 実行時のエラーをなくす

SetConsoleTextAttributeという関数を内部で使っていますが、これでエラーがでるようです。これをすべて無効にします。

これはコンソール上で、文字に色をつけるための処理なので省いても問題ありません。

 

  /*

  if ( ! SetConsoleTextAttribute( hStdout, wAttributes ) )

    {

      str_error = "SetConsoleTextAttribute() faild";

      return -1;

    }

              */

 

 

3.駒割ボナンザ

 

inc.cload_fv関数でボナンザの要である、評価関数の重み(pc_on_sqkkp)を読み込んでいます。

これをゼロにすれば、駒割のみで動くボナンザとなります。

 

int CONV load_fv( void )

{

  FILE *pf;

  size_t size;

  int iret;

 

  pf = file_open( str_fv, "rb" );

  if ( pf == NULL ) { return -2; }

 

  size = nsquare * pos_n;

  if ( fread( pc_on_sq, sizeof(short), size, pf ) != size )

    {

      str_error = str_io_error;

      return -2;

    }

 

  // ゼロ埋め

  memset(pc_on_sq, 0, sizeof(short)*size);

 

  size = nsquare * nsquare * kkp_end;

  if ( fread( kkp, sizeof(short), size, pf ) != size )

    {

      str_error = str_io_error;

      return -2;

    }

  // ゼロ埋め

  memset(kkp, 0, sizeof(short)*size);

 

 

 

inserted by FC2 system