粒子群模型Python代码
时间: 2024-08-16 09:05:17 浏览: 31
粒子群优化算法(Particle Swarm Optimization, PSO)是一种基于群体智能的优化算法,它通过模拟鸟群觅食行为来寻找问题的最优解。以下是一个简单的粒子群优化算法的Python实现:
```python
import numpy as np
def pso(func, lb, ub, dim, n_particles, max_iter):
# 初始化参数
w = 0.729844 # 惯性权重
c1 = 1.496180 # 加速常数1
c2 = 1.496180 # 加速常数2
# 初始化粒子位置和速度
pos = np.random.uniform(lb, ub, (n_particles, dim))
vel = np.random.uniform(-0.1, 0.1, (n_particles, dim))
# 初始化个体最优和全局最优
pbest_pos = pos.copy()
pbest_val = np.array([func(pos[i]) for i in range(n_particles)])
gbest_pos = pos[np.argmin(pbest_val)]
gbest_val = np.min(pbest_val)
# 迭代更新
for t in range(max_iter):
# 更新速度和位置
r1 = np.random.rand(n_particles, dim)
r2 = np.random.rand(n_particles, dim)
vel = w * vel + c1 * r1 * (pbest_pos - pos) + c2 * r2 * (gbest_pos - pos)
pos = pos + vel
# 更新个体最优和全局最优
for i in range(n_particles):
current_val = func(pos[i])
if current_val < pbest_val[i]:
pbest_pos[i] = pos[i].copy()
pbest_val[i] = current_val
if current_val < gbest_val:
gbest_pos = pos[i].copy()
gbest_val = current_val
return gbest_pos, gbest_val
# 示例:使用PSO求解Rastrigin函数的最小值
def rastrigin(x):
A = 10
n = len(x)
return A * n + sum([(xi ** 2 - A * np.cos(2 * np.pi * xi)) for xi in x])
lb = [-5.12, -5.12]
ub = [5.12, 5.12]
dim = 2
n_particles = 30
max_iter = 100
best_position, best_value = pso(rastrigin, lb, ub, dim, n_particles, max_iter)
print("最优位置:", best_position)
print("最优值:", best_value)
```
这个代码实现了一个简单的粒子群优化算法,用于求解Rastrigin函数的最小值。你可以根据需要修改目标函数、搜索空间范围、粒子数量和最大迭代次数等参数。
阅读全文