正在打开模型库
正在打开模型库
一群粒子记住自己和群体的最好位置,朝更好的区域飞。
每个人记得自己的最好成绩,也看冠军在哪,然后调整飞行方向。
要搜连续参数、目标函数不好求导时用。
Python 代码
import numpy as np
def f(x):
return (x ** 2).sum(axis=1)
rng = np.random.default_rng(0)
pos = rng.uniform(-5, 5, size=(12, 2))
vel = np.zeros_like(pos)
pbest, gbest = pos.copy(), pos[np.argmin(f(pos))]
for _ in range(40):
vel = 0.7 * vel + 1.5 * rng.random(pos.shape) * (pbest - pos) + 1.5 * rng.random(pos.shape) * (gbest - pos)
pos = pos + vel
better = f(pos) < f(pbest)
pbest[better] = pos[better]
gbest = pbest[np.argmin(f(pbest))]
print(gbest, f(gbest[None, :])[0])