网站资料要提供哪些,自媒体网站建设,空包网站怎么建设,平台型网站建设公司粒子群算法概念
粒子群算法 (particle swarm optimization#xff0c;PSO) 由 Kennedy 和 Eberhart 在 1995 年提出#xff0c;该算法模拟鸟群觅食的方法进行寻找最优解。基本思想#xff1a;人们发现#xff0c;鸟群觅食的方向由两个因素决定。第一个是自己当初飞过离食物…粒子群算法概念
粒子群算法 (particle swarm optimizationPSO) 由 Kennedy 和 Eberhart 在 1995 年提出该算法模拟鸟群觅食的方法进行寻找最优解。基本思想人们发现鸟群觅食的方向由两个因素决定。第一个是自己当初飞过离食物最近的位置第二个因素是鸟群中离食物最近的鸟的位置。根据这个两个因素不断的改变自己的位置。最终整个鸟群都能寻找到食物。 相关知识
1.编码与适应度函数2.粒子群算法原理3.粒子群算法流程4.使用 python 实现粒子群算法。
编码与适应度函数
在粒子群算法中也需要进行编码不过相对于遗传算法粒子群算法编码非常简单。例如函数 可直接将函数解作为编码。而函数的值即可作为适应度若求解函数最小值则适应度越小越好若求解函数最大值则适应度越大越好。
粒子群算法原理
粒子群函数是根据鸟群寻找食物实现的优化算法每一只鸟被称为粒子即函数的一个解。我们已经知道每一只鸟寻找食物是根据离食物最近的鸟的位置与自己曾经离食物最近的位置来决定改变自己现在的位置。根据这个原理粒子群算法核心公式如下 其中为鸟群的位置
为鸟飞行的速度即鸟群更新位置的因素。而公式2就是决定速度的因素
p:个体最佳位置
pg:全局最佳位置
w:惯性权重因子用来控制速度的更新
c1,c2:加速度常数通常设为2
r1,r2:0到1之间的随机数
粒子群算法流程
随机初始粒子群位置与速度
计算粒子群适应度
根据公式更新粒子群位置与速度
重复2,3直到满足停止条件
使用python实现粒子群算法
实现粒子群算法。并求解函数 f(x) 在区间 [-10,10] 上的最小值: 首先我们需要对粒子群位置与速度进行随机初始:
import numpy as np
#初始化粒子群位置
x np.random.uniform(x_bound[0], x_bound[1],(pop_size, dim))
#初始化粒子群速度
v np.random.rand(pop_size,dim)
其中x_bound 为 x 取值范围。pop_size 为粒子群大小即鸟的数量。dim 为搜索空间维度。
再根据 x 计算适应度
#f(x1,x2)(x1-4)**2(x2-5)**2,函数值即适应度
def f(x):return np.sum(np.square(x-np.array([4,5])), axis1)
#计算适应度
fitness f(x)
同时计算出全局最优位置与个体最优适应度、全局最优适应度
#全局最优位置
pg x[np.argmin(fitness)]
#个体最优适应度
individual_best_fitness fitness
#全局最优适应度
global_best_fitness np.min(individual_best_fitness)
最后开始进化不断更新粒子群位置
#encodingutf8
import numpy as np
pop_size 10#粒子群大小
n_iters 1000#训练轮数
dim 2#搜索空间维度
w 0.6#惯性权重因子
c1 2#加速度常数通常设为2
c2 2#加速度常数通常设为2
x_bound [-10,10]#函数定义域
def pso(f):f:目标函数pg:最优解坐标#初始化粒子群位置x np.random.uniform(lowx_bound[0], highx_bound[1], size(pop_size, dim)) #初始化粒子群速度v np.random.rand(pop_size,dim)#初始个体最佳位置p x#计算适应度fitness f(x)#全局最优位置pg x[np.argmin(fitness)]#个体最优适应度individual_best_fitness fitness#全局最优适应度global_best_fitness np.min(individual_best_fitness)#开始进化for i in range(n_iters):#产生随机数r1,r2r1 np.random.rand(pop_size,dim)r2 np.random.rand(pop_size,dim)#计算粒子群速度v w*vc1*r1*(p-x)c2*r2*(pg-x)#更新粒子群位置x v x#计算更新后的适应度fitness f(x)#需更新个体update_id np.greater(individual_best_fitness, fitness)#更新pp[update_id] x[update_id]#更新个体最优适应度individual_best_fitness[update_id] fitness[update_id]#更新全局最优位置与全局最优适应度if np.min(fitness) global_best_fitness:pg x[np.argmin(fitness)]global_best_fitness np.min(fitness) return pg