遺伝的アルゴリズム
🔥 Vibe プロンプト
「ビット列を進化させて'11111111...'(64ビット)に一致。トーナメント選択、一点交叉、突然変異を使用。」
import random
def ga(target_len=64, pop_size=100, gens=100):
target = [1] * target_len
def fitness(ind): return sum(i == t for i, t in zip(ind, target))
def create(): return [random.randint(0,1) for _ in range(target_len)]
pop = [create() for _ in range(pop_size)]
for gen in range(gens):
scores = [(fitness(ind), ind) for ind in pop]
scores.sort(reverse=True)
if scores[0][0] == target_len:
print(f"世代 {gen} で完全解!")
break
new_pop = [scores[0][1], scores[1][1]]
while len(new_pop) < pop_size:
parents = random.choices(pop, weights=[f+1 for f,_ in scores], k=2)
cross = random.randint(0, target_len)
child = parents[0][:cross] + parents[1][cross:]
if random.random() < 0.01:
child[random.randint(0, target_len-1)] ^= 1
new_pop.append(child)
pop = new_pop
if gen % 20 == 0:
print(f"世代 {gen}: 最高適応度 = {scores[0][0]}/{target_len}")
print(f"最終適応度: {result}/64")
応用
- ニューラルアーキテクチャ検索
- 金融取引戦略
- ロボット制御設計
- 特徴量選択
重要なポイント
- コアコンセプトをしっかり理解する
- ハンズオンコード例で実践する
- 実世界の問題に応用する
- 演習で知識を強化する
さらに学ぶ
- 公式ドキュメント
- GitHubのオープンソースプロジェクト
- コミュニティフォーラムとディスカッション
- 関連コースとチュートリアル