Science

2008.12.18

遺伝的アルゴリズムで楽しむ

Text by kanai

galisa_20081210.jpg
遺伝的アルゴリズムは、普通に解こうとすると難解で複雑な問題の、ほぼ最適な解法を探り出すシンプルな手段となる。進化の過程、突然変異、交配、選択圧をシミュレートすることで、プログラムは問題の解法を導き出す。
Seth Justは、Perlで書いたシンプルでカスタマイズ可能な遺伝的アルゴリズムについて教えてくれた。一連の問題が一組ある場合、各”個体”をランダムに初期化する関数、個体を変化させる変異関数、もっとも強い数を持つ個体を組み合わせる交叉関数、個体の強さを算定する適応関数を、ユーザーが定義できる。彼のコードには丁寧な解説が付いていて、いろいろな問題に簡単に適用できる。
もうひとつ、彼は、ここでぜひとも紹介しておきたい面白いプロジェクトについても教えてくれた。上の、モナリザの絵が変化する写真は、Roger Alsingが作った遺伝的アルゴリズムの例だ。たった50個の半透明ポリゴンに90万以上の変異を加えることで、プログラムはポリゴンの位置や色を最適化して、びっくりするほどモナリザによく似た絵を作り出す。
geneticcar_20081210.jpg
もうひとつクールな例がある。このFlashビークルシミュレーターだ。2人の乗客を乗せた2輪の車両がランダムに作られる。この車両の適応度は、2人の乗客が地面に触れることなく、できるだけ遠くまで走れることで計られる。最初は、ほとんど走れない状態で反復されるが、進化が進むと、より頑丈な車両が作られるうようになり、地形に沿って走れるようになる。
Genetic Algorithms in Perl(英語)
Genetic Programming: Evolution of Mona Lisa(英語)
Genetic Car(英語)
– Jason Striegel
原文