粒子群算法(Particle Swarm Optimization, PSO)是一种基于群智能的优化算法。它是由Kennedy和Eberhart在1995年提出的。算法的基本思想是模拟群体中个体之间的相互作用,通过各个个体的经验来改进全局搜索。粒子群算法通常用于求解非线性优化问题。
下面是一个简单的 Python 示例,实现了对二维函数 f(x,y) = (x-3)^2 + (y-2)^2 的最小值搜索:
import random
class Particle:
def init(self, x_min, x_max, y_min, y_max):
self.x = random.uniform(x_min, x_max)
self.y = random.uniform(y_min, y_max)
self.fitness = (self.x - 3)2 + (self.y - 2)2
self.velocity_x = 0
self.velocity_y = 0
self.best_x = self.x
self.best_y = self.y
self.best_fitness = self.fitness
class PSO:
def init(self, x_min, x_max, y_min, y_max, num_particles, max_iterations):
self.x_min = x_min
self.x_max = x_max
self.y_min = y_min
self.y_max = y_max
self.num_particles = num_particles
self.max_iterations = max_iterations
self.particles = [Particle(x_min, x_max, y_min, ymax) for in range(num_particles)]
self.best_global_x = self.particles[0].x
self.best_global_y = self.particles[0].y
self.best_global_fitness = self.particles[0].fitness
def optimize(self):
for i in range(self.max_iterations):
for particle in self.particles:
if particle.fitness < particle.best_fitness:
particle.best_x = particle.x
particle.best_y = particle.y
particle.best_fitness = particle.fitness
if particle.fitness < self.best_global_fitness:
self.best_global_x = particle.x
self.best_global_y = particle.y
self.best_global_fitness = particle.fitness
for particle in self.particles:
particle.velocity_x = 0.7 particle.velocity_x + 0.1 random.random() (particle.best_x - particle.x) + 0.1 random