いでんてき‐アルゴリズム〔ヰデンテキ‐〕【遺伝的アルゴリズム】
遺伝的アルゴリズム
遺伝的アルゴリズム
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/03/11 05:00 UTC 版)
遺伝的アルゴリズム(いでんてきアルゴリズム、英語:genetic algorithm、略称:GA)とは、1975年にミシガン大学のジョン・H・ホランド(John Henry Holland)によって提案された近似解を探索するメタヒューリスティックアルゴリズムである。人工生命同様、偶然の要素でコンピューターの制御を左右する。4つの主要な進化的アルゴリズムの一つであり、その中でも最も一般的に使用されている。
概要
遺伝的アルゴリズムはデータ(解の候補)を遺伝子で表現した「個体」を複数用意し、適応度の高い個体を優先的に選択して交叉・突然変異などの操作を繰り返しながら解を探索する。適応度は適応度関数によって与えられる。
この手法の利点は、評価関数の可微分性や単峰性などの知識がない場合であっても適用可能なことである。 必要とされる条件は評価関数の全順序性と、探索空間が位相(トポロジー)を持っていることである。
また、遺伝子の表現の仕方によっては組合せ最適化問題やNP困難な問題などのさまざまな問題に適用可能である。
アルゴリズムの流れ
遺伝的アルゴリズムは一般に以下の流れで実装される。なお、下記では個体数を N, 最大世代数を G と置く。
- あらかじめ N 個の個体が入る集合を二つ用意する。以下、この二つの集合を「現世代」、「次世代」と呼ぶことにする。
- 現世代に N 個の個体をランダムに生成する。
- 評価関数により、現世代の各個体の適応度をそれぞれ計算する。
- ある確率で次の3つの動作のどれかを行い、その結果を次世代に保存する。
- 個体を二つ選択(選択方法は後述)して交叉(後述)を行う。
- 個体を一つ選択して突然変異(後述)を行う。
- 個体を一つ選択してそのままコピーする。
- 次世代の個体数が N 個になるまで上記の動作を繰り返す。
- 次世代の個体数が N 個になったら次世代の内容を全て現世代に移す。
- 3. 以降の動作を最大世代数 G 回まで繰り返し、最終的に「現世代」の中で最も適応度の高い個体を「解」として出力する。
遺伝的操作
遺伝的アルゴリズムでは一般的に次の遺伝的操作が用いられる。
- 選択(淘汰、再生)
- 交叉(組み換え)
- 突然変異
交叉する確率を交叉率、突然変異する確率を突然変異率という。一般には(交叉率)>>(突然変異率)とすることが望ましいとされる。また上記のアルゴリズムの流れからわかるとおり(交叉率)+(突然変異率)+ (再生確率) = 1である必要がある。
選択
選択は生物の自然淘汰をモデル化したもので、適応度にもとづいて個体を増やしたり削除したりする操作である。 選択のアルゴリズムには次のようなものがある。
ルーレット選択
ルーレット選択は個体 i を選ぶ確率を pi と置いたとき、
-
一点交叉 遺伝子が交叉する場所(交叉点)をランダムで一つ選び、その場所より後ろを入れ換える方式である。ホランドが最初に提案したときの交叉方法であるが、効率は低く現在ではあまり使われていない。
個体A: 01001|11010 ⇒ 01001 01011
個体B: 10101|01011 ⇒ 10101 11010
二点交叉
二点交叉 交叉点をランダムで二つ選び、二つの交叉点に挟まれている部分を入れ換える方式。
個体A: 010 | 01110 | 10 ⇒ 010 01010 10
個体B: 101 | 01010 | 11 ⇒ 101 01110 11
多点交叉
一般に、3点以上の交叉点をもつ方法を多点交叉あるいは n 点交叉という。しかしながら一部の問題を除き、多点交叉は二点交叉と下記で述べる一様交叉のどちらかよりも良い値が出ることはほとんどなく、あまり使われていない。
一様交叉
一様交叉 各要素ごと独立に1/2の確率で入れ換える交叉である。後述するヒッチハイキングの問題をおさえることが可能である。一般に二点交叉が得意とする問題を苦手とし、二点交叉と逆の性質を示すことが知られている。
個体A: 0 1 0 0 1 1 1 0 1 0 ⇒ 0 0 1 0 1 1 1 0 1 1
個体B: 1 0 1 0 1 0 1 0 1 1 ⇒ 1 1 0 0 1 0 1 0 1 0
突然変異
突然変異は生物に見られる遺伝子の突然変異をモデル化したもので、個体の遺伝子の一部を変化させる操作である。局所(的)最適解に陥ることを防ぐ効果がある。
例えば、遺伝子型がビット列の場合は、ある遺伝子座の0と1を入れ換える。数字の場合は乱数と置き換える。他にも遺伝子座の位置を変更するなどの方法がとられる。
突然変異の確率は0.1%~1%、高くても数%である。確率が低すぎると局所(的)最適解に陥りやすくなり、高すぎるとランダム探索に近づいてしまう(解が収束しにくくなる)。
GAの問題点
GA はさまざまな問題に適用できる手法であるが、問題と使う方式によっては上手く探索しない場合がある。ここではよく起きる GA の問題点をまとめる。
初期収束
初期収束とは、最初の方の世代で「偶然」他の個体より適応度が圧倒的に高い個体が生まれたとき、その個体の遺伝子が集団中に爆発的に増えて探索がかなり早い段階で収束してしまう現象である[1]。ルーレット選択の設定が甘い場合や、突然変異の効果が上手く表れないときに起こりやすい。
対策としては、ルーレット選択を使う場合の適切な設定や適用する問題に合わせて効果的になるように突然変異の操作を変更したり、突然変異率を増やしたり、または集団の数を増やすなどの設定を行うことで防ぐことができる。しかしながら明確な解決法というものはなく、各パラメータを何度も繰り返し設定しなおすしかない。
ヒッチハイキング
例えば最適解が
~101~
という問題があるとする。このとき
~111~
~000~
という二つの個体が交叉して最適解を得る確率を求める。 交叉の方式が二点交叉の場合は交差点が
~1|1|1~ ⇒ ~101~
~0|0|0~ ⇒ ~010~
で最適解が得られる。このとき遺伝子型の長さを l とおくと、最適解が得られる確率 p は
-
Optimization computes maxima and minima.
-
一般 | |
---|---|
微分可能 |
凸最小化 | |||||||
---|---|---|---|---|---|---|---|
線形 および 二次 |
|
系列範例 (Paradigms) |
|||||
---|---|---|---|---|---|
グラフ理論 |
|
||||
ネットワークフロー (最大流問題) |
遺伝的アルゴリズム
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/06/18 06:17 UTC 版)
「進化的アルゴリズム」の記事における「遺伝的アルゴリズム」の解説
これは EA の中でも最も一般的な手法である。問題の解を探索するにあたって数値の列を使用し(2進数を使うのが古典的だが、解決すべき問題に合わせて最適な形式が選択され、2進数になるとは限らない)、選択と変異に加えて事実上常に組み換えオペレータを適用する。
※この「遺伝的アルゴリズム」の解説は、「進化的アルゴリズム」の解説の一部です。
「遺伝的アルゴリズム」を含む「進化的アルゴリズム」の記事については、「進化的アルゴリズム」の概要を参照ください。
固有名詞の分類
- 遺伝的アルゴリズムのページへのリンク