遺伝的アルゴリズム(genetic algorithm)を始めよう!

178
Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved. 遺伝的アルゴリズム を始めよう 2014年11月17日 先端IT活用推進コンソーシアム クラウド・テクノロジー活用部会 勉強会資料 岡村 和英(株式会社テクリエ)

Upload: kazuhide-okamura

Post on 05-Jul-2015

1.439 views

Category:

Technology


6 download

DESCRIPTION

2014年11月度 AITC クラウド・テクノロジー活用部会 勉強会資料 遺伝的アルゴリズム (Genetic Algorithm)を始めよう!

TRANSCRIPT

Page 1: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

遺伝的アルゴリズム

( )

を始めよう2014年11月17日

先端IT活用推進コンソーシアムクラウド・テクノロジー活用部会

勉強会資料

岡村 和英(株式会社テクリエ)

Page 2: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

Introduction

2

Page 3: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

3

Genetic Algorithms Programing Library for JavaScript

https://github.com/kzokm/ga.js

Samples of Genetic Algorithm

http://ga-samples.herokuapp.com/

Page 4: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

Today’s Topics

4

Page 5: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

5

What’s GAMerits of GA

Genetic GlossaryGenetic Algorithms

Chromosome EncodingsEncoding ExamplesGenetic Operations

Selection, Crossover, MutationNew Generation Alternation Model

Known IssuesSummary

Page 6: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

What’s GA

6

Page 7: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

7

生物進化における遺伝と

適者生存による自然淘汰の仕組みをソフトウェア的に模すことで

複雑な問題に対する最適解を

探索する手法

Page 8: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

8

ある命題に対する解の候補を遺伝子(gene)とその集合体である染色体(chromosome)で表現した個体(individual)を複数用意し、

適応度(fitness)の高い個体を優先して交叉(crossover)、突然変異(mutation)

などの操作を繰り返しながら最適解の探索をおこなう

Page 9: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

9

N700系新幹線フロントノーズ(エアロ/ダブルウィング)の空力設計に際し、GAを用いて約5000パターンのコンピュータシミュレーションを行った結果からデザインを決定した。

Page 10: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

10

ST5計画NASAのニュー・ミレニアム計画の一環として行われた技術試験計画 Space Technology 5 に用いられた3機の人工衛星に搭載されたアンテナの形状は、GAを用いて設計された。

Page 11: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

Merits of GA

11

Page 12: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

12

評価関数の可微分性や単峰性などの知識がない場合であっても適用可能。

GAの特徴

Page 13: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

13

必要とされる条件は評価関数の全順序性と、探索空間が位相(topology)を持っていること。

GAの特徴

Page 14: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

14

遺伝子の表現の仕方によって、組合せ最適化問題やNP困難な問題などのさまざまな問題に対する適用が可能。

GAの特徴

Page 15: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

GeneticGlossary

15

Page 16: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

16

遺伝子(gene)

個体の形質を表すための基本となる構成要素

Page 17: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

17

染色体(chromosome)

複数の遺伝子の集まり

Page 18: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

18

個体(individual)

1つまたは複数の染色体によって表現される自律的な個命題に対する解の候補

Page 19: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

19

集団(population)

様々な個体の集まり

Page 20: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

20

遺伝子座(locus)

染色体上における各遺伝子の位置

Page 21: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

21

対立遺伝子(allele)

ある遺伝子座において遺伝子がとりうる別の値

Page 22: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

A G A T C G Y W Z X Z

遺伝子型(因子型; genotype)

遺伝子を用いた内部表現

22

Page 23: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

表現型(phenotype)

遺伝子によって発現する形質の外部表現

23

Page 24: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

符号化(encoding)

表現型から遺伝子型への変換

24

Page 25: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

復号化(decoding)

遺伝子型から表現型への変換

25

Page 26: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

Genetic

Algorithms

26

Page 27: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

27

1. 解を表現する符号化方法を決定する。

Page 28: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

28

1. 解を表現する符号化方法を決定する。

2. N個のランダムな個体を含む集団を作成する。これを「現世代」と呼ぶ。

Page 29: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

29

1. 解を表現する符号化方法を決定する。

2. N個のランダムな個体を含む集団を作成する。これを「現世代」と呼ぶ。

3. N個の個体を格納可能な集団を用意する。これを「次世代」と呼ぶ。

Page 30: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

30

1. 解を表現する符号化方法を決定する。

2. N個のランダムな個体を含む集団を作成する。これを「現世代」と呼ぶ。

3. N個の個体を格納可能な集団を用意する。これを「次世代」と呼ぶ。

4. 評価関数を用いて、現世代の各個体の適応度をそれぞれ計算する。

Page 31: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

31

1. 解を表現する符号化方法を決定する。

2. N個のランダムな個体を含む集団を作成する。これを「現世代」と呼ぶ。

3. N個の個体を格納可能な集団を用意する。これを「次世代」と呼ぶ。

4. 評価関数を用いて、現世代の各個体の適応度をそれぞれ計算する。

5. ある確率で次の3つの操作を行い、その結果を次世代に保存する。

1) 現世代から2つの個体を選択する。

2) 選択されれた個体を用いて交叉を行い、子孫(offspring)を生成する。

3) 交叉によって生成された子孫に対して、突然変異を適用する。

Page 32: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

32

1. 解を表現する符号化方法を決定する。

2. N個のランダムな個体を含む集団を作成する。これを「現世代」と呼ぶ。

3. N個の個体を格納可能な集団を用意する。これを「次世代」と呼ぶ。

4. 評価関数を用いて、現世代の各個体の適応度をそれぞれ計算する。

5. ある確率で次の3つの操作を行い、その結果を次世代に保存する。

1) 現世代から2つの個体を選択する。

2) 選択されれた個体を用いて交叉を行い、子孫(offspring)を生成する。

3) 交叉によって生成された子孫に対して、突然変異を適用する。

6. 次世代の個体数がN個になるまで 5 の操作を繰り返す。

Page 33: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

33

4. 評価関数を用いて、現世代の各個体の適応度をそれぞれ計算する。

5. ある確率で次の3つの操作を行い、その結果を次世代に保存する。

1) 現世代から2つの個体を選択する。

2) 選択されれた個体を用いて交叉を行い、子孫(offspring)を生成する。

3) 交叉によって生成された子孫に対して、突然変異を適用する。

6. 次世代の個体数がN個になるまで5の操作を繰り返す。

7. 次世代を現世代に移行し、命題が収束するまで3~6の手順を繰り返す。この結果を「最終世代」と呼ぶ。命題の収束を判定する方法として・・・

Page 34: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

34

6. 次世代の個体数がN個になるまで上記の操作を繰り返す。

7. 次世代を現世代に移行し、命題が収束するまで3~6の手順を繰り返す。この結果を「最終世代」と呼ぶ。

命題の収束を判定する方法として、以下のような場合が用いられる。

• 集団中の最大適応度が、ある閾値より大きくなった場合

• 集団全体の平均適応度が、ある閾値より大きくなった場合

• 集団の適応度増加率が、ある閾値以下の世代が一定期間続いた場合

• 世代交代の回数が規定の最大世代数に達した場合

Page 35: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

35

7. 次世代を現世代に移行し、命題が収束するまで3~6の手順を繰り返す。この結果を「最終世代」と呼ぶ。命題の収束を判定する方法として、以下のような場合が用いられる。

・集団中の最大適応度が、ある閾値より大きくなった場合

・集団全体の平均適応度が、ある閾値より大きくなった場合

・集団の適応度増加率が、ある閾値以下の世代が一定期間続いた場合

・世代交代の回数が規定の最大世代数に達した場合

8. 最終世代の中で最も適応度の高い個体

を「解」として出力する。

Page 36: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

Chromosome

Encodings

36

Page 37: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

37

解の特徴を遺伝子として表現する

Page 38: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

38

バイナリエンコーディング(binary encoding)

順列エンコーディング(permutation encoding)

実数値エンコーディング(real encoding)

木構造エンコーディング(tree encoding)

Page 39: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

39

バイナリエンコーディング(binary encoding)

順列エンコーディング(permutation encoding)

実数値エンコーディング(real encoding)

木構造エンコーディング(tree encoding)

Page 40: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

40

バイナリエンコーディング(binary encoding)

各遺伝子を0, 1のビットとして表現する符号化方法

Page 41: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

41

バイナリエンコーディング(binary encoding)

染色体A 1001011101101染色体B 1010011010111

Page 42: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

42

バイナリエンコーディング(binary encoding)

順列エンコーディング(permutation encoding)

実数値エンコーディング(real encoding)

木構造エンコーディング(tree encoding)

Page 43: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

43

順列エンコーディング(permutation encoding)

各遺伝子を順序を示す数字として表現する符号化方法

Page 44: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

44

順列エンコーディング(permutation encoding)

染色体A 2 7 6 4 1 8 3 5 9染色体B 4 6 1 9 5 7 3 8 2

Page 45: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

45

順列エンコーディング(permutation encoding)

巡回セールスマン問題や仕事の順序などの並べ替え問題の表現に用いられる

Page 46: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

46

バイナリエンコーディング(binary encoding)

順列エンコーディング(permutation encoding)

実数値エンコーディング(real encoding)

木構造エンコーディング(tree encoding)

Page 47: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

47

実数値エンコーディング(real encoding)

各遺伝子を数値(または文字)として表現する符号化方法

Page 48: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

48

実数値エンコーディング(real encoding)

染色体A 0.51 2.83 3.12 1.50染色体B AGTCATGCAGCATTA染色体C 前進 前進 右 後退 左

Page 49: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

49

実数値エンコーディング(real encoding)

実数値データなど、バイナリエンコーディングでは表現が難しい場合に用いる

Page 50: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

50

バイナリエンコーディング(binary encoding)

順列エンコーディング(permutation encoding)

実数値エンコーディング(real encoding)

木構造エンコーディング(tree encoding)

Page 51: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

51

木構造エンコーディング(tree encoding)

染色体を1本の紐(配列)ではなく、木構造データとして表現する符号化方法

Page 52: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

52

木構造エンコーディング(tree encoding)

α ×

β 2

染色体A

α+(β×2)

表現型

Page 53: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

53

木構造エンコーディング(tree encoding)

遺伝的プログラミング(Genetic Programming; GP)や進化的プログラミング (Evolutionary Programming; EP)などの表現に用いられる

Page 54: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

EncodingExamples

54

Page 55: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

55

ナップザック問題(Knapsack Problem)

容量Cのナップザックが1つと、各々の価値がPi、容積がCiであるところのn個の品物Eiが与えられたとき、Cを超えない範囲でいくつかの品物をナップザックに詰め、入れた品物の価値の和を最大化するにはどの品物を選べばよいか?

Page 56: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

56

ナップザック問題を

バイナリエンコーディングで表現してみる

Page 57: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

57

n個の荷物 → 遺伝子長(L) = n

i番目の荷物 → 遺伝子座(p) = i

荷物Eiを入れる → 遺伝子[i] = 1

荷物Eiを入れない → 遺伝子[i] = 0

適応度 → 持っている荷物の総価値

ナップザック問題

Page 58: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

58

荷物 E1 E2 E3 E4 E5 E6 E7 … En

重さ(Ci) Kg 0.9 1.1 0.7 1.4 0.5 1.3 1.1 1.6

価値(Pi) $ 1.0 1.3 0.9 1.5 0.5 1.1 1.2 1.4

遺伝子表現 [ 1 0 0 1 0 1 0 … 0 ]

重さ≦ C Kg 0.9 + 1.4 + 1.3 + …

適応度 1.0 + 1.5 + 1.1 + …

ナップザック問題

Page 59: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

59

循環セールスマン問題(Travelling Salesman Problem)

n個の都市Ciと、それぞれの都市間の距離Di,jが与えられているとき、最初の都市を出発し、全ての都市を経由して、同じ都市に戻ってくるルートのうち、最短のルートを求めよ。

Page 60: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

60

循環セールスマン問題を

順列エンコーディングで表現してみる

Page 61: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

61

n個の都市 → 遺伝子長(L) = n

i番目に訪れる → 遺伝子座(p) = i

都市Cx→ 遺伝子[i] = x

適応度 → 循環ルートの総距離

循環セールスマン問題

Page 62: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

62

ルート 1 2 3 4 5 6 7 … n

訪れる都市 C5 C8 C2 C7 C9 C1 C3 C4

次の都市までの距離

D5,8 D8,2 D2,7 D7,9 D9,2 D1,3 D3,x C4,5

遺伝子表現 [ 5 8 2 7 9 1 3 … 4 ]

適応度1

D5,8 + D8,2 + D2,7 + D7,9 + D9,2 + D1,3 + D3,x + … + C4,5

循環セールスマン問題

Page 63: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

GeneticOperations

63

Page 64: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

64

選択(selection)

交叉(crossover)

突然変異(mutation)

繁殖(reproduction)

Page 65: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

繁殖(reproduction)

65

選択(selection)

交叉(crossover)

突然変異(mutation)

Page 66: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

66

適応度に基づいて、個体を増やしたり減らしたりするための対象を選び出す操作。

生物の自然淘汰をモデル化したもの。

選択 (selection)

Page 67: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

67

ルーレット方式(roulette wheel selection)

ランキング方式(ranking selection)

トーナメント方式(tournament selection)

エリート主義(elitism)

Page 68: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

68

ルーレット方式(roulette wheel selection)

ランキング方式(ranking selection)

トーナメント方式(tournament selection)

エリート主義(elitism)

Page 69: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

69

集団をルーレット盤に見立て、ランダムな選択を行う方式。

各個体の適応度が、ルーレット盤の面積と比例しており、適応度が高い染色体ほど選ばれる確率が高くなる。

ルーレット方式(roulette wheel selection)

Page 70: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

70

ルーレット方式(roulette wheel selection)

個体 適応度

A 32

B 12

C 24

D 18

E 10

Page 71: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

71

𝑝𝑖 =𝑓 𝑖

𝑛=1𝑁 𝑓 𝑛

𝑝𝑖 := ある個体が選択される確率

𝑓 𝑖 := 個体の適応度、𝑁 := 集団サイズ

ルーレット方式(roulette wheel selection)

Page 72: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

72

適応度が正であることが前提。

個体間の適応度の差が大きい場合、適応度の高い個体の選ばれる確率が高くなりすぎ、局所的な最適解への初期収束の原因となる。

ルーレット方式(roulette wheel selection)

Page 73: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

73

ルーレット方式(roulette wheel selection)

ランキング方式(ranking selection)

トーナメント方式(tournament selection)

エリート主義(elitism)

Page 74: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

74

ルーレット方式の変形。

適応度によって各個体のランク付けを行い、「1位なら確率𝑝1、2位なら確率𝑝2、・・・」と事前に決められた確率を適用する方式。

ランキング方式(ranking selection)

Page 75: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

75

ランキング方式(ranking selection)

個体 適応度

A 32

B 12

C 24

D 18

E 10

順位 選択確率

1 0.30

2 0.20

3 0.20

4 0.15

5 0.15

Page 76: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

76

個体間の適応度の差が選択確率に影響されないが、適応度に差がない個体であっても選択確率に大きな差が生じる可能性がある。

ランク付けを行うためには世代毎にソートを行うことが必要。

ランキング方式(ranking selection)

Page 77: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

77

ルーレット方式(roulette wheel selection)

ランキング方式(ranking selection)

トーナメント方式(tournament selection)

エリート主義(elitism)

Page 78: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

78

予め決めた個体数(トーナメントサイズ)をランダムに抽出し、その中で最も適応度の高い個体を選択する方式。

トーナメント方式(tournament selection)

Page 79: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

79

トーナメントサイズを変更することで、選択圧をコントロールすることが可能。

トーナメントサイズを大きくすることで選択圧を高めることができるが、初期収束の原因となる。

トーナメント方式(tournament selection)

Page 80: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

80

ルーレット方式(roulette wheel selection)

ランキング方式(ranking selection)

トーナメント方式(tournament selection)

エリート主義(elitism)

Page 81: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

81

予め決めた個数の、最も適応度の高い個体をそのまま次世代にコピーする。

エリート主義(elitism)

Page 82: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

82

世代間で適応度の最大値が下がらないことが保証される。

エリートの遺伝子が集団の中で広まりすぎて、解の多様性が失われる。

エリート主義(elitism)

Page 83: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

繁殖(reproduction)

83

交叉(crossover)

選択(selection)

突然変異(mutation)

Page 84: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

84

選ばれた2つの個体の遺伝子の一部を入れ替える操作。

生物の交配をモデル化したもの。

交叉(crossover)

Page 85: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

85

各々の染色体において、交叉が発生する確率。

通常、80%~95%として設定する。

交叉確率(Pc)

Page 86: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

86

基本的な交叉方式

Page 87: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

87

一点交叉(single point crossover)

二点交叉(two-point crossover)

多点交叉(multi-point crossover)

一様交叉(uniform crossover)

基本的な交叉

Page 88: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

88

一点交叉(single point crossover)

二点交叉(two-point crossover)

多点交叉(multi-point crossover)

一様交叉(uniform crossover)

基本的な交叉

Page 89: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

89

遺伝子が交叉する場所(交叉点; crossover point)をランダムに決定し、その場所より後ろの遺伝子を入れ替える。

一点交叉(single point crossover)

基本的な交叉

Page 90: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

90

染色体1 1001011101101

染色体2 1010011010111

子孫1 1001011010111

子孫2 1010011101101

一点交叉(single point crossover)

基本の交叉

Page 91: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

91

効率が低いため、現在はあまり用いられていない。

一点交叉(single point crossover)

基本的な交叉

Page 92: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

92

一点交叉(single point crossover)

二点交叉(two-point crossover)

多点交叉(multi-point crossover)

一様交叉(uniform crossover)

基本的な交叉

Page 93: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

93

2つの交叉点をランダムに決定し、その間の遺伝子を入れ替える。

二点交叉(two-point crossover)

基本的な交叉

Page 94: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

94

染色体1 1001011101101

染色体2 1010011010111

子孫1 1001011011101

子孫2 1010011100111

二点交叉(two-point crossover)

基本的な交叉

Page 95: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

95

一点交叉(single point crossover)

二点交叉(two-point crossover)

多点交叉(multi-point crossover)

一様交叉(uniform crossover)

基本的な交叉

Page 96: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

96

3つ以上の交叉点をもつ方法。

二点交叉や一様交叉より良い値が得られることが殆どないため、あまり用いられていない。

多点交叉(multi-point crossover)

基本的な交叉

Page 97: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

97

一点交叉(single point crossover)

二点交叉(two-point crossover)

多点交叉(multi-point crossover)

一様交叉(uniform crossover)

基本的な交叉

Page 98: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

98

各遺伝子のそれぞれを所定の確率(通常は1/2)で入れ替える。

一様交叉(uniform crossover)

基本的な交叉

Page 99: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

99

染色体1 1001011101101

染色体2 1010011010111

子孫1 1011011001101

子孫2 1000011110111

一様交叉(uniform crossover)

基本的な交叉

Page 100: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

100

2点交叉が得意とする問題を苦手とし、逆の性質を示す。

ヒッチハイキング問題への対策として用いられる。

一様交叉(uniform crossover)

基本的な交叉

Page 101: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

101

順列エンコーディングに

対応した交叉方式

Page 102: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

102

同じ遺伝子が

重複しないこと

順列の交叉

Page 103: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

103

循環交叉(cycle crossover; CX)

順序交叉(order crossover; OX)

一様順序交叉(order-based crossover; OX2)

一様位置交叉(position-based crossover; POX)

順列の交叉

Page 104: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

104

部分写像交叉(partially mapped crossover; PMX)

サブツアー交換交叉(subtour exchange crossover; SXX)

辺組換え交叉(edge recombination crossover; ERX)

枝組立て交叉(edge assembly crossover; EAX)

順列の交叉

Page 105: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

105

循環交叉(cycle crossover; CX)

順序交叉(order crossover; OX)

一様順序交叉(order-based crossover; OX2)

一様位置交叉(position-based crossover; POX)

順列の交叉

Page 106: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

106

双方の親から重複しない組み合わを選んで、遺伝子の一部ずつを受け継ぐ。

循環交叉(cycle crossover; CX)

順列の交叉

Page 107: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

107

染色体1 1 2 3 4 5 6 7 8 9

染色体2 8 4 1 2 5 7 9 3 6サイクル# 1 2 1 2 3 4 4 1 4

子孫1 1 4 3 2 5 7 9 8 6

子孫2 8 2 1 4 5 6 7 3 9

循環交叉(cycle crossover; CX)

順列の交叉

Page 108: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

108

循環交叉(cycle crossover; CX)

順序交叉(order crossover; OX)

一様順序交叉(order-based crossover; OX2)

一様位置交叉(position-based crossover; POX)

順列の交叉

Page 109: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

109

片方の親からは一部をそのまま受け継ぎ、残りの部分についてはもう片方の親から相対的な順序を受け継ぐ。

順序交叉(order crossover; OX)

順列の交叉

Page 110: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

110

染色体1 1 2 3 4 5 6 7 8 9

染色体2 8 4 2 7 5 1 9 3 6

子孫1 1 2 3 4 8 7 5 9 6

子孫2 8 4 2 7 1 3 5 6 9

順序交叉(order crossover; OX)

順列の交叉

Page 111: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

111

循環交叉(cycle crossover; CX)

順序交叉(order crossover; OX)

一様順序交叉(order-based crossover; OX2)

一様位置交叉(position-based crossover; POX)

順列の交叉

Page 112: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

112

一様順序交叉(order-based crossover; OX2)

順列の交叉

一様に選んだ遺伝座について、一方の親の遺伝子の出現順序に従って、他方の親の遺伝子を並べ替えたものを受け継ぐ。

Page 113: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

113

染色体1 1 2 3 4 5 6 7 8 9

染色体2 8 4 2 7 5 1 9 3 6

子孫1 4 2 3 7 5 6 1 8 9

子孫2 8 2 4 6 5 1 9 3 7

一様順序交叉(order-based crossover; OX2)

順列の交叉

Page 114: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

114

循環交叉(cycle crossover; CX)

順序交叉(order crossover; OX)

一様順序交叉(order-based crossover; OX2)

一様位置交叉(position-based crossover; POX)

順列の交叉

Page 115: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

115

一様位置交叉(position-based crossover; POX)

順列の交叉

一様に選んだ遺伝子を入れ替え、残りの遺伝子については親と同じ相対順序になるように配置する。

Page 116: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

116

染色体1 1 2 3 4 5 6 7 8 9

染色体2 8 4 2 7 5 1 9 3 6

子孫1 2 4 3 7 5 1 9 6 8

子孫2 8 2 5 4 1 6 7 9 3

一様位置交叉(position-based crossover; POX)

順列の交叉

Page 117: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

117

部分写像交叉(partially mapped crossover; PMX)

サブツアー交換交叉(subtour exchange crossover; SXX)

辺組換え交叉(edge recombination crossover; ERX)

枝組立て交叉(edge assembly crossover; EAX)

順列の交叉

Page 118: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

118

部分写像交叉(partially mapped crossover; PMX)

順列の交叉

片方の親P1からは一部をそのまま受け継ぎ、残りの部分についてはもう片方の親

P2から重複しない遺伝子をそのまま受け継ぐ。

重複する遺伝子については、P1上で該当

する遺伝子が占める遺伝子座を求め、P2

上の同じ遺伝子座に存在する遺伝子を受け継ぐ。

Page 119: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

119

染色体1 1 2 3 4 5 6 7 8 9

染色体2 8 4 9 7 5 1 2 3 6

子孫1 1 2 3 4 5 8 7 9 6

子孫2 8 4 9 7 5 6 2 1 3

部分写像交叉(partially mapped crossover; PMX)

順列の交叉

Page 120: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

120

部分写像交叉(partially mapped crossover; PMX)

サブツアー交換交叉(subtour exchange crossover; SXX)

辺組換え交叉(edge recombination crossover; ERX)

枝組立て交叉(edge assembly crossover; EAX)

順列の交叉

Page 121: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

121

サブツアー交換交叉(subtour exchange crossover; SXX)

順列の交叉

それぞれの親の間である共通する数字の組み合わせからなる部分順列が存在する場合に、それを交換する。さらに入れ替えた部分順列を逆にしたものを含め、合計4個の子を生成する。

Page 122: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

122

染色体1 1 2 3 4 5 6 7 8 9

染色体2 8 1 7 5 3 4 2 9 6

子孫1 1 5 3 4 2 6 7 8 9子孫2 8 1 7 2 3 4 5 9 6子孫3 1 2 4 3 5 6 7 8 9子孫4 8 1 7 5 4 3 2 9 6

サブツアー交換交叉(subtour exchange crossover; SXX)

順列の交叉

Page 123: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

123

部分写像交叉(partially mapped crossover; PMX)

サブツアー交換交叉(subtour exchange crossover; SXX)

辺組換え交叉(edge recombination crossover; ERX)

枝組立て交叉(edge assembly crossover; EAX)

順列の交叉

Page 124: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

124

辺組換え交叉(edge recombination crossover; ERX)

順列の交叉

順列の繋がり(辺)に着目した交叉方法。双方の親が共通して保有する辺をなるべく多く受け継ぐように子を生成する。

Page 125: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

125

辺組換え交叉(edge recombination crossover; ERX)

順列の交叉

Page 126: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

126

部分写像交叉(partially mapped crossover; PMX)

サブツアー交換交叉(subtour exchange crossover; SXX)

辺組換え交叉(edge recombination crossover; ERX)

枝組立て交叉(edge assembly crossover; EAX)

順列の交叉

Page 127: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

127

枝組立て交叉(edge assembly crossover; EAX)

順列の交叉

両親のいずれかが保有する辺のみを用いて複数のサブツアーに分割された不完全解を生成する。

サブツアー間を、なるべく短い辺を用いて接続しなおすことで完全解を含む子を生成する。

Page 128: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

128

枝組立て交叉(edge assembly crossover; EAX)

順列の交叉

Page 129: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

129

枝組立て交叉(edge assembly crossover; EAX)

順列の交叉

経路問題への適用として、計算コストと精度の両面から、現時点において最も優れた方法とされている。

Page 130: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

130

その他の交叉方式

Page 131: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

131

算術交叉(arithmetic crossover)

平均化交叉

ブレンド交叉(BLX-α)

単峰性正規分布交叉(UNDX)

シンプレックス交叉(SPX)

その他の交叉

Page 132: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

132

突然変異(mutation)

選択(selection)

交叉(crossover)

繁殖(reproduction)

Page 133: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

133

個体の遺伝子の一部をランダムに変化させる。

生物における突然変異をモデル化したもの。

局所解に陥ることを防ぐ効果がある。

突然変異(mutation)

Page 134: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

134

各々の染色体において、突然変異が発生する確率。

通常、0.1%~1%、高くても数%として設定する。

確率が低すぎると局所解に陥りやすくなり、高すぎるとランダム探索に近づいて解が収束しにくくなる。

変異確率(Pm)

Page 135: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

135

置換(substitution)

摂動(perturbation)

交換(swap)

逆位(inversion)

撹拌(scramble)

転座(translocation)

Page 136: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

136

重複(duplication)

挿入(insertion)

欠失(deficiency; deletion)

Page 137: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

137

置換(substitution)ランダムに選ばれた遺伝子を対立遺伝子に置き換える。

染色体 1001011101101

変異後 1000011111101

Page 138: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

138

摂動(perturbation)ランダムに選ばれた遺伝子の値に微量値を加算(または減算)する。

染色体 0.51 2.83 3.12 1.50

変異後 0.51 2.76 3.12 1.50

Page 139: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

139

交換(swap)ランダムに選ばれた2つの遺伝子を入れ替える。

染色体 1 2 3 4 5 6 7 8 9

変異後 1 2 6 4 5 3 7 8 9

Page 140: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

140

逆位(inversion)

ランダムに選ばれた2点間の遺伝子を逆順に並べ替える。

染色体 1001011101101

変異後 1000111011101

Page 141: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

141

撹拌(scramble)ランダムに選ばれた2点間の遺伝子をランダムに並べ替える。

染色体 1001011101101

変異後 1000110111101

Page 142: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

142

転座(translocation)ランダムに選ばれた2点間の遺伝子を別の遺伝子座に移動する。

染色体 1001011101101

変異後 1001110111001

Page 143: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

143

重複(duplication)ランダムに選ばれた2点間の遺伝子を別の遺伝子座に複製する。

染色体 1001011101101

変異後 1011011101101101遺伝子長が変化

Page 144: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

144

挿入(insertion)ランダムに選ばれた場所に任意の遺伝子を挿入する。

染色体 1001011101101

変異後 100100111101101遺伝子長が変化

Page 145: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

145

欠失(deficiency; deletion)ランダムに選ばれた遺伝子を削除する。

染色体 1001011101101

変異後 1000111101遺伝子長が変化

Page 146: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

New Generation Alternation Model

(世代交代モデル)

146

Page 147: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

147

離散世代モデル(discrete generation model)

連続世代モデル(continuous generation model)

Page 148: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

148

離散世代モデル(discrete generation model)

連続世代モデル(continuous generation model)

Page 149: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

149

離散世代モデル(discrete generation model)

全ての個体が一斉に繁殖を行い、現世代集合全体が次世代集合に置き換えられるモデル。

世代間における個体のオーバーラップが存在しない。

Page 150: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

150

単純GAモデル(simple GA)

ルーレット選択と交叉・突然変異を用いて、親世代と同数の子個体を生成し、子個体のみを次世代として残す。

初期収束による局所解の発生や、進化的停滞が起こりやすい。

離散世代モデル

Page 151: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

151

離散世代モデル(discrete generation model)

連続世代モデル(continuous generation model)

Page 152: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

152

連続世代モデル(continuous generation model)

現在の世代のうち一定の割合の個体だけを入れ替え、のこりはそのまま次世代に残すモデル。

Page 153: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

153

世代ギャップ(generation gap)

離散世代モデルにおいて、各世代の個体のうち次世代と入れ替えるものの割合。

離散世代モデル

Page 154: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

154

定常状態モデル(steady state)

1世代につき1組(2個)の親個体から子個体を生成し、現世代のうち最も適応度の低い個体と入れ替える。

離散世代モデル

Page 155: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

155

世代間最小ギャップモデル(minimum generation gap;

elitist recombination)ランダムに選択された親個体2個と、そこから作られる子個体2個を1つの「家族」とする。

家族の中でエリート選択とルーレット選択により、2個体を次世代に残す。

これを家族の数だけ繰り返す。

離散世代モデル

Page 156: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

156

世代間最小ギャップモデル(minimum generation gap;

elitist recombination)親子個体の選択を適応度を考慮せずにランダムに行うため、多様性維持に優れており、初期収束が起こりにくい。

家族内で選択を行うため、計算負荷が軽く、並列計算への適応もしやすい。

離散世代モデル

Page 157: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

Known Issues

157

Page 158: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

158

初期収束

ヒッチハイキング

Page 159: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

159

初期収束

ヒッチハイキング

Page 160: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

160

初期収束最初の方の世代で「偶然」他の個体より適応度が圧倒的に高い個体が生じた場合、その個体の遺伝子が集団中に爆発的に増えて、探索がかなり早い段階で収束してしまう現象。

Page 161: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

161

各パラメータを繰り返し設定しなおしてトライするしかない。

初期収束への対策

Page 162: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

162

• 集団数を増やす

• ランキングの選択確率を変更する

• トーナメントサイズを縮小する

• 突然変異率を増やす

• 適用する問題にたいして効果的となるよう、突然変異操作を変更する

初期収束への対策

Page 163: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

163

大変異

あらかじめ定めた条件に応じて、特定の世代においてのみ突然変異率を急激に高める方法。

自然界における環境の激変(隕石の激突など)に相当する。

初期収束への対策

Page 164: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

164

初期収束への対策

大変異

0%

10%

20%

30%

40%

50%

60%

1 100 200 300 400 500

例えば…

通常1%に設定した突然変異率を、

100で割り切れる世代のみ50%とする。

Page 165: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

165

適応変異

親個体間の不一致度合い(ハミング距離)に応じて、生成された子個体の突然変異率を変化させる。

初期収束への対策

Page 166: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

166

初期収束への対策

適応変異

染色体1 1001011101101染色体2 1010011010111

染色体1 1001011101101染色体2 1000011100111

ハミング距離=6 → 突然変異率=1%

ハミング距離=2 → 突然変異率=8%

例えば…

Page 167: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

167

初期収束

ヒッチハイキング

Page 168: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

168

ヒッチハイキング遺伝子操作時に最適解と一致しない遺伝子が混入してしまうことによって最適解の生成を妨げる現象。

2点交叉で発生しやすい。

Page 169: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

169

最適解 = …11110100000…

に対して、

親1 = …11110000000…

親2 = …11111110000…

が交叉して

最適解を得られる確率p は・・・

ヒッチハイキング

Page 170: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

170

二点交叉の場合、

𝑝 =2

𝐿(𝐿−1)( L = 遺伝子長 )

遺伝子長が増加するにつれて、

加速度的に確率が低下する。

ヒッチハイキング

Page 171: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

171

しかし、一様交叉であれば、

𝑝 =2

23=

1

4

となり、遺伝子長に依存しない。

ヒッチハイキング

Page 172: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

Summary

172

Page 173: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

173

GAとは、

生物の遺伝を模したアルゴリズム。

適者生存による自然淘汰で最適解を探索することができる。

対象となる問題に関する数学的な知識がない場合でも適用が可能。

まとめ

Page 174: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

174

問題の性質に適したエンコーディングと交叉方法を選ぶことが重要。

組み合わせの増加などにより指数関数的に複雑さが増加する問題に対しても、線形的な時間増加で探索を行うことができる。

まとめ

Page 175: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

175

局所最適解への収束を防ぐために、

状態に応じて突然変異の方法や、確率、トーナメントサイズなどのパラメータを変えることも必要。

まとめ

Page 176: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

176

GAで

いろいろな問題を

解いてみよう!

まとめ

Page 177: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

177

Genetic Algorithms Programing Library for JavaScript

https://github.com/kzokm/ga.js

Samples of Genetic Algorithm

http://ga-samples.herokuapp.com/

Page 178: 遺伝的アルゴリズム(Genetic Algorithm)を始めよう!

Copyright © 2014 Advanced IT Consortium to Evaluate, Apply and Drive All Rights Reserved.

http://aitc.jp

https://www.facebook.com/aitc.jp

ハルミンAITC非公式イメージキャラクター