タイトルのとおり、OpenAI Gym FrozenLake-v0 に遺伝的アルゴリズムを試しました。

遺伝的アルゴリズム

遺伝的アルゴリズムとは

遺伝的アルゴリズム(genetic algorithm, 略して GA)とは、 組み合わせ問題の最適解を求めるためのアルゴリズム。

具体的には、以下の 2 〜 4 を繰り返すアルゴリズム。

1. 初期設定
2. 選択
3. 交叉
4. 突然変異

詳しくは、他のサイトに説明は譲る。この記事がわかりやすかった。

Python で遺伝的アルゴリズムやるなら Deap

Python で遺伝的アルゴリズムやるなら Deap というライブラリがある。

遺伝的アルゴリズムにも、選択、交叉、突然変異にいろいろな酒類がある。

この辺の話は, Wikipedia が詳しい。

それらをうまく抽象化して扱えるのがこのライブラリ。

解説記事はネット上にたくさんあるのだが OneMax 問題を扱っているものが多い。

なので、OpenAI の FrozenLake-v0 を題材に Deap を使ってみた。

FrozenLake-v0

GA の前に乱数を発生させて、そのポリシーにしたがって進んでいく例を書く。

結果は、こちら。https://gym.openai.com/evaluations/eval_iinFj8fUSvOOYHWXwjjAw

Score が 0.56 で、基準の 0.78 をオーバーしていない。

deap を使った GA

結果は、こちら。https://gym.openai.com/evaluations/eval_uU3CIG5yTgOhOXVM8EG3wA

Score が 0.81 と、基準値をなんとかクリアした。

deap をつかわない GA

結果は、こちら。https://gym.openai.com/evaluations/eval_YpHI9YmhQoSGcKMI1dFsw

なんと Score は 0.91 だ。

ということは、自分の deap をつかった実装はどこかバグってるなぁ?!