課題のために遺伝的アルゴリズムを使う必要があったので,Pythonで遺伝的アルゴリズムを動かすことのできるライブラリPyevolveを試してみた.
始めの一歩
動かし方はとてもシンプルなので,公式ドキュメントのGet Startedをざっと見たあとにExampleでどういう使い方ができるのかを個別に見ていけばいいと思う.
日本語資料なら,自分が確認した限りでは以下のサイトが一番詳しい.
Pyevolveの基本的な使い方
ゲノムインスタンスの生成
ゲノムの構造はバイナリや1次元配列,2次元配列,木構造などを取ることができ,初期値が取りうる値の幅なども決めることができる.以下のコードでは,値が15個あって最小値0,最大値100というゲノムを作成している.
1 2 |
|
ゲノムの初期化,突然変異の設定
次に,ゲノムインスタンスを初期化して突然変異の分布などを指定する.最初に指定したゲノムの構造に従って指定する必要があるが,パラメータはだいたい読んだ通り.
1 2 |
|
値が整数の場合は”G1DListInitializatorInteger”や”G1DListMutatorIntegerGaussian”が用意されている.
評価関数をセット
評価関数eval_funcを作って,ゲノムインスタンスに指定する.
1 2 3 |
|
1
|
|
GA Engineを作成する
1
|
|
選択方式などのパラメータを指定する
デフォルトでGA Engineを動かした場合,世代数や集団数は以下のようになる.
- 100 世代
- 集団サイズ:80個体
- ランキング選択
これらを変更するには,以下のようにパラメータをセットする.
1 2 3 4 |
|
選択方法は,その他にもランキング方式やトーナメント方式などが用意されている.
GA Engineの実行
1
|
|
実行中はfreq_statsで指定した世代ごとに以下のようなログが出力される.
1 2 3 4 5 |
|
pyevolve_graph.pyの使い方
Pyevolveには,イテレーションの変化を可視化する便利なスクリプトがある.
1. DBAdaptersをインポートする
1
|
|
2. 以下のスクリプトを追記する
挿入する場所はGSimpleGA.GSimpleGA() のすぐ後.
1 2 3 |
|
これで,GAの実行後にpyevolve.dbというファイルが作成される.
3. pyevolve_graph.pyを実行する
あとはpyevolve_graph.pyを実行する.可視化するグラフのタイプなどが選べるようになっているので,その辺りのパラメータはマニュアルを参考.
例えば,以下のようなグラフを出力することができる.
1
|
|
最後に:Pythonで遺伝的アルゴリズムをするなら
最後に残念なお知らせだが,Pyevolveは少なくとも2年前から開発が止まっている.Pyevolve安定版0.5で公式に対応しているPythonのVersionも2.6となっている(2.7では動いた.3.x系は不明).
どうやら現在ではDEAPというライブラリが精力的に開発されているようだ.まだオンラインの資料は少ないものの,3.x系などの対応を考えるならこちらを使うのも手だろう.
- Genetic Algorithms and multi-objectives optimization on PYTHON : libraries/tools to use? - Stack Overflow
- deap - Distributed Evolutionary Algorithms in Python - Google Project Hosting
もし遺伝的アルゴリズムをPythonを使って自分で実装したい場合は,集合知プログラミング11章「進化する知性」がお薦めできる.基本的なアルゴリズムに加えて,交叉や突然変異の書き方であったり様々なデータタイプに対応したりと,実装も丁寧に解説されている.
動作環境
- Mac OS X 10.8.5
- Python 2.7.6
- Pyevolve 0.5