2010/09/11
■ 評価関数の自動学習の結果(その2)
前回の結果は過学習の気配あり。学習率と収束判定を変えた。
アマチュア竜王戦(全156局)
歩 | 香 | 桂 | 銀 | 金 | 角 | 飛 | と | 杏 | 圭 | 全 | 馬 | 龍 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
128 | 425 | 535 | 664 | 704 | 849 | 947 | 666 | 577 | 651 | 667 | 1196 | 1309 |
学習率を1.0に、学習終了は駒割の和の差が±1以内となったときとする。
後は前回と変わらず。学習開始時の評価誤差のsigmoid値(=J)0.2623、学習終了時はJ=0.2506で、そもそも学習開始時の評価値が適切で、その上学習が進んでいるといえよう。
2010/09/04
■ 定跡データの設計
自動対戦をさせている間に定跡データの設計をする。
#define BOOK_MOVES 5 // 最大分岐数 struct BOOK_TAG { // 24bytes uint64 key; // ハッシュキー WORD move[BOOK_MOVES]; // 手 // .PTTTTTT TFFFFFFF T:移動先(11〜99) F:移動元(11〜99) 打つ駒(1〜8) P:成り BYTE freq[BOOK_MOVES]; // 頻度 };
インデックスサイズは64kBでハッシュキーの下位16bitをインデックスとする。、エントリーサイズは16(=1block)。データはディスク上に持ち、メモリー上では持たない。インデックスキーでディスクをseekさせて1block読み込む。戦法によっては最大分岐数がもう少しあったほうがよさそうだが、ここは妥協。