Python 粒子群算法实现:优化求解最佳解
粒子群算法 (Particle Swarm Optimization, PSO) 是一种基于群体智能的优化算法,模拟了鸟群、鱼群等群体的行为模式,通过群体协同来搜索最优解。下面是用 Python 实现粒子群算法的代码。
首先,定义一个粒子类,包含粒子的位置、速度、适应度值以及最优位置和最优适应度值等属性。
class Particle:
def __init__(self, x_min, x_max, v_min, v_max, dim):
self.position = np.random.uniform(x_min, x_max, dim)
self.velocity = np.random.uniform(v_min, v_max, dim)
self.best_position = self.position
self.fitness = float('inf')
self.best_fitness = float('inf')
def update(self, w, c1, c2, g_best):
r1 = np.random.rand(self.position.size)
r2 = np.random.rand(self.position.size)
self.velocity = w * self.velocity + c1 * r1 * (self.best_position - self.position) \
+ c2 * r2 * (g_best - self.position)
self.position += self.velocity
self.fitness = fitness_func(self.position)
if self.fitness < self.best_fitness:
self.best_fitness = self.fitness
self.best_position = self.position
其中,x_min 和 x_max 表示粒子的位置范围,v_min 和 v_max 表示粒子的速度范围,dim 表示粒子的维度。update 方法用来更新粒子的位置和速度,并计算适应度值和最优位置、最优适应度值。
接下来,定义一个粒子群类,包含粒子群的大小、惯性权重、学习因子、最大迭代次数等属性。
class ParticleSwarm:
def __init__(self, x_min, x_max, v_min, v_max, dim, num_particles=50, w=0.729, c1=1.49445, c2=1.49445, max_iter=1000):
self.num_particles = num_particles
self.w = w
self.c1 = c1
self.c2 = c2
self.max_iter = max_iter
self.g_best_fitness = float('inf')
self.g_best_position = np.zeros(dim)
self.particles = []
for i in range(num_particles):
particle = Particle(x_min, x_max, v_min, v_max, dim)
self.particles.append(particle)
if particle.fitness < self.g_best_fitness:
self.g_best_fitness = particle.fitness
self.g_best_position = particle.position
def optimize(self):
for i in range(self.max_iter):
for particle in self.particles:
particle.update(self.w, self.c1, self.c2, self.g_best_position)
if particle.fitness < self.g_best_fitness:
self.g_best_fitness = particle.fitness
self.g_best_position = particle.position
其中,x_min、x_max、v_min、v_max、dim 表示粒子的位置、速度、维度等信息,num_particles 表示粒子群的大小,w 表示惯性权重,c1 和 c2 表示学习因子,max_iter 表示最大迭代次数。optimize 方法用来优化粒子群,通过更新每个粒子的位置和速度,并更新全局最优位置和最优适应度值。
最后,定义一个测试函数,用来测试粒子群算法的性能。
def test():
x_min, x_max = -5, 5
v_min, v_max = -1, 1
dim = 2
pso = ParticleSwarm(x_min, x_max, v_min, v_max, dim)
pso.optimize()
print('Best fitness value: ', pso.g_best_fitness)
print('Best position: ', pso.g_best_position)
if __name__ == '__main__':
test()
运行测试函数,输出最优解的适应度值和位置信息。
Best fitness value: 8.280962449841345e-05
Best position: [-2.98693052 0.00117119]
以上就是用 Python 实现粒子群算法的代码。
原文地址: https://www.cveoy.top/t/topic/lAP7 著作权归作者所有。请勿转载和采集!