粒子群算法代码
时间: 2023-07-03 13:13:25 浏览: 14
下面是一个简单的粒子群算法实现,用于求解一维函数的最小值问题:
```
import random
# 目标函数
def target_func(x):
return x**2 - 2*x + 1
# 粒子群算法
def particle_swarm_optimization(func, dim, swarm_size=20, max_iter=100, w=0.8, c1=2, c2=2):
# 初始化粒子群
swarm = []
for i in range(swarm_size):
particle = {'position': [random.uniform(-10, 10) for j in range(dim)],
'velocity': [0.0 for j in range(dim)],
'best_position': [0.0 for j in range(dim)],
'best_fitness': float('inf')}
particle['fitness'] = func(particle['position'])
if particle['fitness'] < particle['best_fitness']:
particle['best_position'] = particle['position']
particle['best_fitness'] = particle['fitness']
swarm.append(particle)
# 迭代优化
global_best_position = [0.0 for j in range(dim)]
global_best_fitness = float('inf')
for iter in range(max_iter):
for i in range(swarm_size):
particle = swarm[i]
# 更新速度和位置
for j in range(dim):
r1 = random.random()
r2 = random.random()
particle['velocity'][j] = w*particle['velocity'][j] \
+ c1*r1*(particle['best_position'][j] - particle['position'][j]) \
+ c2*r2*(global_best_position[j] - particle['position'][j])
particle['position'][j] += particle['velocity'][j]
# 更新个体最优解
particle['fitness'] = func(particle['position'])
if particle['fitness'] < particle['best_fitness']:
particle['best_position'] = particle['position']
particle['best_fitness'] = particle['fitness']
# 更新全局最优解
if particle['fitness'] < global_best_fitness:
global_best_position = particle['position']
global_best_fitness = particle['fitness']
return global_best_position, global_best_fitness
# 测试代码
if __name__ == '__main__':
best_position, best_fitness = particle_swarm_optimization(target_func, dim=1)
print('best position:', best_position)
print('best fitness:', best_fitness)
```
在上述代码中,我们定义了一个目标函数 `target_func`,并使用粒子群算法 `particle_swarm_optimization` 求解该函数的最小值。在实现中,我们使用一个字典来表示每个粒子,其中包含了位置、速度、个体最优解和适应度等信息。在每次迭代中,我们更新每个粒子的速度和位置,并更新个体最优解和全局最优解。最终返回全局最优解的位置和适应度。
相关推荐















