コンピュータ将棋Selene開発日記

2012 | 01 | 02 | 03 | 04 | 05 |

2012-03-01

[]第22回世界コンピュータ将棋選手権アピール文書 第22回世界コンピュータ将棋選手権アピール文書を含むブックマーク 第22回世界コンピュータ将棋選手権アピール文書のブックマークコメント


盤面データ

1.Bitboard

2.駒番号管理

3.あるマスへの利き数

4.あるマスへの利きのある駒番号


Bitboardは、64bit変数をふたつ持つ形式としています。

ひとつめの64bit変数・・・1一〜9六(先手陣以外)

ふたつめの64bit変数・・・1四〜9九(後手陣以外)

※1四〜9六(先手陣でも後手陣でもない箇所)のデータは重複して保持。


駒番号管理ではゲームに使用する駒にシリアルな番号を付与しています。

歩= 1〜18番

香=19〜22番

桂=23〜26番

銀=27〜30番

金=31〜34番

角=35〜36番

飛=37〜38番

玉=39〜40番


また、あるマスへ利きをつけている駒番号を列挙して保持しています。


盤面を指し手に従ってすすめる・戻す処理を行う場合には、盤面の駒を更新することに加えて利きと駒番号の更新を行うため処理速度は低下しますが、さまざまな処理においてBitboard形式と駒番号管理形式でのどちらか高速に動作する形式を利用し、探索全体ではBitboard単体、または駒番号単体より高速に処理を行います。

例)

ある駒が移動可能なマスを取得する

Bitboardを利用。

移動可能なマスをひとつひとつ見ていくのではなく、移動マスと味方駒とのビット演算にて求める。

王手している駒を特定する

駒番号を利用。

自玉マスに対して利きをつけている駒番号を取得し、駒の種類や位置を求める。

評価値を取得する

Bitboard、または駒番号を利用。

玉の24近傍を特定する際にはBitboardにマスクをかけたり、ある個所へ利き数を評価する際に高速な処理を行う。


機械学習

評価項目

駒の絶対位置による評価

駒の相対位置による評価

玉の守り


N駒の相対位置評価について。

駒の位置評価では2駒であれば単純計算で、

駒の種類(15)×敵味方種別(2)×盤面のマス数(81)の2乗=約600万要素

3駒となると、

駒の種類(15)×敵味方種別(2)×盤面のマス数(81)の3乗=約140億要素

となり、既に3駒の時点でデータ量が扱いづらい量となります。


そこで、盤面のマスに一定の規則で数値を配置したインデックステーブルを用意します。


例)

テーブル1
9 8 7 6 5 4 3 2 1
00 00 00 00 00 00 00 00 00 一
01 01 01 01 01 01 01 01 01 二
02 02 02 02 02 02 02 02 02 三
03 03 03 03 03 03 03 03 03 四
04 04 04 04 04 04 04 04 04 五
05 05 05 05 05 05 05 05 05 六
06 06 06 06 06 06 06 06 06 七
07 07 07 07 07 07 07 07 07 八
08 08 08 08 08 08 08 08 08 九

テーブル2
9 8 7 6 5 4 3 2 1
00 01 02 03 04 05 06 07 08 一
00 01 02 03 04 05 06 07 08 二
00 01 02 03 04 05 06 07 08 三
00 01 02 03 04 05 06 07 08 四
00 01 02 03 04 05 06 07 08 五
00 01 02 03 04 05 06 07 08 六
00 01 02 03 04 05 06 07 08 七
00 01 02 03 04 05 06 07 08 八
00 01 02 03 04 05 06 07 08 九
など。

飛車が2一〜2九にいるとき、テーブル1ではインデックスは07になりますが、テーブル2と組み合わせることによって一意な位置で学習を行うことが可能です。


テーブルを複数個評価し、かつ、相対的に評価する駒数が増えるため、評価関数での計算量が増えます。

現在は全種類の駒での評価は行っておらず、「玉+飛車角銀」など、関係のありそうな駒を選んで評価を行っています。

評価値データは全体で約40メガバイト


機械学習

プロ棋士棋譜から機械学習を行った後、強化学習により数値を調整しています。

トラックバック - http://d.hatena.ne.jp/SeleneShogi/20120301/p1