|
|
||
|---|---|---|
| .. | ||
| Diophantine.ipynb | ||
| Genetic.ipynb | ||
| README.md | ||
README.md
遺伝的アルゴリズム
事前クイズ
遺伝的アルゴリズム (GA) は、AIにおける進化的アプローチに基づいており、集団の進化の方法を利用して、特定の問題に対する最適解を得る手法です。1975年にジョン・ヘンリー・ホランドによって提案されました。
遺伝的アルゴリズムは以下のアイデアに基づいています:
- 問題の有効な解を遺伝子として表現できる
- 交叉によって2つの解を組み合わせ、新しい有効な解を得ることができる
- 選択を使用して、ある適応度関数を基により最適な解を選ぶ
- 突然変異を導入して最適化を不安定化させ、局所的な最小値から抜け出す
遺伝的アルゴリズムを実装するには以下が必要です:
- 問題の解を遺伝子 g∈Γ を使ってコード化する方法を見つける
- 遺伝子の集合 Γ 上で適応度関数 fit: Γ→R を定義する。関数値が小さいほど良い解を意味する。
- 2つの遺伝子を組み合わせて新しい有効な解を得る交叉メカニズム crossover: Γ2→Γ を定義する。
- 突然変異メカニズム mutate: Γ→Γ を定義する。
多くの場合、交叉と突然変異は遺伝子を数値列やビットベクトルとして操作する単純なアルゴリズムです。
遺伝的アルゴリズムの具体的な実装はケースによって異なりますが、全体的な構造は以下の通りです:
- 初期集団 G⊂Γ を選択する
- このステップで実行する操作(交叉または突然変異)をランダムに選択する
- 交叉:
- ランダムに2つの遺伝子 g1, g2 ∈ G を選択する
- 交叉を計算する g=crossover(g1,g2)
- fit(g)<fit(g1) または fit(g)<fit(g2) の場合、対応する遺伝子を g に置き換える
- 突然変異 - ランダムに遺伝子 g∈G を選択し、それを mutate(g) に置き換える
- 適応度が十分に小さい値になるか、ステップ数の制限に達するまで、ステップ2から繰り返す
典型的な課題
遺伝的アルゴリズムで解決される典型的な課題には以下が含まれます:
- スケジュールの最適化
- 最適な梱包
- 最適な切断
- 全探索の高速化
✍️ 演習: 遺伝的アルゴリズム
以下のノートブックで学習を続けてください:
このノートブックで遺伝的アルゴリズムを使用した2つの例を確認できます:
- 宝物の公平な分配
- 8クイーン問題
結論
遺伝的アルゴリズムは、物流や探索問題を含む多くの問題を解決するために使用されます。この分野は心理学とコンピュータサイエンスのトピックを融合させた研究に触発されています。
🚀 チャレンジ
「遺伝的アルゴリズムは実装が簡単だが、その挙動を理解するのは難しい。」出典
遺伝的アルゴリズムの実装例(例えば、数独パズルの解決)を調査し、それがどのように機能するかをスケッチやフローチャートで説明してください。
事後クイズ
復習と自己学習
この素晴らしい動画を視聴して、遺伝的アルゴリズムで訓練されたニューラルネットワークを使ってコンピュータがスーパーマリオをプレイする方法について学びましょう。このようなゲームプレイ学習については次のセクションでさらに学びます。
課題: ディオファントス方程式
あなたの目標は、整数解を持つディオファントス方程式を解くことです。例えば、a+2b+3c+4d=30 という方程式を考えてみてください。この方程式を満たす整数解を見つける必要があります。
この課題はこの投稿に触発されています。
ヒント:
- 解を [0;30] の範囲で考えることができます
- 遺伝子として、解の値のリストを使用することを検討してください
Diophantine.ipynb を出発点として使用してください。