1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

OneMax問題を例に遺伝的アルゴリズムを見る(概要編)

Last updated at Posted at 2021-01-08

はじめに

前回、キリンを例に遺伝的アルゴリズムを見てみました。

今回はOneMax問題という簡単な数学的問題を例に見ることで、プログラムに寄せた観点から説明しようと思います。

OneMax問題とは

まずはOneMax問題とは何かについて説明します。非常に簡単なので敬遠しないでください😄

OneMax問題とは、例えば10個の0と1の数字からなる、[1, 0, 1, 0, 0, 1, 1, 1, 0, 1]の様な数列の和を最大化するにはどうすればいいかという問題です。

人間からするとあまりに簡単ですよね。全部を1にして[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]となればこの数列の和は最大になります。

この超簡単な問題を敢えて遺伝的アルゴリズムを使って解いてみようというのがこの記事の主旨です。

#vOneMax問題を遺伝的アルゴリズムで解く流れ
前回の記事「キリンを例に遺伝的アルゴリズムを見る」と同じ流れで説明していきますので適宜見比べてみてください。

① 個体集団の作成

まずは個体集団を作ります。

ランダムに0と1を持つ配列をたくさん作成します。
本当はもっとたくさん作りますが、今回は説明の都合上6個としましょう。
image.png

② 個体の評価

それぞれの個体を評価して点数をつけます。

今回の評価ポイントは数列の合計ですので、それぞれの数列の合計を算出した値を点数とします。例えば、[0, 0, 0, 1, 0, 0, 0, 0, 0, 1]の点数は2点です。
image.png

③ 個体の選択

評価の高いものを次の世代へ受け継ぐために残します。
image.png

④ 交叉

③で選択された個体から子供を作ります。

2つの個体をある場所で2つに分け、それらの後半同士を交換します。
分ける場所はランダムに選びます。

最初に6個の個体を作ったので同じく6個の個体を作ります。
一部の個体に関しては敢えて交叉させずに③で選択された個体をそのまま残すのもありです。
image.png
image.png

交叉によってできたのがこちら
image.png

⑤ 突然変異

進化の多様性を保つために一部の個体に対して突然変異を起こします。
突然変異が起きる場所も変異後の値もランダムです。
image.png

これで次の世代の個体集団ができました。
最初に比べて1が多くなっているのがわかると思います。↓
image.png

⑥ ②〜⑤を繰り返す

新しくできた個体集団に②から⑤までを繰り返し行います。

もう一度②から⑤をやるとこんな感じになります。↓(ランダム要素が多いためあくまでもイメージです。)
image.png

最初の個体集団と比べてだんだん1が多くなってきましたね。

あと10世代も繰り返せばこんな感じになるんじゃないでしょうか。↓
image.png

こうするとほとんどの個体が10点や9点となり、これ以上点数が上がることがなくなります。

そして最後の世代で最も良い個体を最適解として導き出します。

こうして[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]が答えとなるんですね。

まとめ

人間からしたら「いや全部1にすればいいやん」て話なんですが、敢えて遺伝的アルゴリズムを使って解くとこの様な流れになります。

遺伝的アルゴリズムのすごいところは、これと同じ手順を踏むだけで人間には到底計算できない様な問題も答えが出せてしまうところです。

実装が簡単というところが遺伝的アルゴリズムの最大のメリットと言えます。

Twitter@ruemura3

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?