数学建模--粒子群算法(PSO)的Python实现

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

目录

 1.开篇提示

2.算法流程简介

3.算法核心代码

4.算法效果展示

 1.开篇提示

"""
开篇提示:
这篇文章是一篇学习文章,思路和参考来自:https://blog.csdn.net/weixin_42051846/article/details/128673427?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-4-128673427-blog-127750401.235^v38^pc_relevant_anti_t3&spm=1001.2101.3001.4242.3&utm_relevant_index=7
我基于自己的研究习惯对于该博主的文章进行了部分的学习和理解,并且对于代码进行了部分的修改,但总体还是参考他的思路和代码,在这里表示非常的感谢!
如果你想更了解PSO算法的内核,请您移步其博客,该博客给出了非常细致的分析。
代码修改处如下所示:
1.添加图片中的中文文字(matplotlib汉化问题)
2.fit_fun()书写简化
3.绘图更加清晰精炼
4.修改迭代函数部分中的计算量
"""

2.算法流程简介

"""
粒子群算法(PSO):是一种模拟鸟类觅食的智能优化算法
该算法的求解思路就是将待求解问题的每一个候选解视作鸟群中的每一个个体的具体位置信息,
每个候选解对应的最优适应度值作为每个个体在该位置处所能搜索到的食物的量,
通过个体间位置信息的相互交流来发现目标范围内的最优适应度值对应的最优候选解。
###重要概念
使用粒子群算法的时候我们需要及时去更新两个主要算式,也是PSO中最重要的两个公式
1.粒子的位置信息需要进行不断更新,对于每一个粒子的位置信息的计算更新公式:x(t+1)=x(t)+V(t+1)
2.对于粒子的下一次的移动更新距离,就涉及到了迭代的移动方向和距离,其更新公式如下所示:V(t+1)=wV(t)+c1r1(pbest(t)-x(t))+c2r2(gbest(t)-x(t))
有了以上的公式,我们处理PSO问题就变得比较简单了!
"""
"""
具体的算法流程如下:
1.基础参数的设置
2.初始化loc,v和种群适应度
3.标记最优个体数据
4.进行种群迭代运算
5.绘制可视化图片查看变化趋势
"""

本题中需要处理的问题是:(设置搜索空间维度为20,范围为[-10,10])

数学建模--粒子群算法(PSO)的Python实现,数学建模,数学建模,算法,python

3.算法核心代码

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.pyplot as plt
#matplotlib支持中文
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号
def fit_fun(x):
    y1=0
    for i in range(len(x)-1):
        y1=y1+100*((x[i+1]-x[i]*x[i])*(x[i+1]-x[i]*x[i]))+(x[i]-1)*(x[i]-1)
    y=abs(y1)
    return y
#1.基础参数的设置
range1=[-10,10]#取值范围
pso_number=300#进化种群的数量
iterators = 2000 #迭代次数最好大于500次以上,不然效果不明显   
w=0.8   #惯性因子
#两个加速系数
c1=2
c2=2
#种群个体的位置
loc=np.zeros((pso_number,20))
#种群个体的移动速度
v= np.zeros((pso_number, 20))
#种群的个体适应度值
fitness=np.zeros(pso_number)

#2.初始化loc,v和种群适应度
for j in range(pso_number):
    loc[j] = np.random.uniform(low=-10, high=10,size=(1, 20))
    v[j] = np.zeros((1,20))
    fitness[j] = fit_fun(loc[j])
#3.标记最优个体数据
allpg,bestpg=loc[fitness.argmin()].copy(),fitness.min()#allpg,bestpg分别表示种群历史最优个体和适应度值
poppn,bestpn=loc.copy(),fitness.copy()#poppn,bestpn分别存储个体历史最优位置和适应度值
bestfitness=np.zeros(iterators)#bestfitness用于存储每次迭代时的种群历史最优适应度值
#4.进行种群迭代运算
#开始迭代
for i in range(iterators):
    print("此时为第",i+1,"次迭代:")
    for m in range(pso_number):
        r1 = np.random.rand()
        r2 = np.random.rand()
        #计算移动速度同时更新位置信息
        v[m]=w*v[m]+c1*r1*(poppn[m]-loc[m])+c2*r2*(allpg-loc[m])
        loc[m]=loc[m]+v[m]
        #确保更新后的位置在取值范围内
        loc[loc<range1[0]]=range1[0]
        loc[loc>range1[1]]=range1[1]
        #计算适应度值
        fitness[m] = fit_fun(loc[m])
        #更新个体历史最优适应度值
        if fitness[m]<bestpn[m]:
            bestpn[m]=fitness[m]
            poppn[m]=loc[m].copy()
    #更新种群历史最优适应
    if bestpn.min()<bestpg:
        bestpg=bestpn.min()
        allpg=poppn[bestpn.argmin()].copy()
    bestfitness[i]=bestpg
    print("当前最佳的群体适应值为:",bestfitness[i])

#5.绘制可视化图片查看变化趋势
fig=plt.figure()
plt.title('适应度的变化曲线')
x=range(1,iterators+1,1)
plt.plot(x,bestfitness,color="green",label="PSO优化曲线",linewidth=2.0, linestyle="-")
plt.xlabel("迭代次数范围")
plt.ylabel("适应度值范围")
plt.legend(loc=3, borderaxespad=0., bbox_to_anchor=(0.7, 0.85))
plt.savefig('C:/Users/Zeng Zhong Yan/Desktop/粒子群算法.png', dpi=500, bbox_inches='tight')
plt.show()

4.算法效果展示

数学建模--粒子群算法(PSO)的Python实现,数学建模,数学建模,算法,python文章来源地址https://www.toymoban.com/news/detail-695461.html

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

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

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

相关文章

  • 【数学建模】常用算法-主成分分析PCA的Python实现

    本文主要讲解主成分分析析法(PCA)的python实现,后续会跟进实例分析 主成分分析PCA是一种应用广泛的和降维方法,对其实现做以下归纳 导入包 定义计算协方差矩阵函数 X为输入的数据,m为样本数据的条数,也就是X的行数。 对X进行标准化,方法为:减去均值除以方差,这

    2023年04月08日
    浏览(106)
  • 数学建模|通过模拟退火算法求解供货与选址问题:问题二(python代码实现)

    今天继续用模拟退火算法供货与选址问题的问题二,如果还没看过问题一的可以看我之前的博客 数学建模|通过模拟退火算法求解供应与选址问题:问题一(python代码实现)-CSDN博客 这里还是把题目放上来(题目来自数学建模老哥的视频): 那么我们可以分析一下,第一问和

    2024年01月16日
    浏览(57)
  • 数学建模--时间序列预测模型的七种经典算法的Python实现

    目录 1.开篇版权提示 2.时间序列介绍  3.项目数据处理 4.项目数据划分+可视化 5.时间预测序列经典算法1:朴素法 6.时间预测序列经典算法2: 简单平均法 7.时间预测序列经典算法3:移动平均法 8.时间预测序列经典算法4:简单指数法  9.时间预测序列经典算法5:Holt线性趋势法

    2024年02月10日
    浏览(45)
  • 智能优化算法之粒子群算法(PSO)的实现(Python附源码)

    粒子群算法(Particle Swarm Optimization,PSO)是于1995年被Kennedy等人提出的一种模拟自然界中鸟群进行觅食过程的一种群智能优化算法,该算法将待求解问题的每一个候选解视作鸟群中的每一个个体的具体位置信息,每个候选解对应的最优适应度值作为每个个体在该位置处所能搜

    2024年02月04日
    浏览(58)
  • 智能优化之粒子群算法(PSO)(Matlab,python,C++实现)

    一、算法简介 粒子群算法(Particle swarm optimization, PSO)是一种仿生算法,它是一种 在求解空间中寻找最优解 的简单算法。它与其他优化算法的不同之处在于,它只需要 目标函数,不依赖于目标的梯度或任何微分形式。它也有很少的超参数。 由Kennedy和Eberhart于1995年提出; 群体

    2024年02月16日
    浏览(62)
  • Python 数学建模算法与应用(持续更新)

    目录 第一章  python使用入门 1.1 Python核心工具库 1. Numpy 2. SciPy 3. Matplotlib 4. IPython 5. SymPy 6. Pandas 1.2  Python基本数据类型 1. Numpy (1)强大的多维数组对象 (2)复杂的函数功能 (3)集成c/c++和FORTRAN代码的工具 (4)有用的线性代数、傅里叶变换和随机数功能等。 import numpy as

    2024年02月09日
    浏览(56)
  • Python实现PSO粒子群优化算法优化LightGBM分类模型(LGBMClassifier算法)项目实战

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

    2024年02月15日
    浏览(53)
  • Python实现PSO粒子群优化算法优化随机森林分类模型(RandomForestClassifier算法)项目实战

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

    2024年02月13日
    浏览(43)
  • 集货运输优化:数学建模步骤,Python实现蚁群算法(解决最短路径问题), 蚁群算法解决旅行商问题(最优路径问题),节约里程算法

    目录 数学建模步骤 Python实现蚁群算法(解决最短路径问题)  蚁群算法解决旅行商问题(最优路径问题)

    2024年02月09日
    浏览(57)
  • 【Python数学建模常用算法代码——蒙特卡洛模型】

    蒙特卡洛方法的理论支撑其实是概率论或统计学中的大数定律。基本原理简单描述是先大量模拟,然后计算一个事件发生的次数,再通过这个发生次数除以总模拟次数,得到想要的结果。下面我们以三个经典的小实验来学习下蒙特卡洛算法思想。 实验原理 在正方形内部有一

    2024年02月02日
    浏览(52)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包