数学建模--粒子群算法(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])

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=0for 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]=bestpgprint("当前最佳的群体适应值为:",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.算法效果展示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/68903.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

F#奇妙游(25):ADT和领域设计

前言 采用ADT来对领域进行设计&#xff0c;是一种很好的实践。在这种实践中&#xff0c;我们可以把领域中的数据抽象成ADT&#xff0c;把领域中的操作抽象成函数&#xff0c;然后利用ADT的类型系统来进行类型检查&#xff0c;从而保证领域中的数据和操作的正确性。 设计目标 …

【AGC】云数据库API9开发问题汇总

【问题描述】 云数据库HarmonyOS API9 SDK已经推出了一段时间了&#xff0c;下面为大家汇总一些在集成使用中遇到的问题和解决方案。 【问题分析】 1. 报错信息&#xff1a;数据库初始化失败&#xff1a;{“message”&#xff1a;“The object type list and permission …

云原生Kubernetes:K8S常用服务端口

目录 一、理论 1.K8S常用服务端口号 一、理论 1.K8S常用服务端口号 &#xff08;1&#xff09;K8S集群 表1 K8S集群端口 协议端口号K8S集群TCP22使用主机驱动通过SSH进行节点配置TCP2376主机驱动与Docker守护进程通信的TLS端口TCP2379etcd客户端请求TCP2380etcd节点通信U…

PgSQL-并行查询系列-介绍[译]

PgSQL-并行查询系列-介绍 现代CPU模型拥有大量的CPU核心。多年来&#xff0c;数据库应用程序都是并发向数据库发送查询的。查询处理多个表的行时&#xff0c;若可以使用多核&#xff0c;则可以客观地提升性能。PgSQL 9.6引入了并行查询的新特性&#xff0c;开启并行查询后可以大…

es(Elasticsearch)介绍

学习es可以参考mysql&#xff08;相比mysql而言&#xff0c;es所需的cpu、内存更多&#xff09; 什么是Elasticsearch Elasticsearch简称es&#xff0c;是由Elastic和search组成。Elastic的意思是有弹性的&#xff0c;search的意思是搜索。 弹性&#xff1a;es是一个天生支持分…

笔记:linux中LED(GPIO)驱动设备树配置和用法

设备树中节点配置 设备树中的LED驱动一般是这样写&#xff0c;LED驱动可以控制GPIO的电平变化&#xff0c;生成文件节点很方便 leds: leds {compatible "gpio-leds";gpio_demo: gpio_demo {label "gpio_demo";gpios <&gpio0 RK_PC0 GPIO_ACTIV…

晶圆键合对准机的原理与应用

一、晶圆键合设备的工作原理 1、 第一个晶圆面朝下置于晶圆对准设备卡盘并传送到对准机内&#xff1b; 2、对准机内&#xff0c;晶圆在Z轴方向上移动直到被顶部的传输夹具真空吸附固定&#xff1b; 3、被传输夹具固定的第一个晶圆将成为后续对准工艺的基准&#xff0c;确定所…

51、基于注解方式开发Spring WebFlux,实现生成背压数据,就是实现一直向客户端发送消息

★ Spring WebFlux的两种开发方式 1. 采用类似于Spring MVC的注解的方式来开发。此时开发时感觉Spring MVC差异不大&#xff0c;但底层依然是反应式API。2. 使用函数式编程来开发★ 基于注解开发Spring WebFlux 开发上变化并不大&#xff0c;主要是处理方法的返回值可使用Mon…

大数据组件系列-Hadoop每日小问

1、谈谈对HDFS的理解&#xff1f;HDFS这种存储适合哪些场景&#xff1f; HDFS即Hadoop Distributed File System&#xff0c;Hadoop 分布式文件系统。它为的是解决海量数据的存储与分析的问题&#xff0c;它本身是源于Google在大数据方面的论文&#xff0c;GFS-->HDFS; HD…

Mybatis的三种映射关系以及联表查询

目录 一、概念 二、一对一 1、配置generatorConfig.xml 2、Vo包的编写 3、xml的sql编写 4、编写对应接口及实现类 5、测试 三、一对多 1、Vo包类的编写 2、xml的sql编写 3、编写对应接口及实现类 4、测试 四、多对多 1、Vo类 2、xml的sql配置 3、接口及接口实现…

文件编辑器、用户管理,嘎嘎学

打开文件 vim # 首先你先得下载这个插件 yum install -y vim vim 文件名 进入编辑模式 i #在光标所在处进入编辑模式 a #在当前光标后面进入编辑模式 o #在光标的下一行进入编辑模式 I #在光标所在处行首进入编辑模式 A #在光标所在处行尾进入编辑模式 O #在光标的上一…

本地使用GFPGAN进行图像人脸修复

人脸修复 1.下载项目和权重文件2.部署环境3.下载权重文件4.运行代码5.网页端体验 首先来看一下效果图 1.下载项目和权重文件 https://github.com/iptop/GFPGAN-for-Video.git2.部署环境 根据README文件部署好环境&#xff0c;额外还需要&#xff1a; cd GFPGAN-1.3.8 pyt…

介绍GitHub

GitHub 是一个基于互联网的源代码托管平台&#xff0c;可以帮助软件开发者存储和管理源代码&#xff0c;方便团队协作和版本控制。GitHub 的主要功能包括&#xff1a; 代码托管&#xff1a;开发者可以在 GitHub 上创建远程代码仓库&#xff0c;存储和管理他们的源代码。 版本控…

金融信创,软件规划需关注自主安全及生态建设

软件信创化&#xff0c;就是信息技术软件应用创新发展的意思&#xff08;简称为“信创”&#xff09;。 相信在中国&#xff0c;企业对于“信创化”这个概念并不陌生。「国强则民强」&#xff0c;今年来中国经济的快速发展&#xff0c;受到了各大欧美强国的“卡脖子”操作的影…

大数据面试题:MapReduce压缩方式

面试题来源&#xff1a; 《大数据面试题 V4.0》 大数据面试题V3.0&#xff0c;523道题&#xff0c;679页&#xff0c;46w字 可回答&#xff1a;1&#xff09;Hadoop常见的压缩算法有哪些&#xff1f; 问过的一些公司&#xff1a;网易云音乐(2022.11)&#xff0c;阿里(2020.…

css 文字单行多行超出长度后显示 ...

0.超出… 1、单行文本超出 <div class"content">测试数据&#xff1a;css单行文本超出显示省略号--------</div><style> .content{width: 200px;height: 200px;overflow:hidden;white-space: nowrap;text-overflow: ellipsis;-o-text-overflow:el…

Linux C++ 海康摄像头获取过车信息

代码 void CALLBACK MessageCallback(LONG lCommand, NET_DVR_ALARMER *pAlarmer, char *pAlarmInfo, DWORD dwBufLen, void *pUser) {printf("enter MessageCallback---------------------->\n");int i;NET_DVR_ALARMINFO_V30 struAlarmInfo;memcpy(&struAl…

【运维基础】文本编辑器---nano的使用

前言 Nano 是一个简单易用的命令行文本编辑器&#xff0c;下面是一些基本使用方法 文章目录 前言打开文件光标控制&#xff1a;保存和退出&#xff1a; 打开文件 你可以使用以下命令打开一个文件进行编辑&#xff1a; nano 文件名光标控制&#xff1a; 使用方向键&#xf…

微服务主流框架概览

微服务主流框架概览 目录概述需求&#xff1a; 设计思路实现思路分析1.HSF2.Dubbo 3.Spring Cloud5.gRPC Service mesh 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a be…

计算机图形学线性代数相关概念

Transformation&#xff08;2D-Model&#xff09; Scale(缩放) [ x ′ y ′ ] [ s 0 0 s ] [ x y ] (等比例缩放) \left[ \begin{matrix} x \\ y \end{matrix} \right] \left[ \begin{matrix} s & 0 \\ 0 & s \end{matrix} \right] \left[ \begin{matrix} x \\ y \en…