粒子群算法python
时间: 2023-08-31 15:05:01 浏览: 33
粒子群算法(PSO)是一种基于群体智能的优化算法,其目的是通过模拟鸟群或鱼群等集体行为,来优化目标函数。以下是一个简单的粒子群算法的Python实现示例:
```python
import random
class Particle:
def __init__(self, dim, minx, maxx):
self.__pos = [random.uniform(minx, maxx) for i in range(dim)]
self.__vel = [0.0 for i in range(dim)]
self.__best_pos = self.__pos
self.__best_score = float('inf')
def set_pos(self, pos):
self.__pos = pos
def get_pos(self):
return self.__pos
def set_vel(self, vel):
self.__vel = vel
def get_vel(self):
return self.__vel
def set_best_pos(self, pos):
self.__best_pos = pos
def get_best_pos(self):
return self.__best_pos
def set_best_score(self, score):
self.__best_score = score
def get_best_score(self):
return self.__best_score
class PSO:
def __init__(self, dim, size, minx, maxx, function):
self.__particles = [Particle(dim, minx, maxx) for i in range(size)]
self.__function = function
self.__global_best_pos = [0.0 for i in range(dim)]
self.__global_best_score = float('inf')
def set_global_best_pos(self, pos):
self.__global_best_pos = pos
def get_global_best_pos(self):
return self.__global_best_pos
def set_global_best_score(self, score):
self.__global_best_score = score
def get_global_best_score(self):
return self.__global_best_score
def update_particles(self):
for particle in self.__particles:
pos = particle.get_pos()
vel = particle.get_vel()
best_pos = particle.get_best_pos()
for i in range(len(pos)):
vel[i] = vel[i] + 2.0 * random.random() * (best_pos[i] - pos[i]) + 2.0 * random.random() * (self.__global_best_pos[i] - pos[i])
pos[i] = pos[i] + vel[i]
if pos[i] < minx:
pos[i] = minx
vel[i] = 0.0
if pos[i] > maxx:
pos[i] = maxx
vel[i] = 0.0
score = self.__function(pos)
if score < particle.get_best_score():
particle.set_best_score(score)
particle.set_best_pos(pos)
if score < self.__global_best_score:
self.set_global_best_score(score)
self.set_global_best_pos(pos)
def optimize(self, max_iter):
for i in range(max_iter):
self.update_particles()
print("Iteration:", i, "Best Score:", self.get_global_best_score(), "Best Pos:", self.get_global_best_pos())
```
以上实现了一个简单的粒子群算法,可以通过调用 optimize 方法来运行算法并输出结果。其中,dim 表示解的维度,size 表示粒子群大小,minx 和 maxx 表示解的取值范围,function 是待优化的目标函数。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.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)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![py](https://img-home.csdnimg.cn/images/20210720083646.png)