DEAP
DEAP(Distributed Evolutionary Algorithms in Python)は、遺伝的アルゴリズム(GA)や進化戦略(ES)などの進化的計算手法を実装するための強力で柔軟なライブラリです。
以下に、DEAPの高度な使い方を紹介します。
パラレル化
DEAPは並列処理を簡単にサポートしており、大規模な問題を効率的に解くことができます。
multiprocessingモジュールを使用して、評価関数の並列化を行います。
1 | import random |
[実行結果]
Best individual is [917758.6757183365, -36.45732263984088, -2555.157039370527], (842287517012.9069,)
ソースコード解説
このコードは、遺伝的アルゴリズム(GA)を用いて問題を解くためのものであり、DEAPライブラリを使用して実装されています。
以下に、コードを章立てて詳しく説明します。
1. ライブラリのインポート
1 | import random |
ここでは、必要なライブラリをインポートしています。
random: ランダムな数値生成に使用。multiprocessing: 並列処理を行うためのライブラリ。deap: 遺伝的アルゴリズムを実装するためのライブラリ。
2. 適応度と個体の定義
1 | creator.create("FitnessMax", base.Fitness, weights=(1.0,)) |
ここでは、DEAPのcreatorモジュールを使って適応度と個体のクラスを定義しています。
FitnessMax: 適応度を最大化するためのクラス。Individual: 個体を表すクラス。
このクラスはリストとして表現され、FitnessMaxを適応度として持つ。
3. 個体生成関数
1 | def create_individual(): |
この関数は、ランダムな$3$つの実数からなる個体を生成します。
各要素は$-10$から$10$の間でランダムに選ばれます。
4. 適応度関数
1 | def evaluate(individual): |
この関数は、個体の適応度を評価します。
ここでは、各要素の$2$乗の合計を返します。
5. DEAPのツールボックスに関数を登録
1 | toolbox = base.Toolbox() |
ここでは、GAで使用する操作をtoolboxに登録しています。
individual: 個体を生成する。population: 集団(個体のリスト)を生成する。mate: 交叉操作。mutate: 変異操作。select: 選択操作。evaluate: 適応度を評価する。
6. 並列化の設定
1 | pool = multiprocessing.Pool() |
ここでは、並列処理を行うための設定を行います。
pool.mapをtoolboxに登録することで、評価関数の並列化が可能になります。
7. メイン実行ループ
1 | population = toolbox.population(n=300) |
このループでは、$40$世代にわたってGAを実行します。
population = toolbox.population(n=300): 初期集団を生成($300$個体)。NGEN = 40: 世代数を設定。- 各世代で以下の操作を行います:
- 選択:
toolbox.selectで選択された個体をoffspringに保存。 - 交叉: ランダムに選ばれたペアに対して
toolbox.mateを適用。 - 変異: ランダムに選ばれた個体に対して
toolbox.mutateを適用。 - 適応度の再評価: 適応度が無効になった個体の適応度を再評価。
- 集団の更新: 新しい世代に更新。
- 選択:
8. 最良の個体の選択と表示
1 | best_ind = tools.selBest(population, 1)[0] |
最良の個体を選択し、その個体と適応度を表示します。
まとめ
このコードは、DEAPライブラリと並列処理を用いて遺伝的アルゴリズムを実装しています。
GAを使用して、与えられた適応度関数に基づいて最適解を見つけるプロセスが示されています。
並列処理を用いることで、評価関数の計算を効率化しています。
結果解説
[実行結果]
Best individual is [917758.6757183365, -36.45732263984088, -2555.157039370527], (842287517012.9069,)
この結果は、遺伝的アルゴリズム(GA)を用いて最適化された個体(解)が示されています。
ここでは、その個体とその適応度(評価値)を詳しく解説します。
結果の詳細
Best individual: [917758.6757183365, -36.45732263984088, -2555.157039370527]
- この配列は、GAによって最適化された3つの実数値からなるベクトルです。
このベクトルが最も適した解(個体)として選ばれました。 - 各要素は遺伝子を表し、GAの探索空間内で最適な解に収束するために変異や交叉によって進化しました。
- この配列は、GAによって最適化された3つの実数値からなるベクトルです。
適応度 (Fitness): (842287517012.9069,)
- 適応度は、個体の評価値を示します。
遺伝的アルゴリズムの目的は、この適応度を最大化する(または最小化する)ことです。 - 今回の評価関数は、個体の各遺伝子の2乗和を計算しています。
そのため、評価値はベクトルの各要素の2乗和に等しくなります。
- 適応度は、個体の評価値を示します。
解説
個体の構成:
- GAでは個体(解)は通常、固定長のベクトルとして表されます。
このベクトルは問題の次元数(ここでは3次元)と同じ長さです。 - 個体
[917758.6757183365, -36.45732263984088, -2555.157039370527]は3つの要素を持ちます。
- GAでは個体(解)は通常、固定長のベクトルとして表されます。
適応度の計算:
- 適応度関数
evaluate(individual)は、与えられた個体の各要素の2乗の合計を計算します。
具体的には、次のようになります:
$$
\text{適応度} = 917758.6757183365^2 + (-36.45732263984088)^2 + (-2555.157039370527)^2
$$ - 実際の計算結果:
$$
917758.6757183365^2 \approx 842285214642.541
$$
$$
(-36.45732263984088)^2 \approx 1329.247
$$
$$
(-2555.157039370527)^2 \approx 652407.118
$$
これらを合計すると:
$$
842285214642.541 + 1329.247 + 652407.118 \approx 842287517012.9069
$$
- 適応度関数
結果の意味:
- この結果は、GAによって見つけられた最適な個体の一例です。
個体の評価関数が2乗和であるため、この個体は探索空間内で最小の2乗和を持つものとなります。 - 遺伝的アルゴリズムは、進化過程を通じて個体を選択、交叉、変異させながら適応度を最大化(または最小化)します。
- この結果は、GAによって見つけられた最適な個体の一例です。
適応度の高い個体の特徴:
- 適応度が高い個体は、与えられた問題に対して優れた解を提供します。
この場合、評価関数が最小化問題であるため、適応度が小さいほど良い解とみなされます。
- 適応度が高い個体は、与えられた問題に対して優れた解を提供します。
まとめ
このGAの実行結果は、3次元ベクトルで表される問題空間での最適解(または近似最適解)を示しています。
適応度はその個体の品質を示し、最小化された評価値が提示されています。














