タイトルのとおり、OpenAI Gym FrozenLake-v0 に遺伝的アルゴリズムを試しました。
遺伝的アルゴリズム
遺伝的アルゴリズムとは
遺伝的アルゴリズム(genetic algorithm, 略して GA)とは、 組み合わせ問題の最適解を求めるためのアルゴリズム。
具体的には、以下の 2 〜 4 を繰り返すアルゴリズム。
1. 初期設定
2. 選択
3. 交叉
4. 突然変異
詳しくは、他のサイトに説明は譲る。この記事がわかりやすかった。
Python で遺伝的アルゴリズムやるなら Deap
Python で遺伝的アルゴリズムやるなら Deap というライブラリがある。
遺伝的アルゴリズムにも、選択、交叉、突然変異にいろいろな酒類がある。
この辺の話は, Wikipedia が詳しい。
それらをうまく抽象化して扱えるのがこのライブラリ。
解説記事はネット上にたくさんあるのだが OneMax 問題を扱っているものが多い。
- Python の進化計算ライブラリ Deap - Qiita
- DEAP - Python と機械学習
- 遺伝的アルゴリズムに入門するときに参考になったスライドと OneMax 問題の実装 - もふもふ技術部
- Goodbye, World! Python の DEAP が面白そう
なので、OpenAI の FrozenLake-v0 を題材に Deap を使ってみた。
FrozenLake-v0
Random Search
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 をつかった実装はどこかバグってるなぁ?!