粒子群算法 (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 实现粒子群算法的代码。

Python 粒子群算法实现:优化求解最佳解

原文地址: https://www.cveoy.top/t/topic/lAP7 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录