遺伝的アルゴリズムのライブラリを作ろうとしている。
GAは基本を外さなければ充分使えるものが出来る印象。うまく働くかどうかに感しては、使い方(パラメータの設定、評価関数)の比重が高い。
ライブラリの仕様に関してリストアップ
■バイト単位のDNA構成
■1単位の値域を設定可能(2値もこれでカバー)
■固定長・可変長は両方サポート
■交叉は1回
■突然変異の確率は設定可能
■淘汰はトーネメント方式(か、それに近い形)
といったところ、「バイト単位で可変長」なところが特徴。
サンプルとしては、
■やっぱりジャンケンものが定番
■袋詰め問題やセールスマン巡回問題
■「素数ゼミは何故生き残るか?」シミュレーション
■サウンドもので何か新しい音が生成できるか?
■中立進化的なもの
・・・・・
など、2、3個用意する予定。内容はこれから決定。
サンプル(ライブラリというよりも)をうまく作れば以下のようなことも可能。
■複数遺伝子が複数形質を既定
例えば、体が大きくなる因子がツノを伸ばす因子にもなってる場合。体がデカいと有利なので、その方向に進化。それにつれて、有用無用に関わらず、ツノが伸びる。
■中立進化
「これ以後の因子は無視してね」というようなフラグ的な因子を作っておくと中立進化が実現できる。
GAの使い方としては、
「1.パラメータの調整、最適化」 の他に
「2.シミュレーションしてその動向を楽しむ」というのがある。
(ごっちゃにすると議論や作品の行く末がキケン!)
以下の図はGAとは関係なし。誰かが書いたリストを扱うプログラム。開始リストを指し示すのがm_rootで、終了リストを示すのがm_tailだったので、絵で表すとこんな感じ・・・。