Help us understand the problem. What is going on with this article?

Pythonによる人工知能入門1 「遺伝的アルゴリズム~理論編~」

比較的わかりやすい遺伝的アルゴリズム

 人工知能(AI)の中では、1から10まで理解するのにそこまで体力を必要としないのがこれである。人工知能の入り口に立った人も、ぜひ取り組んでもらって、このすばらしいアルゴリズムに自分のアイデアを存分に活用してほしい。

「遺伝的」アルゴリズムとは

 例えば、100個のパラメータで動くゴキブリがいたとする。
 パラメータはランダムで決定され、合計で50匹のゴキブリがいたとする。これらを、かけっこか何かで競争させると、みんな違うパラメータを持っているので、走るのが速い奴もいれば、遅い奴もいるだろう。そうして順位をつける。一位と二位で子供を産ませると、はたしてその子供は早い奴になれるだろうか。
 「遺伝的」には、なれる。
 そんな感じで、上位10匹程度で子供を産ませて、もともとの50匹のうちの、遅い奴らとメンバーチェンジをすると、前よりも優秀なやつが多い集団ができる。

 そしてまた競争させて、遺伝的に優秀な子供を産ませて、入れ替えて、また競争させて、、、、を繰り返していくと、いつかは、ものすごい早い奴が出てくるだろう。

 というのが遺伝的アルゴリズムの背景である。

 そもそもAIとは、他にもランダムフォレストやニューラルネットワークなどがあるが、そのほとんどが、最適化問題を解いていることと同じである。遺伝的アルゴリズム(GA)もその一つで、その概要は、多くの生物を出現させ、生存競争をさせた後、一番強い奴を決めるといったものである。

これは、以下の手順に分類できる。

         ⑴初期の集団を生成
         ⑵評価
         ⑶交叉(遺伝)
         ⑷突然変異
         ⑸集団交代(世代交代)
          あとは⑵~⑸の繰り返し

それぞれについてみていく。

 ⑴初期集団(第一世代)

 例はゴキブリの話だったが、もちろん設定は自分で考える。ここで、パラメータの集合を配列を見立てると、あたかも生物の遺伝子情報(ゲノム)のようである。
 初期の個体数と、パラメータの数を決めて、ランダムに個体を生成して、それを第一世代とする。

 ⑵評価

 何をもってランキング付けをするのかを決めて、それにのっとって個体一つ一つを評価する。上の例では、ゴキブリの「走る速さ」が評価基準となっている。

 ⑶交叉

 ここが、遺伝という概念を利用している工程である。評価の段階で優秀なやつ同士を親として、子供を産ませるときに、その子供のパラメータをどう決めるか考える。
 よく使用されるのはn点交叉であり、親の遺伝子(パラメータを配列としたもの)をn点で分割して、半分ずつ引き継ぐというものである。

 ⑷突然変異

 交叉で引き継がれた子の遺伝子を、一定の確率でランダムに改変する。これにより、同一個体が発生しても競争が膠着しない(つまり、ランダム性をもたせてより個体同士に差を生ませるということ)

まとめ

 どうだろう。これを考えた人はきっと天才に違いない。
 生物の生存モデルを参考にするとは、本当に興味深いアルゴリズムである。
 遺伝子操作とはまさにこのことだ。
 さて、次は実践してみよう。その身でこのアルゴリズムの美しさを味わうとよい。

 Pythonによる人工知能入門2 「遺伝的アルゴリズム~実践編~」

 ちなみに、どこかの論文によれば、FX自動取引などは他のAIよりもこれを使うと一番いい成績をとれるそう、、、?

 

nima_h
京都の学生です。 独学でプログラミングを学習しています。 習得言語はpython、java、C、Rで、画像処理、通信処理、遺伝的アルゴリズム、AIなどに手を出してきました。 基本的に、自分が興味を持ったところ、まとめておきたいことを載せていく予定です。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away