GA将?開発日記~王理のその先へ~

ネタ勢最強を目指して絶賛開発中。

そろそろGA+強化学習を試すべきか?

 http://www.logos.ic.i.u-tokyo.ac.jp/~yano/PDF/GI21_dist.pdf

 GA*1+TD(λ)で評価関数のパラメータを学習したって先行事例もありますし、これをベースにやってみようかと検討中。

 GAは大域的な探索が得意でTD(λ)とか方策勾配法は局所的な探索が得意なんで、それぞれの長所を引き出せる様なアルゴリズムにするのが良さそうですね。

 まずは上記論文の手法を真似て、GAフェーズと強化学習フェーズを交互に行うのが良いかも。

 論文では他のエンジンとの対局結果を使って遺伝子の適応度*2を計算していますが、私はちょっと違うやり方を検討しています。

 流れとしては、全部の遺伝子*3をスイス式か何か適当なやり方で対局させ、その結果出てくる順位を適応度にしようと思います。これなら、対局させながら同時にパラメータ修正が出来るので、一石二鳥です。

 後はGA部分の設計ですが、個体数とか突然変異率とかは適当に実験して決めるとして、突然変異のやり方だけは要検討ですね。

 単純にX以上Y以下の乱数とかってしちゃうと、X・Yの値次第ではメチャクチャなパラメータになってしまう*4ので、「歩の価値は平均J、分散Kだから、それに応じた正規分布で乱数を生成する」とかって処理が良さそうだとは思ってます(まぁ、これも実験してみないと正解かどうか分らないんですが)。

 後は諸々のパラメータ調整をどうするかですね。三目並べや4x4のリバーシだと、素のTD(λ)・方策勾配法で数百〜数千局で収束しちゃうんで、あんまり良いテストにはなりませんし…

 いっその事、多腕バンディット問題で腕を1万本とかにしてやってみるのもアリかな?

*1:Genetic Algorithm:遺伝的アルゴリズム。生物の進化を模したパラメータ調整手法。

*2:遺伝子の良し悪し(この場合は強さ)を数値化したもの

*3:パラメータのベクトル

*4:例えば、歩の価値が100なのに位置評価が1000を超えるとか