import numpy as np
def f1(x):
return -x**2 + 3
EO = 1e-6
ps = 50
dim = 1
MaxNum = 50
x_bound = [0, 20]
v_bount = [-1, 1]
w = 0.8
c1 = c2 = 0.5
x = np.random.uniform(np.min(x_bound), np.max(x_bound), (ps, dim))
v = np.random.rand(ps, dim)
f = f1(x)
p_p = x
p_f = f
g_b_p = x[np.argmax(f)]
g_b_f = np.max(f)
for step in range(MaxNum):
r1 = np.random.rand(ps, dim)
r2 = np.random.rand(ps, dim)
v = w * v + c1 * r1 * (p_p - x) + c2 * r2 * (g_b_p - x)
v[v > np.max(v_bount)] = np.max(v_bount)
v[v < np.min(v_bount)] = np.min(v_bount)
x = x + v
x[x > np.max(x_bound)] = np.max(x_bound)
x[x < np.min(x_bound)] = np.min(x_bound)
f = f1(x)
p_g_i = np.greater(f, p_f)
p_p[p_g_i] = x[p_g_i]
p_f[p_g_i] = f[p_g_i]
if np.max(p_f) > g_b_f:
g_b_p = p_p[np.argmax(p_f)]
g_b_f = np.max(p_f)
PSO,粒子群算法
最新推荐文章于 2024-07-16 14:14:36 发布