遺伝的アルゴリズムにもストーリーがあるよ、っていうはなし
遺伝的アルゴリズムとはなんなのか、をカジュアルに知りたい方へ〜遺伝的アルゴリズムの概念と、どこをどう操作していく解決方法なのかについて〜
この情報過多社会の中でそれについての情報が少ない、あるいは情報がアカデミックすぎて未熟者の私には理解困難であり卒論を書くときに困ったことがあったので、カジュアルにここにまとめました。
(Qiita記事より : 遺伝的アルゴリズムにもストーリーがあるよ、ってはなし - Qiita
)
まさに生物の遺伝だねってはなし
遺伝的アルゴリズムはとてもシンプルでナチュラル。
数学を勉強していた身からすると、わりと偶然の事象に身をまかせちゃっているから新しいなって思います。
ふつう、なんらかの問題を解くとき、あれこれ計算して最後の最後にようやくコレだ!という解が導かれます。
しかし、その計算に時間がかかる場合や、計算の仕方自体不明な場合はどうするのか。
そこで考えられたのが遺伝的アルゴリズムです。
解を進化させていくアルゴリズムを構築し、よりよい解を導くのです。
生物が何世代もの時を経て、進化してきたのと同じように。
今は、人工知能などにも応用されているそう。
より自然界に近いしくみを作ろうとしている点は同じだから、しっくりきます。
個人的には、とりあえず解を仮置きしちゃう大胆さ、そんな堅すぎないところが好きです。
だってスーパーサイヤ人的天才からしたら怠惰って思われそうだよね(?)それをこれでいいのだと貫いているのだから。
盲目コワイってはなし
遺伝的アルゴリズムを考える際に、気をつけなければならないこと。
それは、盲目にならない!ということ。
というのも、
これは絶対優秀な解だー、と思ったらそれは一時の気の迷い、あるいは勘違いで、本当の優秀な解に辿り着けなくなることがある。
解の探索はときに、からあげにレモンするのと一緒で不可逆なのです。
なので、いかに一途になりすぎず、常に広い視野を持ち、同時に選択していく勇気も持てるかがカギとなります。
そんな人になりたい…遺伝的アルゴリズムはそんな思想を持ったやつです、大人すぎる。盲目コワイ。(ちがう
要は、常によりよいものを探していけるアルゴリズムを構築せよ、ということです。
とはいえ実際にどのように進化させていくの?
いざコーディングしようとしたときに、まず何をすればいいのか分からず、なかなか自力で発想していくフェーズまで行けなかった私。
なのでここもカジュアルに文章で残しておきたいです。
ストーリーのはじまり
まずは、ランダムにつくった個体(解)の集団を0世代としてみなします。
そして、その個体が優秀なのかどうかの判断基準を適合度で表します。
これは、例えば身長が高いほうがその世界で生きていきやすいなら、長身の個体ほど適合度が大きくなるように設定します。
よりよい集団にしよッ
その世界で生きていると、優秀なものが生き残ります。
適合度が低いものは淘汰されていく、とはまさに自然界でも同じです。
淘汰って、ときに残酷に聞こえて、実はハイパー自然的現象でありこの世界には必要不可欠。
そして、このような「選択」を正しくしていけるアルゴリズムを考えるのが私たち世界支配者の仕事です。
適合度が高いほど選ばれやすいとか、適合度が1番高い個体を必ず次世代に残すとか、そんなアルゴリズムをつくりだします。
こどもが産まれたよッ
選ばれた個体同士で生殖をはじめ、子が生まれます。
その際に、遺伝子がどのように交わるか(交叉)そしてときには突然変異も起こるよね、という自然的事象をアルゴリズムに落とし込みます。
要は、こどもって親の遺伝子をどの程度受け継ぐっけ?を操作しちゃいます。
例えば、突然変異の確率をあげておくと偶発的に目新しい遺伝子をもったこどもが産まれる訳なので、盲目コワイッッを避けられるとか、そういうことが起こる訳です。
このようにして、次世代の集団をつくりだします。
よりよい世界にしよッ
これを、何度も何度でも繰り返していくことで、優秀な個体の集団になります。
きっとそれが、私たちが求めていた解、なのでしょう。
それが本当に確実に正しいのかは分かりません。
しかし、限りなく正解に近づいているはずで、そうなる可能性が高いアルゴリズムを作ることができれば、その世界の支配者として優秀ということになります。
より優秀な支配者をめざして、選択や生殖のしくみを考えるのが私たちの役目なのです。