【進化から学ぶ】遺伝的アルゴリズムとは?仕組み・手順・活用事例をわかりやすく解説🧬

「自然淘汰」や「遺伝」をヒントにしたアルゴリズム、遺伝的アルゴリズム(Genetic Algorithm, GA)
機械学習・最適化問題・自動設計など、さまざまな分野で使われています。

この記事では、GAの仕組み・アルゴリズムの流れ・具体的な使い方を、初心者向けにやさしく解説します💡


遺伝的アルゴリズムとは?

**遺伝的アルゴリズム(GA)は、生物の進化の過程(自然選択・突然変異・交叉)**を模倣して、最適解を探すアルゴリズムです。

一般的な数式ではなく、「世代交代」を通じて、より良い解に進化していくのが大きな特徴です🌱


GAの基本の考え方

GAでは、次のようなステップを繰り返します:

  1. 初期集団(個体群)の生成

  2. 適応度の評価(どれだけ良いか)

  3. 選択(優秀な個体を選ぶ)

  4. 交叉(親の遺伝子を混ぜる)

  5. 突然変異(少しだけ変化させる)

  6. 新世代を作り、繰り返す

このサイクルを何十回、何百回と繰り返すことで、最適解に近づいていきます🔥


遺伝子(個体)の表現方法🧬

GAでは「解」を**遺伝子(chromosome)**として表現します。

例)0と1のビット列で「旅行の順番」や「機械の配置」などを表す:

個体A=[1,0,1,1,0,0,1]\text{個体A} = [1, 0, 1, 1, 0, 0, 1]

このビット列が進化の対象になります。


各ステップの詳細🧩

✅ 初期集団の生成

ランダムに複数の解を生成。スタートは適当でOK!

✅ 適応度(Fitness)評価

各個体が「どれだけ良いか」をスコア化。
→ 例:コストが低いほど高得点など。

✅ 選択(Selection)

適応度が高い個体ほど選ばれやすくする。
代表的なのは「ルーレット選択法」や「トーナメント選択法」。

✅ 交叉(Crossover)

2つの個体(親)から新しい個体(子)を作る。
例:

親A: [1 0 1 | 1 0 0]  
親B: [0 1 0 | 1 1 1]  
↓  
子:  [1 0 1 | 1 1 1]

✅ 突然変異(Mutation)

ランダムにビットをひっくり返すことで多様性を保つ

[1,0,1,0]⇒[1,0,0,0][1, 0, \textcolor{red}{1}, 0] \Rightarrow [1, 0, \textcolor{blue}{0}, 0]


GAの強み・弱み⚖️

強み ✅ 弱み ❌
局所解に陥りにくい(グローバル探索) 収束に時間がかかる場合あり
数式不要、ブラックボックスでも使える パラメータ調整が難しいことも
並列処理しやすい 厳密な最適解が保証されない

実例:旅行セールスマン問題(TSP)

「最短で全都市を巡る順番は?」
この組合せ最適化問題も、GAで解くことができます。

  • 各個体:都市の並び順

  • 適応度:移動距離の逆数

  • 交叉:順番の一部を親からコピー

  • 突然変異:都市の位置を入れ替える

実際にGAでTSPを解くと、短時間でかなり良い解が得られます⏱️✨


Pythonで簡単なGA(ライブラリなし)

import random

def fitness(x):
    return -abs(42 - x)  # 42に近づける問題

population = [random.randint(0, 100) for _ in range(10)]

for generation in range(50):
    population.sort(key=fitness, reverse=True)
    next_gen = population[:2]  # エリート選択

    while len(next_gen) < 10:
        parents = random.sample(population[:5], 2)
        child = (parents[0] + parents[1]) // 2
        if random.random() < 0.1:
            child += random.randint(-5, 5)
        next_gen.append(child)

    population = next_gen

print("Best solution:", population[0])

まとめ📝

  • 遺伝的アルゴリズムは「進化の仕組み」を応用した最適化手法

  • 選択・交叉・突然変異を使って解を洗練していく

  • 数式不要で直感的に使える!

  • 複雑な組合せ問題や探索問題に強い

「迷路の自動生成」「機械のレイアウト最適化」「AIキャラクターの行動進化」など、創造的な応用も広がっています🌟


GAの具体的な実装チュートリアルや、Pythonライブラリ(DEAP、PyGADなど)の紹介記事もご希望があればお届けします📘お気軽にリクエストしてください!