遺伝的アルゴリズム・遺伝的プログラミング
2017.10.21
東京工業大学 経営工学系 学士課程2年 松井諒生
1
目次
 遺伝的アルゴリズム ……….p3
 概要 …p4
 GAと進化の比較 …p7
 例題で学ぶ …p8
 多様性の重要性 …p15
 GAの優位性 …p21
 遺伝的プログラミング .……….p23
 GAとの共通点 …p23
 GAとの相違点 …p24
 GPを使う …p25
 例題 …p30
 GPの優位性 …p31
2
遺伝的プログラミングの前に!
遺伝的プログラミングは遺伝的アルゴリズムの
派生形です。
ですからまずは遺伝的アルゴリズムをざっと理
解しましょう!
3
遺伝的アルゴリズム(GA)
では遺伝的アルゴリズムとは何かというと、
「生物の進化からアイデアを得たアルゴリズム」です。
ここで「進化」とは下のように定義されます。
『生物個体群の性質が、世代を経るにつれて変化する現象である。また、その背景
にある遺伝的変化を重視し、個体群内の遺伝子頻度の変化として定義されることも
ある。』
(引用 Wikipedia 「進化」)
~ 概要 ~
4
遺伝的アルゴリズム(GA)
 つまり、世代が上がると、生物が持つ遺伝子が
変化していき、
 さらに、個体どうしで生存競争を繰り返すと、遺
伝子的により環境に適した個体が生き残っていく
ということ。(=淘汰)
~ 概要 ~
5
遺伝的アルゴリズム(GA)
この進化と淘汰をアルゴリズム
に応用すると…
解を遺伝子とみなした仮想生物
を仮想的な環境で進化させ、
その環境に最適な個体の誕生
=最適解の発見
として様々な問題における近似
解を見つけられます!!
~ 概要 ~
6
遺伝的アルゴリズム(GA)
以上のような生物の進化に模倣した操作を行うことで、最
後の世代(=現存する生物)の中で最も環境(=地球)に適し
た個体(=ヒト?)を最適解とみなすことができます!
遺伝的アルゴリズム
手順2.環境を作る(設定する)
手順1.仮想生物の初期世代を作る
手順3. 2を1において進化させる
生物の進化
1. 地球、海、など環境ができる
2. 太古の生物が誕生する
3. 環境に応じて進化していく
~ アルゴリズムと進化の比較 ~
7
*プログラムの便宜上、順番が入れ替わります。
遺伝的アルゴリズム(GA)
例題:ナップザック問題
重さと価値が決められた荷物がいくつかあり、荷重制限のあるナップザック
が最も価値が高くなるようにするにはどの荷物の組み合わせを詰め込めば
よいかという問題。
今回は荷物、ナップザックの設定は以下とします
~ 例題で学ぶ ~
荷
物
① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳
重
さ
65 39 9 72 87 35 88 19 4 69 57 11 90 88 1 56 33 12 91 7
価
値
27 82 85 71 91 58 22 15 63 11 10 12 78 90 5 25 90 3 80 2 荷重制限:200
8
手順1. 仮想生物の初期世代を作る
仮想生物の遺伝子配列の長さは
荷物数と同じく20,要素は0か1とします
こうすることで“1”となっている位置に対応する荷物を入れたパターンの解を遺伝子
配列としてあらわすことができます。
例) 荷物③,⑤を入れたパターンは[0,0,1,0,1,0,0,…0]の遺伝子配列を持つ仮想生物
これをランダムにいくつも作って初期世代とします
例題:ナップザック問題
9
~ 例題で学ぶ ~遺伝的アルゴリズム(GA)
手順2.環境を作る
ⅰ遺伝的操作
大きく分けて「交叉」「突然変異」の二つの遺伝的操作があります。
交叉は2体の親から子を作り出していく操作で、
突然変異は遺伝子配列を小確率でランダムに変異させる操作です。
これは図にすると簡単にわかります。↓
例)交叉 親1[1,1,…,1,1,1,…] 親2[0,0,…,0,0,0,…]
⇒子1[1,1,…,0,0,0,…] 子2[0,0,…,1,1,1,…]
突然変異 [1,1,1,1,1,…]⇒[1,1,0,1,1,…]
例題:ナップザック問題
10
~ 例題で学ぶ ~遺伝的アルゴリズム(GA)
手順2.環境を作る
ⅱ適応度(何を基準に適しているとするか)
この問題での適応度は荷物の合計価値と定義できます。
これが高いほど環境に適しているといえます。ただし荷重制限に注意です。
*適応度の計算 (P7の設定を用いて)
 [0,0,1,0,1,0,0,…0]のとき、合計価値は③と⑤の価値を合わせて、174
 [1,1,1,1,1,0,0,…0]のとき、合計価値は①~⑤の価値を合わせて、356
ただし上の場合は合計価値をそのまま適応度としますが、下の場合は重
さが272となり、荷重制限200を超えるため適応度は0とします。
(適応度は目的によって設定を変える必要有)
例題:ナップザック問題
11
~ 例題で学ぶ ~遺伝的アルゴリズム(GA)
手順2.環境を作る
ⅲ淘汰
 エリート選択
適応度が優れている個体のみを選ん
で次の世代に残します。
 ルーレット選択
適応度を重みとして、重み付きの乱
数選択をします。
など
例題:ナップザック問題
*ルーレット選択の必要性についてはp15~に記述
12
~ 例題で学ぶ ~遺伝的アルゴリズム(GA)
手順3.進化
基本的に遺伝→適応度評価→淘汰の繰り返しですが、その内
容は問題や適応度の設定のしかたによって変更します。
ナップザック問題では以下(オレンジ)を選択。
環境
遺伝 適応度評価 淘汰
交叉 突然変異
適合度関数
ルーレット
選択
エリート
選択
最大化
最小化
例題:ナップザック問題
13
~ 例題で学ぶ ~遺伝的アルゴリズム(GA)
以上を実装して求めた過程と解は以下のようになります。
(世代ごとの最優秀解を示す。)
start evlove
Generation0:keep elite
Generation1:change elite ==> [1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0],score = 302
Generation2:keep elite
Generation3:keep elite
Generation4:keep elite
Generation5:change elite ==> [1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1],score = 304
Generation6:change elite ==> [1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0],score = 350
Generation7:change elite ==> [1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1],score = 352
Generation8:keep elite
Generation9:change elite ==> [1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0],score = 408
Generation10:keep elite
Generation11:change elite ==> [1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0],score = 413
・
・
Generation40:keep elite
Generation41:change elite ==> [0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0],score = 414
Generation42:change elite ==> [0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0],score = 419
Generation43:keep elite
・
・
Generation62:change elite ==> [0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1],score = 456
・
・
soution = [0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1],score = 456
14
~ 例題で学ぶ ~遺伝的アルゴリズム(GA)
世代が進む
elite:世代ごとの最優秀解
change elite:
最優秀解が入れ替わる
ここで最終的な最
優秀解が誕生
解として出力
進化開始
Generarion:世代の番号
遺伝的アルゴリズム(GA)
Q なぜ単に適応度を高いものだけを残すのではいけないのか
脊椎動物の進化の図
15
~ 多様性の重要性 ~
魚類
爬虫類
両生類
鳥類
哺乳類
脊椎動物
プログラム上では、哺乳類に進化させたいとします。
(哺乳類の適合度を最大に設定する)
遺伝的アルゴリズム(GA)
Q なぜ単に適応度を高いものだけを残すのではいけないのか
脊椎動物の進化の図
16
~ 多様性の重要性 ~
適応度
時間軸
魚類
爬虫類
両生類
鳥類
哺乳類
脊椎動物
しかし、適応度と時間軸は必ずし
も一致するわけではありません。
遺伝的アルゴリズム(GA)
Q なぜ単に適応度を高いものだけを残すのではいけないのか
脊椎動物の進化の図
17
~ 多様性の重要性 ~
適応度
時間軸
魚類
爬虫類
両生類
鳥類
哺乳類
脊椎動物
この時点のみを見ると魚類
が最も優れています。
遺伝的アルゴリズム(GA)
Q なぜ単に適応度を高いものだけを残すのではいけないのか
脊椎動物の進化の図
18
~ 多様性の重要性 ~
適応度
時間軸
魚類
爬虫類
両生類
鳥類
哺乳類
脊椎動物
この時点のみを見ると魚類
が最も優れています。
従って、適応度の高いものだけ
を残すと魚類しか残りません。
遺伝的アルゴリズム(GA)
Q なぜ単に適応度を高いものだけを残すのではいけないのか
脊椎動物の進化の図
19
~ 多様性の重要性 ~
適応度
時間軸
魚類
爬虫類
両生類
鳥類
哺乳類
脊椎動物
しかし魚類だけが生き残るとそこで進化
が止まり、哺乳類には進化できません。
遺伝的アルゴリズム(GA)
Q なぜ単に適応度を高いものだけを残すのではいけないのか
脊椎動物の進化の図
20
~ 多様性の重要性 ~
適応度
時間軸
魚類
爬虫類
両生類
鳥類
哺乳類
脊椎動物
このように毎世代、適
応度が高いもののみ
を残していると、哺乳
類にはたどり着かな
いのです!
遺伝的アルゴリズム(GA)
Q なぜこのアルゴリズムが優れているのか
• ナップザック問題は荷物の数が多いと、現実的な時間では解けないこと
が証明されています。(「NP困難」と呼ばれる)
• つまり、単純計算(全探索)では今回の例題はスーパーコンピューターで
も解けないのです。
• このように計算量が爆発し、数学的なアルゴリズムで解くことが難しい問
題でも遺伝的アルゴリズムを使えばPCだけで解けるのです!
(ほぼ近似解が求められる)
21
~ GAの優位性 ~
遺伝的アルゴリズム
少し長くなりましたが、
遺伝的アルゴリズムはここで終わりです。
ここまでわかれば遺伝的プログラミングも難
しくありません。
22
遺伝的プログラミング(GP)
遺伝的アルゴリズムとの共通点
 適応度を基準に解の仮想生物を進化させる
 交叉、突然変異などの遺伝操作をほどこす
 最適解を求める
23
~ GAとの共通点 ~
遺伝的プログラミング(GP)
遺伝的アルゴリズムとの相違点
 求める解は「関数」 (⇔GA:配列)
つまり「関数」を一つの仮想生物として、一番“よい”関数を見つけることが目的。
 関数を表現する遺伝子はツリー状 (⇔GA:直線状)
GAで進化させた、「解の配列」が、「関
数の木」に置き換わっただけ
24
~ GAとの相違点 ~
遺伝的プログラミング(GP)
図にするとこんな感じ。
Q では、ツリー状遺伝子とは?
𝑥(2 − 𝑥)
(
𝑥
𝑦
+ 𝛼𝑒−𝑧
)
𝛽
25
~ GPを使う ~
-
χ2
×
χ
β
×÷
^
+
χ y α exp
-
z
遺伝的プログラミング(GP)
1. まず簡単な関数(四則演算など)の葉を一つ作る
この葉は関数の引数の分だけ枝を持つ
例)四則演算-枝2つ、sin-枝1つ、max-枝はいくつでもよい など。
2.関数の葉に変数か定数の葉、またはもう一度関数の葉をくっつける。
3.葉が不足している枝がなくなったら完成。
Q この木はどう作るのか?
まずは一つ関数の葉 枝の先にさらに葉を 葉が不足してる枝がなくなれば完成
-
+
x+ -
y5
+
x
26
~ GPを使う ~
*遺伝的プログラミングでは特定の関数の木を作
ることはなく、主にランダムな木を生成します。
遺伝的プログラミング(GP)
1. 変数に値を代入する
2. 関数葉の枝の下側が定数のみである部分を計算してまとめて一つの定数
にする
3. 2を繰り返す
4. 一つの値が出る
この操作はx+(5-y)にx=3,y=1を代入するのと同値
Q この木はどう使うのか?
-
y5
+
x -
15
+
3
4
+
3 7
x=3 , y=1 5-1=4 3+4=7
計算
まとめる
代入
まとめる
計算
27
~ GPを使う ~
遺伝的プログラミング(GP)
 交叉は枝を交換する
(*植物の木の無性生殖とは違います。仮想的な遺伝操作です)
Q どのように遺伝操作を施すのか?
3 × ( 𝑥 × 4 + 𝑥)
3 × (𝑥 × 𝑥)
3 + 𝑥 − (
2
( 𝑥 × 4 + 𝑥)
)
3 + 𝑥 − (
2
𝑥 × 𝑥
)
28
~ GPを使う ~
3
×
×
+
χ
χ 4
-
+ ÷
χ3 ×2
χ χ
×
+
χ
χ 4
-
+ ÷
χ3 23
×
×
χ χ
遺伝的プログラミング(GP)
 突然変異は一部分をほかの木に置き換える (ほかにも手法はある)
Q どのように遺伝操作を施すのか?
-
y5
+
x
-
×5
+
x
sin
y
-
9 x
x+(5-y) x+[5-{(9-x)×siny}]
29
~ GPを使う ~
遺伝的プログラミング(GP)
例題:関数同定問題
変数群とそれに対応した値がいくつか示されているとき、それらをすべて満たす関
数を求める問題。
例) 下のような表を満たす関数を求める。
ちなみに答えはx^2+2y+3x+5となります。人の手で求めるのは難しいですが、関数
の木をつくって誤差の和を適合度とし、p13の最小化のサイクルを回せば簡単に求
められます。(求めた過程、解は省略)
x y 値
26 35 829
8 24 141
20 1 467
33 11 1215
37 16 1517
「集合知プログラミング」 オライリージャパン より
30
~ 例題 ~
前頁ではすべてのデータに対して、それらすべて満たす関数を求めま
した。しかし、すべてが完全に一致することのないデータに対してもと
ても有効です。
すべての点が
正確にフィット
31
遺伝的プログラミング(GP) ~ GPの優位性 ~
例えば、物件の徒歩時間と家賃のようなデータをとったとします。その
際、調査対象物件が多ければ同じ時間でも違う家賃になることがあり
ます。この場合、すべてのデータを満たす一つの関数は存在しません。
これらすべてを満た
す関数はできない
32
遺伝的プログラミング(GP) ~ GPの優位性 ~
そこでGPができるのは近似関数の同定です。
機械学習を用いない場面では、このようなデータは統計的に処理され、
データの分布を仮定して、線形回帰などの統計モデルによって近似曲
線が求められます。
1次関数に近似。
y=-x/4+10
統計モデルでは分布
は人が定める
33
~ GPの優位性 ~遺伝的プログラミング(GP)
*機械学習を用いるか用いな
いかは別の判断が必要。
しかし機械学習を用いる場面では、それらの「関数の形状」を知ること
は重要でなく(もちろんあるに越したことはない)、次にある値を代入し
たときにどんな値が出るかという「予測」さえできれば十分です。そこ
でGPを使えば、形を決めない、よりデータにフィットした関数がわかり、
精度の高い「予測」ができるのです。
GPによる近似。
式は不可視でよい
分布を定めない
より正確な予測
34
遺伝的プログラミング(GP) ~ GPの優位性 ~
参考文献 出典
GP例題データ : 「集合知プログラミング」 オライリージャパン
以上、遺伝的アルゴリズムおよび遺伝的プログラミングの解説
でした。
僕もまだまだ勉強中ですので、ご指摘やアドバイスいただける
と嬉しいです。
ご覧いただきありがとうございました。
松井諒生
35

遺伝的アルゴリズム・遺伝的プログラミング