第22回世界コンピュータ将棋選手権 アピール文書 2012/05/11 平岡 拓也 Apery とは 「エイプリー」と読んで下さい。猿真似という意味です。 オリジナリティがあまり無いことへの自戒の意味を込めています。 Apery の特徴 実装の細かい部分について - Magic Bitboard を使用し、ある程度の速度と、かなりのコードのスッキリさを両立しています。 局面を表現する Bitboard は、 駒の種類ごと 14個 先手後手 2個 先後合わせたもの 1個 合計 17個 を使用するだけで済んでいます。 - Bitboard の処理に SIMD 命令を使用し高速化しています。 - 短手数の詰み判定を高速に行います。 - 指し手生成は、良さそうな手から逐次的に生成しています。 詰将棋探索や静止探索専用に特化した指し手生成もしており、場面に応じて高速に指し手を生成します。 通常探索において、 position sfen l6nl/5+P1gk/2np1S3/p1p4Pp/3P2Sp1/1PPb2P1P/P5GS1/R8/LN4bKL w GR5pnsg 1 (俗に言う指し手生成祭の局面)での指し手生成速度は 400万回/秒 です。 (core i7 2700k 1コアにて) - これらの処理を C++ template を使用して、 先手/後手、飛車/角、駒を取る/駒を取らない などをパラメータにして展開しており、 実行時の条件分岐を削減しています。 簡単にまとめると、コンピュータ内部の将棋盤で駒を高速に動かすように工夫しました。 その結果、同じ時間でより多くの局面を読むことが出来ます。 評価関数について - Bonanzaの評価関数(fv.bin)をそのまま使用しています。 Bonanza開発者の保木さんに感謝致します。 今回は評価関数まで手が回りませんでした。 来年は自作で挑みたいところです。 Bonanzaの評価関数で局面を正確に評価し、高速に読みを行います。 それだけ聞くと強そうですが、まだまだトップレベルのソフトとは明らかな実力差があります。 無駄な局面を読み過ぎて、あまり深く読むことが出来ないのが原因のようです。 使用している探索手法は下記の割と一般的なものです。 - futility pruning - null move pruning - move count based pruning - mate distance pruning - principal variation search - late move reductions 来年はスーパー強くなって帰ってきたいと思っています。 最後まで読んで頂いてありがとうございました。