強化学習をやります
選手権が終わったら、コンピュータ将棋はしばらくやめようと思っていたんですが、
GA将!の成功やら、激指のオンライン学習やらを受けて、
自分も強化学習も含めたオンライン学習をやってみたくなりました。
TD(λ)に関しては会場でGA将!さんにレクチャーしてもらったので、学習則の適用方法などはなんとか理解できた(と思います)
いきなり本将棋はたいへんなので、55将棋でやってみようと思います。
というわけで、55将棋のエンジンを一から書き直しています。
- bitboardは使わない
- 逐次生成を行う
- 強化学習で自己対戦で学習する
- 利きも学習する
- 有望手の数で探索深さを制御する(ABC探索方面)
- 実現確率をやる
- 将来的にはfloodgate55などで他者からも強化学習する
- キャッシュに乗るようにできるだけ小さなプログラムを書く
- 配列などへのメモリアクセスを極力せずに、変数とロジックで書く(キャッシュに乗るため)
- できるだけ高速な探索コードを書く
- 序盤をなんらかの手段で学習する
- 駒割の概念を無くす
- 位置評価と利きを非線形評価する
- 三駒評価で進行度を省略する
五五将棋がうまくいったら本将棋に適用して、
floodgateで対戦しながら学習して行くエンジンを作りたいです
たとえば、R500で始まって、対戦するたびにRが増えていって、最終的にはR2600とかに上昇するような感じ
L:\misaki55>misaki55 1手目 先手 1 2 3 4 5 v飛v角v銀v金v王|1 ・ ・ ・ ・v歩|2 ・ ・ ・ ・ ・|3 歩 ・ ・ ・ ・|4 王 金 銀 角 飛|5 moves = 14 +52飛+13歩+24王+34金+24金+24銀+44銀+34銀+34角+54角+23角+12角+54飛+53飛
なんとか手生成までできました(まだ完全に確認してないですが)
探索、手生成、評価関数まで含めても
ソースがはかなり短くてまだ600行です
ハッシュとか細かいところはまだ書いてないので、そのへんはまだ増えます。