粒子群优化算法 (particle swarm optimization, PSO)实验程序代码
时间: 2023-07-08 15:39:04 浏览: 70
以下是一个用 Python 实现的粒子群优化算法的代码示例:
```python
import random
import math
# 定义目标函数
def func(x):
return x ** 2
class Particle:
def __init__(self, dim):
self.dim = dim
self.position = [random.uniform(-10, 10) for _ in range(dim)]
self.velocity = [random.uniform(-1, 1) for _ in range(dim)]
self.best_position = self.position[:]
self.best_score = func(self.position)
def update(self, global_best_position, w, c1, c2):
for i in range(self.dim):
r1 = random.random()
r2 = random.random()
cognitive = c1 * r1 * (self.best_position[i] - self.position[i])
social = c2 * r2 * (global_best_position[i] - self.position[i])
self.velocity[i] = w * self.velocity[i] + cognitive + social
self.position[i] += self.velocity[i]
score = func(self.position)
if score < self.best_score:
self.best_position = self.position[:]
self.best_score = score
class PSO:
def __init__(self, num_particles, num_iterations, dim):
self.num_particles = num_particles
self.num_iterations = num_iterations
self.dim = dim
self.particles = [Particle(dim) for _ in range(num_particles)]
self.global_best_position = self.particles[0].position[:]
self.global_best_score = func(self.global_best_position)
def optimize(self, w, c1, c2):
for i in range(self.num_iterations):
for particle in self.particles:
particle.update(self.global_best_position, w, c1, c2)
score = func(particle.position)
if score < self.global_best_score:
self.global_best_position = particle.position[:]
self.global_best_score = score
print('Iteration %d: Best Score = %.3f' % (i + 1, self.global_best_score))
# 测试程序
pso = PSO(num_particles=20, num_iterations=50, dim=1)
pso.optimize(w=0.8, c1=1.5, c2=1.5)
```
该程序实现了一个简单的粒子群优化算法,可以求解一个一维的目标函数 $f(x) = x^2$ 的最小值。程序中,每个粒子的位置和速度是随机初始化的,粒子会不断地更新自己的位置和速度,直到找到全局最优解或达到最大迭代次数。在每轮迭代中,程序会输出当前的最优解和最优解的适应度值。通过调整参数,可以得到更好的优化结果。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)