pso算法python
时间: 2023-07-10 10:11:34 浏览: 83
在Python中实现PSO算法需要用到NumPy库,以下是一个简单的PSO算法实现代码示例:
```python
import numpy as np
def pso(cost_function, dim, num_particles, maxiter, lb, ub):
# cost_function: 优化目标函数
# dim: 变量数目
# num_particles: 粒子数
# maxiter: 最大迭代次数
# lb: 每个变量的下界
# ub: 每个变量的上界
# 初始化粒子位置和速度
x = np.random.uniform(lb, ub, (num_particles, dim))
v = np.zeros((num_particles, dim))
# 初始化个体历史最优位置和适应度值
p = x
p_best = np.zeros((num_particles, dim))
p_best_cost = np.ones(num_particles) * np.inf
# 初始化全局历史最优位置和适应度值
g_best = np.zeros((1, dim))
g_best_cost = np.inf
# 迭代优化
for i in range(maxiter):
# 计算适应度值
cost = cost_function(x)
# 更新个体历史最优位置
update_idx = np.less(cost, p_best_cost)
p_best[update_idx] = x[update_idx]
p_best_cost[update_idx] = cost[update_idx]
# 更新全局历史最优位置
if np.min(p_best_cost) < g_best_cost:
g_best = p_best[np.argmin(p_best_cost)]
g_best_cost = np.min(p_best_cost)
# 更新粒子速度和位置
r1 = np.random.uniform(size=(num_particles, dim))
r2 = np.random.uniform(size=(num_particles, dim))
v = 0.5 * v + 2 * r1 * (p_best - x) + 2 * r2 * (g_best - x)
x = x + v
# 边界处理
x = np.maximum(x, lb)
x = np.minimum(x, ub)
return g_best, g_best_cost
```
其中,`cost_function`是需要优化的目标函数,`dim`是变量数目,`num_particles`是粒子数,`maxiter`是最大迭代次数,`lb`和`ub`分别是每个变量的下界和上界。函数返回全局历史最优位置和适应度值。
阅读全文