(2008.6.26) 新規作成。
れさぴょん (lesserpyon) はコンピュータ将棋の学習用のライブラリです。池泰弘氏が開発しています。
オリジナルは下記から入手でき、2008年6月現在の最新版は、れさぴょんv3 です。
このページでは、gccでコンパイルできるようにした版を公開しています。
将棋ライブラリ
ほかにフリー(自由)に入手できるライブラリは、以下のものがあるようです。
- GPS将棋のライブラリ OpenShogiLib (osl)
- ライセンスはBSDスタイル. C++のテンプレートを使いまくっています。boostから作らないといけなくて、コンパイルが難しすぎます。試すことはできませんでした。
- GNU shogi
- 最新バージョンは、v1.3.2. ライセンスはGPLv1 or later. データの持ちかたがメモリの小ささ優先すぎて、効率が悪いように見えます。
- daemonshogi のライブラリ SI SHOGI Library
- ライブラリ部分のライセンスはLGPL. れさぴょんに似たデータ構造です。
コンピュータ将棋協会 (CSA) 主催のコンピュータ将棋選手権で使用することができるのは、れさぴょんとOpenShogiLib の二つだけです。
れさぴょんgccバージョン
Fedora Linux 9 (gcc 4.3.0) でれさぴょんv3をコンパイルするとエラーが出ます。あと、気づいた点がいくつかありましたので、直してみました。
cygwin (gcc 3.4.4), cygwin (target = mingw) でもテストしました。
+0.0
文字コードをUTF-8にし、今どきのgccでコンパイルできるようにしただけです。
lesserpyon3-gcc-0.tar.gz
+0.1
(2008.8.15)
ざっとコードを眺めて、今後改良しやすいように、ヘッダファイルやソースファイルを分割しました。動作は、バグと思われるところも含めて、まったく手を入れていません。
次の点が気になりました(が直していません)。
バグと思われるもの:
- 局面ハッシュの種を作るときに、おそらく誤って、bit or している。ほとんどのビットが1になってしまって、衝突 (collision) の可能性が高い。rand() の使い方も悪い。下のほうのビットを使ってはいけない。
効率に関するもの:
- pin情報を局面クラスで保持せず、着手可能手を生成するときに毎回計算している。pin情報があれば簡単に判定できるのに使っていなかったりする。
- 二歩チェックを毎回地道に計算している。
- 王手の生成で、すべての手を生成し、実際に局面を進めている。無駄が多い。
- 着手可能手を配列で持っているため、コピーが多く発生している。
- コードの重複がやたらと多い。
デザインに関するもの:
- 棋譜の(各局面の)ハッシュリストをグローバルに一つしか持たないため、マルチスレッド化した時点で破綻する。(千日手チェックを誤る。)
- 盤をあらわすのに、盤の周りのpaddingが1足りないため、駒の相対位置を1次元の数値で一意に表現できない。かなり重要だが、直すのは大変。
lesserpyon3-gcc-0.1.tar.gz (revision 326)
+0.2系列
(2008.8.14 この節追加。)
手を入れ始めました。思考ルーチンは完全に書き換えようと思います。このバージョンではまだランダムに動かすだけしかできません。
Done::
- 詰め将棋をdf-pn で解くようにした。
- 局面ハッシュの種を固定した。分散環境でも使える。
- pin情報を局面クラスのメンバにし、積極的に利用するようにした。
- 王手生成ルーチンを書き直し、できるだけ局面を進めなくてもすむようにした。
- 候補手のリストMoveListクラスを用意した。
- 棋譜を持つShogiGameクラスを作成。
- テストケースを書いた。
- コードのclean up.
TODO::
- 通常探索を MTD(f) にする。
- df-pn の改良。(1) 証明駒・反証駒, (2) GHI 対策。
- テストの充実。
- MPI で分散できるようにする。