生成PSO算法代码
时间: 2023-07-05 11:17:40 浏览: 36
下面是一个简单的PSO算法的Python实现示例:
```
import random
# 定义目标函数,本例中为Rosenbrock函数
def func(x):
return sum(100.0 * (x[1:]-x[:-1]**2.0)**2.0 + (1-x[:-1])**2.0)
class Particle:
def __init__(self, dim, minx, maxx):
self.position = [random.uniform(minx, maxx) for i in range(dim)]
self.velocity = [random.uniform(-1, 1) for i in range(dim)]
self.best_part_pos = self.position[:]
self.best_part_score = float('inf')
self.score = float('inf')
def update_best(self):
if self.score < self.best_part_score:
self.best_part_pos = self.position[:]
self.best_part_score = self.score
def move(self):
for i in range(dim):
self.velocity[i] = chi*(self.velocity[i] + phi_p*random.uniform(0,1)*(self.best_part_pos[i]-self.position[i]) + phi_g*random.uniform(0,1)*(best_part_pos[i]-self.position[i]))
self.position[i] += self.velocity[i]
# 算法参数
dim = 10
num_particles = 50
max_iter = 100
phi_p = 2.05
phi_g = 2.05
chi = 0.729
minx = -30
maxx = 30
# 初始化粒子群
swarm = [Particle(dim, minx, maxx) for i in range(num_particles)]
best_part_pos = [0.0 for i in range(dim)]
best_part_score = float('inf')
# 迭代优化
for i in range(max_iter):
for j in range(num_particles):
swarm[j].score = func(swarm[j].position)
swarm[j].update_best()
if swarm[j].score < best_part_score:
best_part_score = swarm[j].score
best_part_pos = swarm[j].position[:]
for j in range(num_particles):
swarm[j].move()
# 输出结果
print("Best score:", best_part_score)
print("Best position:", best_part_pos)
```
在这个例子中,我们定义了一个10维的Rosenbrock函数作为目标函数,使用50个粒子在[-30,30]的范围内进行优化,最大迭代次数为100次。在每一次迭代中,我们计算每个粒子的得分,并更新粒子群的最优解和全局最优解。最后输出全局最优解的得分和位置。