智能优化算法之粒子群算法(PSO)的实现(Python附源码)

这篇具有很好参考价值的文章主要介绍了智能优化算法之粒子群算法(PSO)的实现(Python附源码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、粒子群算法的实现思路

粒子群算法(Particle Swarm Optimization,PSO)是于1995年被Kennedy等人提出的一种模拟自然界中鸟群进行觅食过程的一种群智能优化算法,该算法将待求解问题的每一个候选解视作鸟群中的每一个个体的具体位置信息,每个候选解对应的最优适应度值作为每个个体在该位置处所能搜索到的食物的量,通过个体间位置信息的相互交流来发现目标范围内的最优适应度值对应的最优候选解。
在使用粒子群算法进行优化问题的求解时,需要进行理解的概念主要有两个,一个是粒子的位置信息,一个是粒子的速度信息。
粒子的位置信息通常对应着待优化问题的候选解,最初需要对此位置信息在目标范围内进行初始化,然后通过此位置信息计算获得此粒子的适应度值,在每次迭代的过程中粒子需要对自己的位置信息进行更新,具体的更新公式如下:
python导入pso算法,智能优化算法(Python),算法,python,人工智能,numpy
该公式表示个体i在第t次迭代后的位置信息等于在第t次迭代前的位置信息加上第t次迭代时的速度。

在对个体的位置信息进行更新前,需要通过计算获得个体新的速度信息,这一速度信息一般包括了个体在接下来的一次迭代过程中的移动方向和移动距离,其具体的计算公式如下:
python导入pso算法,智能优化算法(Python),算法,python,人工智能,numpy
等号右边分成三部分,第一部分是惯性因子乘以上一次迭代时的速度,第二部分为自我学习部分,括号中是该个体历史最优位置信息减去该个体上一次迭代时的位置信息,第三部分为种群学习部分,括号中是该种群历史最优位置信息减去该个体上一次迭代时的位置信息。w为惯性因子,c1、c2为加速因子,其中前者为每个粒子的个体学习加速因子,后者为每个粒子的全局学习加速因子,通常这两个数被设置为常数2,但也可设为其他的常数,但其取值范围处于[0,4]之间,r1与r2均为0到1之间的随机数。

二、算法步骤

粒子群算法的算法步骤可以总结如下:

  1. 按照问题的候选解形式,在目标范围内随机生成多个种群个体,然后分别计算出每个个体的适应度值;
  2. 将每个个体适应度值作为其历史最优适应度值,对应的位置信息作为历史最优的位置信息;
  3. 比较种群中所有个体的适应度值,将最好的适应度值作为全局历史最优适应度值,将对应的位置信息作为全局历史最优位置信息;
  4. 对每个个体依次其速度信息和位置信息进行更新;
  5. 对更新后的个体计算它们的适应度值,将此适应度值与个体历史最优适应度值进行比较,若更新后的适应度值更优,则对个体历史最优适应度值以及对应的个体历史最优位置信息进行更新,反之则不更新;
  6. 选出此时种群中适应度值最优的个体,将其适应度值与全局历史最优适应度值进行比较,若最优的适应度值较全局历史最优适应度值更好,则对全局历史最优适应度值以及对应的全局历史最优位置信息进行更新,反之则不更新;
  7. 重复步骤4到步骤6,当达到最大迭代次数或满足停止迭代条件后停止迭代,然后输出此时种群中的全局历史最优个体的位置信息。

三、实例

待求解问题:
Rosenbrock’s,取值范围为[-10,10],取值范围内的理想最优解为0,将其搜索的空间维度设为20。
python导入pso算法,智能优化算法(Python),算法,python,人工智能,numpy

实现源码:

#库的导入
import numpy as np
import random
import matplotlib.pyplot as plt
#待求解问题
def function(x):
    y1 = 0
    for i in range(len(x) - 1):
        y2 = 100 * ((x[i + 1] - x[i] ** 2) ** 2) + (x[i] - 1) ** 2
        y1 = y1 + y2
    y = abs(0 - y1)
    return y

rangepop=[-10,10]    #取值范围
pn=30   #种群数量
iterators = 1000    #迭代次数
w=0.9   #惯性因子
#两个加速系数
c1=2
c2=2
#a1用于存储种群个体位置信息,v用于存储种群个体移动速度,fitness用于存储个体适应度值
a1=np.zeros((pn,20))
v = np.zeros((pn, 20))
fitness=np.zeros(pn)

#对种群个体、移动速度进行初始化,计算初始适应度值
for j in range(pn):
    a1[j] = np.random.uniform(low=-10, high=10,size=(1, 20))
    v[j] = np.zeros((1,20))
    fitness[j] = function(a1[j])
#allpg,bestpg分别表示种群历史最优个体和适应度值
allpg,bestpg=a1[fitness.argmin()].copy(),fitness.min()
#poppn,bestpn分别存储个体历史最优位置和适应度值
poppn,bestpn=a1.copy(),fitness.copy()
#bestfitness用于存储每次迭代时的种群历史最优适应度值
bestfitness=np.zeros(iterators)
#开始迭代
for i in range(iterators):
    print("generation:",i)
    for m in range(pn):
        r1 = np.random.rand()
        r2 = np.random.rand()
        #计算移动速度
        v[m]=w*v[m]+c1*r1*(poppn[m]-a1[m])+c2*r2*(allpg-a1[m])
        #计算新的位置
        a1[m]=a1[m]+v[m]
        #确保更新后的位置在取值范围内
        a1[a1<rangepop[0]]=rangepop[0]
        a1[a1>rangepop[1]]=rangepop[1]
        #计算适应度值
        fitness[m] = function(a1[m])
        #更新个体历史最优适应度值
        if fitness[m]<bestpn[m]:
            bestpn[m]=fitness[m]
            poppn[m]=a1[m].copy()
    #更新种群历史最优适应度值
    if bestpn.min()<bestpg:
        bestpg=bestpn.min()
        allpg=poppn[bestpn.argmin()].copy()
    bestfitness[i]=bestpg
    print("the best fitness is:",bestfitness[i])

#将结果进行绘图
fig=plt.figure(figsize=(12, 10), dpi=300)
plt.title('The change of best fitness',fontdict={'weight':'normal','size': 30})
x=range(1,1001,1)
plt.plot(x,bestfitness,color="red",label="PSO",linewidth=3.0, linestyle="-")
plt.tick_params(labelsize=25)
plt.xlabel("Epoch",fontdict={'weight':'normal','size': 30})
plt.ylabel("Fitness value",fontdict={'weight':'normal','size': 30})
plt.xticks(range(0,1001,100))
plt.legend(loc="upper right",prop={'size':20})
plt.savefig("PSO.png")
plt.show()

图中横轴为迭代次数,纵轴为最优适应度值。
python导入pso算法,智能优化算法(Python),算法,python,人工智能,numpy

参考源码文章来源地址https://www.toymoban.com/news/detail-762647.html

到了这里,关于智能优化算法之粒子群算法(PSO)的实现(Python附源码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python实现PSO粒子群优化算法优化BP神经网络回归模型(BP神经网络回归算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取。 PSO是粒子群优化算法(Particle Swarm Optimization)的英文缩写,是一种基于种群的随机优化技术,由Eberhart和Kennedy于1995年提出。粒子群算法模仿昆虫、

    2024年02月13日
    浏览(50)
  • 数学建模--粒子群算法(PSO)的Python实现

    目录  1.开篇提示 2.算法流程简介 3.算法核心代码 4.算法效果展示 本题中需要处理的问题是:(设置搜索空间维度为20,范围为[-10,10])

    2024年02月10日
    浏览(34)
  • PSO粒子群优化算法

    粒子群算法(Particle Swarm Optimization) 优点: 1)原理比较简单,实现容易,参数少。 缺点: 1)易早熟收敛至局部最优、迭代后期收敛速度慢的。 算法拓展 针对标准PSO的缺点,通常有如下的改进: 实现参数的自适应变化。 引入一些其他机制。比如随机的因素,速度、位置的边界

    2024年02月14日
    浏览(41)
  • 粒子群优化算法(PSO)附代码

    粒子群优化算法(Particle Swarm Optimization,PSO)是一种经典的群智能算法,该算法灵感源自于鸟类飞行和觅食的社会活动,鸟群通过个体之间的信息交互来寻找全局最优点。PSO算法具有原理简单、较少的参数设置和容易实现等优点,因此近年来受到学者们的广泛关注和研究。 粒子

    2023年04月08日
    浏览(46)
  • 时序预测 | MATLAB实现PSO-LSSVM粒子群算法优化最小二乘支持向量机时间序列预测未来

    预测效果 基本介绍 1.Matlab实现PSO-LSSVM时间序列预测未来(粒子群优化最小二乘支持向量机,优化RBF核函数的gam和sig); 2.运行环境Matlab2018及以上,data为数据集,单变量时间序列预测,运行主程序PSO_LSSVMTSF即可,其余为函数文件,无需运行; 3.递归预测未来数据,可以控制预测

    2024年02月10日
    浏览(59)
  • 粒子群算法PSO优化LSTM超参数

    LSTM 航空乘客预测单步预测的两种情况。 简单运用LSTM 模型进行预测分析。 加入注意力机制的LSTM 对航空乘客预测采用了目前市面上比较流行的注意力机制,将两者进行结合预测。 多层 LSTM 对航空乘客预测 简单运用多层的LSTM 模型进行预测分析。 双向LSTM 对航空乘客预测双向

    2024年02月07日
    浏览(46)
  • 回归预测 | MATLAB实现PSO-RBF粒子群优化算法优化径向基函数神经网络多输入单输出回归预测(多指标,多图)

    效果一览 基本介绍 回归预测 | MATLAB实现PSO-RBF粒子群优化算法优化径向基函数神经网络多输入单输出回归预测(多指标,多图),输入多个特征,输出单个变量,多输入单输出回归预测; 多指标评价,代码质量极高;excel数据,方便替换,运行环境2018及以上。 评价指标MAE、

    2024年02月12日
    浏览(58)
  • 回归预测 | MATLAB实现PSO-DNN粒子群算法优化深度神经网络的数据多输入单输出回归预测

    效果一览 基本介绍 回归预测 | MATLAB实现PSO-DNN粒子群算法优化深度神经网络的数据多输入单输出回归预测 MATLAB实现PSO-DNN粒子群算法优化深度神经网络的数据多输入单输出回归预测(Matlab完整程序和数据) 输入7个特征,输出1个,即多输入单输出; 运行环境Matlab2018及以上,运

    2024年02月12日
    浏览(56)
  • 单目标应用:粒子群优化算法(PSO)求解微电网优化MATLAB

    微电网优化模型介绍: 微电网多目标优化调度模型简介_IT猿手的博客-CSDN博客 (1)部分代码 (2)部分结果

    2024年02月06日
    浏览(62)
  • Particle Swarm Optimization粒子群优化算法(PSO算法)概念及实战

    粒子群算法(PSO算法) 粒子群算法,又称粒子群优化算法(Particle Swarm Optimization),缩写为 PSO, 是近年来发展起来的一种新的进化算法(Evolutionary Algorithm - EA),由Eberhart 博士和Kennedy 博士于1995年提出,其源于对鸟群捕食的行为研究。 PSO模拟鸟群的捕食行为。 设想这样一

    2024年02月16日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包