交叉だけでは進化が止まるので、突然変異を実装しよう。


2013年 07月 28日

遺伝的アルゴリズムの例として、ナンバーエリア(四角に切れ)の自動生成を説明している。
前回は、新しい問題候補(染色体)を生み出す方法として、交叉の実装例を説明した。

しかし、交叉だけでは、両親に似たような子供しか生まれてこない。そして、これが延々と続くと、世代が進むごとに、ますます似たような染色体だらけになって、進化が停滞してしまう。

打開に必要なのは、イノベーションで、両親のどちらにも無かったような形質をもった染色体を作る必要がある。

ということで、次の問題(染色体)から、新しい突然変異した染色体を作ってみよう。

na-ga11.png

簡単な方法は、どこか適当に選んで、その付近の長方形を何個か消去し、再度分割してみることである。

これで、確かに、突然変異は起きるのだが、かなり都合が悪い状況になる。

この方法では、進化ではなく、退化した染色体ができる確率が極めて高い。生物界での突然変異は、ほとんどダメな染色外ができて、ほとんど環境に適応できずに死滅するはず。この方法だと、同じようなことになり、突然変異で環境により適した染色体ができる割合が著しく低くなってしまう。

これでも上手く突然変異を利用するには、大量の突然変異を起こし、ほんのわずかの環境に適応する染色体を見つけることだが、そのためには大量の突然変異を起こさねばならなくて、計算時間が膨大になる。また、個体数も増やしておいた方が可能性が増えるのであるが、やはりメモリや計算時間を食いつぶす。

ということで、かなり効果的な、自然な突然変異ではなく、かなり恣意的な突然変異を考えないと、実用的なプログラムにはなりそうもない。

ということで、次回までに、恣意的な突然変異の方法を考えることにしよう。