粒子群最適化

🔥 Vibe プロンプト

「5次元のRastrigin関数を最小化。PSOを勾配降下法と比較。」

import random, math

def rastrigin(x): return 10*len(x) + sum(xi**2 - 10*math.cos(2*math.pi*xi) for xi in x)

class PSO:
    def __init__(self, dim, n_particles=50):
        self.particles = [[random.uniform(-5.12, 5.12) for _ in range(dim)] for _ in range(n_particles)]
        self.velocities = [[random.uniform(-1, 1) for _ in range(dim)] for _ in range(n_particles)]
        self.p_best = [p[:] for p in self.particles]
        self.g_best = min(self.particles, key=rastrigin)[:]
        self.w, self.c1, self.c2 = 0.7, 1.5, 1.5
    
    def step(self):
        for i, p in enumerate(self.particles):
            for d in range(len(p)):
                r1, r2 = random.random(), random.random()
                self.velocities[i][d] = (self.w * self.velocities[i][d] +
                    self.c1*r1*(self.p_best[i][d] - p[d]) +
                    self.c2*r2*(self.g_best[d] - p[d]))
                p[d] += self.velocities[i][d]
            if rastrigin(p) < rastrigin(self.p_best[i]):
                self.p_best[i] = p[:]
            if rastrigin(p) < rastrigin(self.g_best):
                self.g_best = p[:]

pso = PSO(dim=5)
for gen in range(100):
    pso.step()
    if gen % 20 == 0:
        print(f"世代 {gen}: 最良 = {rastrigin(pso.g_best):.4f}")

print(f"PSO最終: {rastrigin(pso.g_best):.4f} (最適値は0)")

メタヒューリスティクスコース完了!🎉

  • ✅ 山登り法
  • ✅ タブーサーチ
  • ✅ 焼きなまし法
  • ✅ 遺伝的アルゴリズム
  • ✅ 粒子群最適化

重要なポイント

  • コアコンセプトをしっかり理解する
  • ハンズオンコード例で実践する
  • 実世界の問題に応用する
  • 演習で知識を強化する

さらに学ぶ

  • 公式ドキュメント
  • GitHubのオープンソースプロジェクト
  • コミュニティフォーラムとディスカッション
  • 関連コースとチュートリアル

完全なチュートリアルをロック解除

このチャプターは有料コンテンツです。プロジェクトに参加して、10以上の神レベルのPromptや実際のソースコード例を含む、5000字以上の深い分析をロック解除してください!