pso粒子群优化python代码

import numpy as np

class PSO(object):
def init(self,population_size,max_steps):
self.w = 0.6#惯性权重
self.c1 = self .c2 = 2
self.population_size = population_size#粒子群数量
self.dim = 2#搜索空间维度
self.max_steps = max_steps#迭代次数
self.x_band = [-10,10]#解空间范围
self.x = np.random.uniform(self.x_band[0],self.x_band[1],
(self.population_size,self.dim))#初始化粒子群位置
self.v = np.random.rand(self.population_size,self.dim)#初始化粒子速度
fitness = self.calculate_fitness(self.x)
self.p = self.x#个体的最佳位置
self.pg = self.x[np.argmin(fitness)]#全局最佳位置
self.individual_best_fitness = fitness#个体的最优适应度
self.global_best_fitness = np.min(fitness)#全局最佳适应度

def calculate_fitness(self,x):
    return np.sum(np.square(x),axis=1)

def evolve(self):
    for step in range(self.max_steps):
         r1 = np.random.rand(self.population_size,self.dim)
         r2 = np.random.rand(self.population_size,self.dim)
         #更新速度和权重
         self.v = self.w*self.v+self.c1*r1*(self.p-self.x)+self.c2*r2(self.pg-self.x)
         self.x = self.v+self.x
         fitness = self.calculate_fitness(self.x)
         #筛选需要更新的个体
         update_id = np.greater(self.individual_best_fitness,fitness)
         #新一代 出现了更小的fitness,所以更新全局最优fitness和位置
         if np.min(fitness) < self.global_best_fitness:
             self.pg = self.x[np.argmin(fitness)]
             self.global_best_fitness = np.min(fitness)
         print('best fitness : %.5f,mean fitness: %.5f'%(self.global_best_fitness,np.mean(fitness)))

PSO(100,100)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值