粒子群最適化
🔥 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のオープンソースプロジェクト
- コミュニティフォーラムとディスカッション
- 関連コースとチュートリアル