PSO优化算法python
时间: 2023-08-28 19:08:13 浏览: 109
PSO.zip_PSO_pso python_python pso_python 优化算法_结构优化
5星 · 资源好评率100%
PSO算法(Particle Swarm Optimization,粒子群优化算法)是一种基于群体智能的优化算法,可以用于单目标或多目标、连续或离散问题的优化。
以下是一个简单的PSO算法的Python实现,用于求解函数 y = x^2 的最小值:
```python
import random
# 定义目标函数
def target_function(x):
return x**2
# 定义PSO类
class PSO:
def __init__(self, dim, size, max_iter, c1, c2):
self.dim = dim # 粒子维度
self.size = size # 群体大小
self.max_iter = max_iter # 最大迭代次数
self.c1 = c1 # 学习因子1
self.c2 = c2 # 学习因子2
self.swarm = [] # 粒子群
self.pbest = [] # 个体最优解
self.gbest = [0, [0]*dim] # 全局最优解
for i in range(size):
particle = [random.uniform(-5, 5) for _ in range(dim)] # 随机初始化粒子位置
velocity = [random.uniform(-1, 1) for _ in range(dim)] # 随机初始化粒子速度
self.swarm.append([particle, velocity])
self.pbest.append([particle, target_function(particle)])
if target_function(particle) < target_function(self.gbest[1]):
self.gbest = [i, particle]
# 更新粒子速度和位置
def update(self):
for i in range(self.size):
particle, velocity = self.swarm[i]
rp, rg = random.uniform(0, 1), random.uniform(0, 1)
new_velocity = [velocity[j] + self.c1*rp*(self.pbest[i][0][j]-particle[j]) + self.c2*rg*(self.gbest[1][j]-particle[j]) for j in range(self.dim)]
new_particle = [particle[j] + new_velocity[j] for j in range(self.dim)]
# 粒子位置越界处理
for j in range(self.dim):
if new_particle[j] < -5: new_particle[j] = -5
if new_particle[j] > 5: new_particle[j] = 5
self.swarm[i] = [new_particle, new_velocity]
# 更新个体最优解
if target_function(new_particle) < self.pbest[i][1]:
self.pbest[i] = [new_particle, target_function(new_particle)]
# 更新全局最优解
if target_function(new_particle) < target_function(self.gbest[1]):
self.gbest = [i, new_particle]
# 进行PSO算法
def run(self):
for i in range(self.max_iter):
self.update()
print("Iteration {}: Best Fitness = {}".format(i+1, target_function(self.gbest[1])))
# 测试PSO算法
pso = PSO(dim=1, size=30, max_iter=100, c1=2, c2=2)
pso.run()
```
在上述代码中,我们定义了一个PSO类,其中包括粒子群的初始化、更新粒子速度和位置、以及进行PSO算法的run()方法。在测试时,我们初始化了一个一维粒子群,群体大小为30,最大迭代次数为100,学习因子c1和c2均为2。运行PSO算法后,每次迭代输出当前的最优适应度值。
阅读全文