粒子群算法在神经网络非线性函数拟合中的应用

合集下载

粒子群算法原理及应用

粒子群算法原理及应用

粒子群算法原理及应用随着人工智能技术的发展,各种算法被广泛应用在数据分析、预测以及优化等方面。

其中,粒子群算法(Particle Swarm Optimization,PSO)作为一种高效的全局优化算法,在实际应用中表现出色,受到了越来越多的关注与重视。

本文将围绕粒子群算法的原理与应用进行阐述。

一、粒子群算法的原理粒子群算法是一种基于群体智能的优化算法,借鉴了鸟群或鱼群等生物群体行为的思想。

它是一种随机化搜索算法,通过模拟大量粒子在问题空间中的随机移动,不断探索解空间,从而寻找全局最优解。

具体来说,粒子群算法是基于一个粒子群的模型,其中每个粒子代表一个搜索空间内的解。

每一个粒子都有一个自身的位置和速度,而粒子的位置和速度可以通过如下公式进行更新:$v_{i,j}=wv_{i,j}+c1r1(p_{ij}-x_{ij})+c2r2(g_{ij}-x_{ij})$$x_{i,j}=x_{i,j}+v_{i,j}$其中,$v_{i,j}$表示第$i$个粒子在第$j$个搜索空间维度上的速度,$w$表示惯性权重,$c1$和$c2$分别是自己的历史最佳位置$p_{ij}$和全局最佳位置$g_{ij}$对粒子位置的影响因子,$r1$和$r2$是0~1的随机数,$x_{i,j}$是粒子的位置。

通过更新速度和位置,粒子可以向更优秀的位置移动,从而不断逼近全局最优解。

这种不断更新、迭代搜索的过程可以实现全局搜索和多目标优化等问题领域的优化求解。

二、粒子群算法的应用粒子群算法最主要的应用领域是全局优化问题,如函数优化、数据拟合、最小二乘等问题的求解。

此外,粒子群算法还被广泛应用在神经网络训练、图像处理、机器学习等领域。

(一)函数优化函数优化问题是粒子群算法最基本的应用领域之一。

例如,在参数优化问题中,可以将参数空间定义为搜索空间,通过粒子群算法不断寻找全局最优解来优化模型参数。

在现实中,这种方法已被广泛应用于金融风险分析、选股等领域。

粒子群优化算法在计算机神经网络中的应用

粒子群优化算法在计算机神经网络中的应用
定 的 优 化 问题 有 效 。 不 过 导 数 的 问 世 又 给
研究者发现通过对导函数进行求解 因为这种算法具 有全 局优化 的特 点, 所 以被广泛 的用于 函数 优化 优化 问题 带了新的解决办法 , 但是这种求导 的解决方法也有一个很大 的 和计算 机神经 网络等领 域 中。 目前 , 国 内对 于粒子群优 化算法 的 也可以解 决优 化问题。 研 究 尚处于发展 阶段 , 今后还有 很多工 作要逐步 展开 。 本文将针 缺 陷 就 是 导 函数 只 能 对 一 些 简 单 的 并 且 满 足 一 定 条 件 的 问 题 进 对 于复杂 问题 的优化就 需要 悍匪很大 的精 力和时 间, 因 对 现有 的研 究, 对粒子群优化算法 的产生和发展 以及其在神经 网 行优 化, 此 , 实 际 运 用 并 不 是 很理 想 。 络 中的应用进行 论述 , 同时对粒 子群 优化算法 的未来发展趋 势进 行 展望 。 . 就在研 究者 走投无路 的时候, 数值 算法应运而 生。 所 谓数值
neur al ne t w or k
Di n g L i n g , F a n Pi n g , We n Bi n
( S c h o o l o f c o m p u t e r s c i e n c e a n d t e c h n o l o g y ,H u b e i I n s t i t u t e o f T e c h n o l o g y . 4 2 1 0 0 9 )
粒子群优 化算 法在计算机神经网络 中的应用
丁 玲 , 范 平 , 闻 彬 ( 湖北科技 学院计 算机 科学与技 术学院 4 2 1 0 0 9 )
摘要 : 粒子群优化算法 是一种新型 的计算技术 , 具有全局优化 的优势, 因而被广泛 的应用于优化 函数和计算机神经 网络 中。 本

粒子群算法与神经网络结合的优化算法研究

粒子群算法与神经网络结合的优化算法研究

粒子群算法与神经网络结合的优化算法研究随着人工智能和数据分析的快速发展,优化算法作为一种重要的数学方法,在各个领域中得到了广泛应用。

其中,粒子群算法和神经网络结合的优化算法,已经成为优化问题的一种新思路。

粒子群算法是一种优化算法,灵感来源于鸟群捕食的策略。

鸟群在进行捕食时,会根据周围环境和食物的分布情况,不断调整自己的方向和速度。

同样,粒子群算法中的“粒子”,也会根据周围其他粒子的信息和当前环境的优化目标,去更新自己所处的位置和速度。

神经网络作为另一种常用的数学方法,其本质是一种多层次的非线性函数。

神经网络通常被用来解决分类、识别和预测等问题。

其通过对输入变量的权重和偏差进行变化,不断调整模型参数,从而优化预测的准确性和泛化能力。

将这两种方法进行结合,即可形成一种有效的优化算法。

具体而言,粒子群算法可以用来寻找神经网络中的最优参数,从而提高模型的性能。

而神经网络则可以作为粒子群算法的优化目标,通过反馈神经网络预测误差,不断调整粒子的位置和速度。

这种结合方法的好处在于,能够同时利用粒子群算法的全局优化和神经网络的非线性优势。

在一些特定的优化问题中,甚至可以得到比单一方法更优秀的解决方案。

另外,在实际应用中,这种结合方法也有着很大的潜力。

例如,在智能物流中,可以运用粒子群算法从一堆货物中找出最优的装载方式,在这个过程中可以利用神经网络为每个货物进行分类,不断调整粒子,从而更好地进行装载。

在医学影像诊断中,可以利用神经网络对医学影像进行自动识别和分析,然后通过粒子群算法优化多个相关参数,从而提高诊断准确率。

总之,粒子群算法和神经网络结合的优化算法,在各个领域中有着重要的应用和价值。

虽然这种结合方法还处于起步阶段,但我们相信在不久的将来,它们将会得到更广泛的应用,并为我们带来更加稳健、高效和准确的优化算法。

粒子群算法在神经网络非线性函数拟合中的应用

粒子群算法在神经网络非线性函数拟合中的应用
c mp tin a d c o eain b t e atce nod rt o lt h ewok lann rc s.Smuainr slss o ta,b s d o P e r o eio n o p rto ewe n p rilsi re oc mpeeten t r e ri gp o es i lto eut h w h t ae n S SO n u a t l
21 02年
第5 期
S I N E&T C N L G F R TO CE C E H O O YI O MA I N N
O科教前f  ̄O
科技信息
粒子群算法在神经网络非线性函数拟合中的应用
冉 宁 ( 华北 电力大学 控 制与计 算机 工程 学院
河北
保定
0 10 ) 7 0 3
B P神经网络是一种 多层前馈 神经网络Ⅲ 该 网络的主要特点是信 . 号前向传播 , 反向传播 。B 神经 网络 的拓扑结构如图 1 误差 P 所示 。 练的 目标 , P B 算法来 训练 网络 , , 使 足够小 , 就可 以达 到辨识对象 模

Xl

yi
型 的 目的 21 应用实例及仿真 .
【 要】 摘 针对传统神 经网络 学习算法中存在的收敛速度慢 、 容易陷入局部 最优等缺点 , 设计 了基于标准粒子群算 法(PO) SS 的神经 网络非 线性 函数拟合 系统。 将神 经网络 中的权值看作一个粒子 . 通过粒子之 间的竞争与合作 以完成网络的学习过程 。 仿真结果表 明 , 基于 S S P O的神 经网络 学习算法在收敛速度、 辨识精度等 方面要优 于传统的 BP神经 网络。 【 关键词 】 准粒子群算法 ; P 标 B 神经 网络 ; 系统辨识 ; T A MA L B

非线性微分方程的智能优化

非线性微分方程的智能优化

非线性微分方程的智能优化随着科学技术的不断发展,非线性问题在各个领域中的出现越来越普遍。

在数学、物理、生物、医学等领域,非线性微分方程模型的建立和求解已成为研究的重要课题。

而传统的求解方法,如数值算法和解析方法,已经不能完全满足实际需求。

因为在实际问题中,通常涉及的非线性微分方程模型是十分复杂且多样的。

近年来,随着人工智能等技术的快速发展,非线性微分方程智能优化方法进入人们的视野。

智能优化算法包括遗传算法、粒子群优化、蚁群算法等,这些算法通过模拟自然界中生物的优化行为,寻找全局最优解。

其中,粒子群优化算法应用最为广泛。

粒子群优化算法(Particle Swarm Optimization,PSO)是一种基于群体智能的优化算法。

它最初是由Eberhart和Kennedy于1995年提出的。

PSO算法根据群体的经验不断调整参数以达到最优状态,实现了较高的求解精度和计算效率。

该算法的优点在于其求解速度快,易于实现,而且不需要梯度信息。

以Lotka-Volterra方程为例,该方程模拟了一种生态系统中食肉动物和食草动物的相互作用。

这个方程是一个经典的非线性微分方程,由以下两个公式组成:(dN1/dt) = r1N1 - a1N1N2(dN2/dt) = -r2N2 + a2N1N2其中,N1和N2分别表示食草动物和食肉动物的数量,r1和r2分别是它们的自然增长率,而a1和a2是它们之间的相互作用系数。

该模型的目标是预测不同时间下种群数量的变化,从而有助于采取相应的保护和管理措施。

对于这个模型的求解,传统的数值算法往往需要进行较多的试验和调整,难以得到全局最优解。

而PSO算法不仅具有较高的求解速度和精度,还能对参数进行非线性组合优化,能够更好地预测不同时间下种群数量的变化趋势。

在实际应用中,粒子群优化算法已被广泛用于生态学、气象预测、金融建模等领域中复杂非线性系统的建模和优化。

除了PSO算法,遗传算法、蚁群算法等优化方法也在非线性微分方程求解中得到了应用。

一种混合量子粒子群算法在神经网络设计中的应用

一种混合量子粒子群算法在神经网络设计中的应用
研 究 与 开发
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —



L ( 1 J J )
L) ( z 2 J


/ -d d Z  ̄, /
子 粒 子 群算 法 ( D S ) 网 络拓 扑 结 构 优 化 的 同时 利 Q PO对 用 改 进 的粒 子群 算 法 ( S 对 连 接 权 重 ( 括 节 点 阈 Me O) 包 值 )进 行 优 化 求 解 .并 在 此 基 础 上 引入 了 遗 传 选 择 机
0 引

1 粒 子 群算 法
粒子群优化算法i1 基于群体 与适 应值 的。粒子 4是 - 5
群 的 一 个 粒 子 代 表 问 题 的 一 个 可 能 解 ,每 个 粒 子 具 有
位 置 和 速 度 2个 特 征 .粒 子 位 置 坐 标 对 应 的 目标 函数 值 即 可 作 为 该 粒 子 的 适 应 值 .算 法 通 过 适 应 值 来 衡 量 粒 子 的优 劣
略 . 高 基 本 粒 子 群 算 法 的性 能 . 子 的更 新 速 度 和 提 粒 位 置表 示 为 :
制 .算 法 在 接 近 最 优 解 时 收 敛 缓 慢 甚 至 出现 收 敛 停 滞

粒子群优化神经网络算法在非线性系统辨识中的应用研究

粒子群优化神经网络算法在非线性系统辨识中的应用研究

用B P神经 网络对非线性对象进行 逼近辨识 , 再采用粒 子群算法优化 B P网络 的方法 。仿真结果表明该方法能够实现更 大精度 的辨识效果 。 关键 谲
中图分类号
Ne u r a l Ne t wo r k Op t i mi z e d wi t h P a r t i c l e S wa r m Al g o r i t h m i n
1 引 言
目前 神经 网络 在 很 多 领 域 取 得 了 巨 大 的 成 功 , 但 其 也
线性 的 , 也可 以为线性 的 , 多层前 向神经 网络 能逼近 任意非
线 性 函数 , 在 非线 性 控 制 领 域 有 广 泛 的 应 用
输 入层 节点 隐层节 点

输 出层 书点
Abs t r a c t Th e ne u r a l n e t wo r k ha s a c h i e v e d g r e a t s u c c e s s i n ma n y a r e a s ,b u t i t a l s o h a s i t s o wn d e f i c i e nc i e s a n d s h o r t c o mi n g s s u c h a s
特点 , 取 得 了 良好 的效 果 。
2 基于 B P神 经 网络 的 系统 辨识
在现 实 中 , 几 乎 所 有 的 实 际 系 统 都 是 非 线 性 系 统 。要
图l B P神 经 I N络 结 构
解决 非线性 系统 的辨识 问题 , 首 先要解 决 的就是 非线性 系 统的描述 问题 , 但迄今为止 , 仍缺 乏描述各 种非线性 系统的 统一的数学理论 ] 。由于 B P神 经 网络 能实 现任 意非线

粒子群优化算法及其应用

粒子群优化算法及其应用
近几十年来面对信息时代海量数据的出现数据挖掘技术应运而生并得到迅猛发展其中关联规则挖掘作为数据挖掘的重要模式之一它所得到的知识能为支持决策提供依据有着极其重要的研究价值
华中科技大学 硕士学位论文 粒子群优化算法及其应用 姓名:王雁飞 申请学位级别:硕士 专业:软件工程 指导教师:陆永忠 20081024
1.2
1.2.1
课题研究现状
粒子群优化研究现状 粒子群优化算法是 1995 年由 Kennedy 和 Eberhart 源于对鸟群和鱼群捕食行为的
1
华 中 科 技 大 学 硕 士 学 位 论 文
简化社会模型的模拟而提出的一种基于群集智能的演化计算技术[1,2]。该算法具有并 行处理、鲁棒性好等特点,能以较大的概率找到问题的全局最优解,且计算效率比 传统随机方法高,其最大的优势在于实现容易、收敛速度快,而且有深刻的智能背 景,既适合科学研究,又适合工程应用。因此,PSO 一经提出立刻引起了演化计算 领域研究者的广泛关注,并在短短几年时间里涌现出大量的研究成果,在函数优化、 神经网络训练、模糊系统控制、分类、模式识别、信号处理、机器人技术等领域获 得了成功应用。 PSO 算法是基于群集智能理论的优化算法,通过群体中粒子间的合作与竞争产 生的群体智能指导优化搜索。与进化算法比较,粒子群优化算法不仅保留了基于种 群的全局搜索策略,而且又避免了复杂的遗传操作,它特有的记忆使其可以动态跟 踪当前的搜索情况调整其搜索策略。与进化算法比较,PSO 算法是一种更高效的并 行搜索算法,但其不足之处是在某些初始化条件下易陷入局部最优,且搜索精度比 遗传算法低[3]。 由于 PSO 算法概念简单,实现容易,短短几年时间,PSO 算法便获得了很大的 发展,但是,其数学基础不完善,实现技术不规范,在适应度函数选取、参数设置、 收敛理论等方面还存在许多需要深入研究的问题。文献[4-6]展开了一系列研究,取得 了一些建设性的成果,如关于算法收敛性的分析。围绕 PSO 的实现技术和数学理论 基础,以 Kennedy 和 Eberhart 为代表的许多专家学者一直在对 PSO 做深入的探索, 尤其在实现技术方面,提出了各种改进版本的 PSO。 对 PSO 参数的研究,研究最多的是关于惯性权重的取值问题。PSO 最初的算法 是没有惯性权重的, 自从 PSO 基本算法中对粒子的速度和位置更新引入惯性权重[7,8], 包括 Eberhart、Shi 等在内的许多学者对其取值方法和取值范围作了大量的研究[9-11]。 目前大致可分为固定惯性权重取值法、线性自适应惯性权重取值法、非线性惯性权 重取值法[12-14]等。 PSO 是一种随机优化技术,其实现技术与遗传算法(GA)非常相似,受 GA 的启 发,人们提出多种改进的 PSO 算法,如带交叉算子的 PSO、带变异算子的 PSO、带 选择算子的 PSO 等等。 文献[15]在粒子群每次迭代后, 通过交叉来生成更优秀的粒子,
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

粒子群算法在神经网络非线性函数拟合中的应用一、本文研究和解决的问题在自动控制问题中,系统辨识的目的是为了建立被控对象的数学模型。

多年来,控制领域对于复杂的非线性对象的辨识一直未能很好的解决,神经网络所具有的非线性特性和学习能力使其在系统辨识方面有很大的潜力。

为解决具有复杂的非线性、不确定性和不确知对象的辨识问题开辟了一条有效的途径。

基于神经网络的系统辨识是以神经网络作为被辨识对象的模型,利用其非线性特性,可建立非线性系统的静态或动态模型。

理论上,多层前馈神经网络能够以任意精度逼近任意非线性映射。

但传统神经网络学习算法中存在的收敛速度慢、容易陷入局部最优等缺点,于是设计了基于标准粒子群算法的神经网络非线性函数拟合系统。

二、传统的BP神经网络BP 神经网络即采用误差反向传播算法的网络,是一种至今仍然最为流行的前馈型神经网络模型。

BP 神经网络有很强的非线性映射能力,它能学习和存贮大量输入-输出模式映射关系,而无需事先了解描述这种映射关系的数学方程。

只要能提供足够多的样本模式对供给网络进行学习训练,它便能完成由n 维输入空间到m 维输出空间的非线性映射。

BP 学习算法属于误差修正型学习,其关键在于根据误差修正输出层和隐含层的连接权值。

其学习的基本实现方法是基于最小平方误差准则和梯度下降优化方法来确定权值调整法则。

BP网络建模特点:非线性映照能力:神经网络能以任意精度逼近任何非线性连续函数。

在建模过程中的许多问题正是具有高度的非线性。

并行分布处理方式:在神经网络中信息是分布储存和并行处理的,这使它具有很强的容错性和很快的处理速度。

自学习和自适应能力:神经网络在训练时,能从输入、输出的数据中提取出规律性的知识,记忆于网络的权值中,并具有泛化能力,即将这组权值应用于一般情形的能力。

神经网络的学习也可以在线进行。

数据融合的能力:神经网络可以同时处理定量信息和定性信息,因此它可以利用传统的工程技术(数值运算)和人工智能技术(符号处理)。

多变量系统:神经网络的输入和输出变量的数目是任意的,对单变量系统与多变量系统提供了一种通用的描述方式,不必考虑各子系统间的解耦问题。

三、解决问题的思想与方法针对传统神经网络学习算法中存在的收敛速度慢、容易陷入局部最优等缺点,设计了基于标准粒子群算法的神经网络非线性函数拟合系统,将神经网络中的权值看作一个粒子,通过粒子之间的竞争与合作以完成网络的学习过程,仿真结果表明,基于BP的神经网络学习算法在收敛速度、辨识精度等方面要优于传统的BP神经网络。

粒子群优化算法(PSO,Particle Swarm Optimization)是计算智能领域,除了蚁群算法、鱼群算法之外的一种群体智能的优化算法。

PSO 算法源于对鸟类捕食行为的研究,鸟类捕食时,每只鸟找到食物最简单有效的方法就是搜寻当前距离食物最近的鸟的周围区域。

PSO 算法首先在可解空间中初始化一群粒子,每个粒子都代表问题的一个潜在解,用位置、速度和适应度值三项指标表示该粒子特征。

适应度值由适应度函数计算得到,其值的好坏表示粒子的优劣。

粒子的速度决定了粒子移动的方向和距离,速度随自身及其他粒子的移动经验进行动态调整,从而实现个体在可解空间中的寻优。

粒子在解空间中运动,通过跟踪个体最优值Pbest 和群体最优值Gbest 更新个体位置,个体最优值Pbest 是指个体所经历位置中计算得到的适应度值最好的位置,群体最优值Gbest 是指粒子群中所有粒子搜索到的适应度最好的位置。

粒子每更新一次位置,就计算一次适应度值,并且通过比较新粒子的适应度值和个体最优值、群体最优值的适应度值更新Pbest 和Gbest 的位置。

粒子位置和速度的调整是粒子群算法的关键。

假设在一个D 维的搜索空间中,由n 个粒子组成的种群X ( X1, X 2 ,……, X n ) ,其中第i 个例子表示为一个D 维的向量X i (xi1, xi 2 ,……, xiD )T ,代表第i 个粒子在D维搜索空间中的位置,亦代表问题的一个潜在解。

根据目标函数即可计算出每个粒子位置Xi 对应的适应度值。

第i 个粒子的速度为Vi (vi1, vi 2 ,……, viD )T ,其个体极值为P ( pi1, pi 2 ,……, piD )T ,种群的全局极值为P( pg1, pg 2 ,……, pgD )T 。

四、实验仿真结果五、程序基本BP网络函数逼近程序function [epoch,s,Wki,Wij,Wb,Ez]=dyb(lr,Emin,q)%初始化;%lr 学习效率;Emin为期望误差最小值;q为隐含层节点数;b=1;sum=0;Ez=[];max_epoch=30000;%max_epoch训练的最大次数;%提供训练集和目标值;x=8.*rand(1,100)-4;y=1.1.*(1-x+2.*x.^2).*exp(-x.^2/2)+0.1*rand(1,100);%初始化Wki,Wij;Wij=rand(1,q);Wki=rand(1,q);Wb=rand(1,q);for epoch=1:max_epochE=0;m=1;oi=0;ok=0;%置隐含层和输出层各神经元输出初值为零;for m=1:100%计算隐含层各神经元输出;NETi=x(m)*Wij+b*Wb;for t=1:qoi(t)=1/(1+exp(-NETi(t)));end%计算输出层各神经元输出;NETk=Wki*oi';ok=NETk;%计算误差;E=E+(y(m)-ok)^2;%调整输出层加权系数;deltak=y(m)-ok;Wki=Wki+lr*deltak*oi;%调整隐含层加权系数;deltai=oi.*(1-oi).*(deltak*Wki);Wij=Wij+lr.*deltai.*x(m);Wb=Wb+lr.*deltai;endEz(epoch)=sqrt(E/100);if Ez(epoch)<Eminbreak;endend%计算测试输出;x=linspace(-4,4,100);%给定输入:y=1.1.*(1-x+2.*x.^2).*exp(-x.^2/2)+0.1*rand(1,100); for i=1:100NETi=x(i).*Wij+b*Wb;NETk=0;for t=1:qoi(t)=1/(1+exp(-NETi(t)));NETk=NETk+Wki(t)*oi(t);endok(i)=NETk;sum=sum+(y(i)-ok(i))^2;%输出总误差;ends=sqrt(sum/100);计算函数:function [cs,wc]=js dyb(lr,q)Emin=0.1;s1=0;s2=0;for k=1:5[x1,x2]=dyb(lr,Emin,q);s1=s1+x1;s2=s2+x2;endcs=s1/5;wc=s2/5;function A=zjs dyb(lr)q=[4,5,7,8,10];format short gA=[];for zk=1:5[cs,wc]=js dyb(lr,q(zk));B=[cs,wc];A=[A;B];end图形显示函数:function tx dyb(lr,q)%计算测试输出;Emin=0.1;b=1;[epoch,s,Wki,Wij,Wb,Ez]=dyb(lr,Emin,q)x=linspace(-4,4,100);%给定输入:y=1.1.*(1-x+2.*x.^2).*exp(-x.^2/2)+0.1*rand(1,100); for i=1:100NETi=x(i).*Wij+b*Wb;NETk=0;for t=1:qoi(t)=1/(1+exp(-NETi(t)));NETk=NETk+Wki(t)*oi(t);endok(i)=NETk;end%显示图形;figureplot(x,ok,'r')hold ony=1.1.*(1-x+2.*x.^2).*exp(-x.^2/2)+0.1*rand(1,100); plot(x,y,'b')title('Hermit多项式曲线与BP网络输出曲线')legend('BP曲线','Hermit曲线')hold offfigureplot(x,ok,'or')hold onx=8.*rand(1,100)-4;y=1.1.*(1-x+2.*x.^2).*exp(-x.^2/2)+0.1*rand(1,100); plot(x,y,'*k')title('训练样本与测试样本')xlabel('input x')ylabel('output y')legend('测试样本','训练样本')figureplot([1:length(Ez)],Ez)title('收敛曲线')clcPSO优化神经网络程序clcclear all%一、初始化部分%1.1 预处理样本数据% 选取训练样本(x,y)for i=1:100x=8.*rand(1,100)-4;y=1.1.*(1-x+2.*x.^2).*exp(-x.^2/2)+0.1*rand(1,100);% 待逼近函数endAllSamIn=linspace(-4,4,100); %训练样本输入AllSamOut=y; %训练样本输出%选取测试样本for i=1:100x=8.*rand(1,100)-4; %测试样本输入ytest =1.1.*(1-x+2.*x.^2).*exp(-x.^2/2)+0.1*rand(1,100); %测试样本输出endAlltestIn= linspace(-4,4,100);AlltestOut=ytest;%归一化训练样本,测试样本[AlltestInn,minAlltestIn,maxAlltestIn,AlltestOutn,minAlltestOut,maxAl ltestOut]= premnmx(AlltestIn,AlltestOut); %测试样本[AllSamInn,minAllSamIn,maxAllSamIn,AllSamOutn,minAllSamOut,maxAllSamO ut]= premnmx(AllSamIn,AllSamOut); %训练样本testIn=AlltestInn;testOut=AlltestOutn;global Ptrain;Ptrain = AllSamInn;global Ttrain;Ttrain = AllSamOutn;%1.2 设置神经网络参数global indim; %输入层神经元个数indim=1;global hiddennum; %隐藏层神经元个数hiddennum=3;global outdim; %输出层神经元个数outdim=1;global Gpos;%1.3 设置微粒群参数vmax=0.5; % 速度上限minerr=1e-7; % 目标误差wmax=0.95;wmin=0.25;global itmax; % 最大迭代次数itmax=200;c1=1.5;c2=1.5;%权值随迭代次数线性递减以保证收敛for iter=1:itmaxW(iter)=wmax-((wmax-wmin)/itmax)*iter; enda=-1;b=1;m=-1;n=1;global N; % 微粒个数N=30;global D; % 每个微粒的维数D=(indim+1)*hiddennum+(hiddennum+1)*outdim; %所有权值和阈值% 初始化微粒位置rand('state',sum(100*clock)); %产生和时间相关的随机数global X;X=a+(b-a)*rand(N,D,1); %X的值在a 和b之间%初始化微粒速度V=m+(n-m)*rand(N,D,1); %V的值在m和n之间%二、微粒群更新迭代部分%global net;net=newff(minmax(Ptrain),[hiddennum,outdim],{'tansig','purelin'}); global gbest; %全局最优位置global pbest; %局部最优位置%2.1第一次迭代fitness=fitcal(X,indim,hiddennum,outdim,D,Ptrain,Ttrain); %计算适应值[C,I]=min(fitness(:,1,1)); %第一代,返回微粒群中最小适应值给C,该微粒的序号给IL(:,1,1)=fitness(:,1,1); %第一代,每个微粒的适应值B(1,1,1)=C; %第一代,全局最优适应值(B存储当前代最优适应值)bestminimum(1)=C; % bestminimum存储所有代中的全局最小适应值gbest(1,:,1)=X(I,:,1); %第一代,全局最优的微粒位置for p=1:NG(p,:,1)=gbest(1,:,1); %G便于速度更新运算(函数格式统一)endGpos=gbest(1,:,1);for i=1:N;pbest(i,:,1)=X(i,:,1); %因为是第一代,当前位置即为历史最优位置endV(:,:,2)=W(1)*V(:,:,1)+c1*rand*(pbest(:,:,1)-X(:,:,1))+c2*rand*(G(:,: ,1)-X(:,:,1)); % 更新速度% 判断速度是否越界for ni=1:Nfor di=1:Dif V(ni,di,2)>vmaxV(ni,di,2)=vmax;else if V(ni,di,2)<-vmaxV(ni,di,2)=-vmax;elseV(ni,di,2)=V(ni,di,2);endendendX(:,:,2)=X(:,:,1)+V(:,:,2); %更新位置%disp('执行到这里')%2.2 第2次到最后一次迭代for j=2:itmaxh=j;disp('迭代次数,当前代全局最佳适应值,本代以前所有代中的全局最佳适应值')disp(j-1)disp(B(1,1,j-1)) %j-1代全局最优适应值disp(bestminimum(j-1)) %j-1代以前所有代中的全局最优适应值disp('******************************')fitness=fitcal(X,indim,hiddennum,outdim,D,Ptrain,Ttrain);[C,I]=min(fitness(:,1,j)); %第j代的最优适应值和最优微粒序号L(:,1,j)=fitness(:,1,j); %第j代每个微粒的适应值B(1,1,j)=C; %第j代全局最优适应值gbest(1,:,j)=X(I,:,j); %第j代全局最优微粒的位置[GC,GI]=min(B(1,1,:)); %所有代的全局最优适应值赋给GC,代数赋给GIbestminimum(j)=GC; %所有代的最优适应值赋给j代的bestminimum% 判断是否符合条件if GC<=minerrGpos=gbest(1,:,GI); %若满足均方误差条件,记录最优位置,停止迭代breakendif j>=itmaxbreak %超过最大迭代次数时,退出end%计算历史全局最优位置if B(1,1,j)<GCgbest(1,:,j)=gbest(1,:,j);elsegbest(1,:,j)=gbest(1,:,GI);endfor p=1:NG(p,:,j)=gbest(1,:,j);end%计算各微粒历史最优位置for i=1:N;[C,I]=min(L(i,1,:)); %计算每个微粒的历史最优适应值,赋给C,代数赋给Iif L(i,1,j)<=Cpbest(i,:,j)=X(i,:,j);elsepbest(i,:,j)=X(i,:,I);endendV(:,:,j+1)=W(j)*V(:,:,j)+c1*rand*(pbest(:,:,j)-X(:,:,j))+c2*rand*(G(: ,:,j)-X(:,:,j));for ni=1:Nfor di=1:Dif V(ni,di,j+1)>vmaxV(ni,di,j+1)=vmax;else if V(ni,di,j+1)<-vmaxV(ni,di,j+1)=-vmax;elseV(ni,di,j+1)=V(ni,di,j+1);endendendX(:,:,j+1)=X(:,:,j)+V(:,:,j+1);%2.3 将最优微粒(即最优权值和阈值)赋给神经网络if j=itmaxGpos=gbest(1,:,GI);enddisp('要显示Gpos的值')disp(Gpos)wi=Gpos(1:hiddennum); %输入层-隐藏层权值wl=Gpos(hiddennum+1:2*hiddennum); %隐藏层-输出层权值b1=Gpos(2*hiddennum+1:3*hiddennum); %输入层-隐藏层阈值b2=Gpos(3*hiddennum+1:3*hiddennum+outdim); %隐藏层-输出层阈值end%三、神经网络训练部分%******************************************************************** ********[w,v]=size(testIn); %w 返回行数,v返回列数for k=1:v % v是测试样本的个数for t=1:hiddennum %计算隐藏层每个神经元的输入,输出hidinput=0;hidinput=wi(t)*testIn(k)-b1(t);hidoutput(t)=tansig(hidinput);endoutinput=0; %used to calculate the value of output in outlayerfor t=1:hiddennumoutinput=outinput+wl(t)*hidoutput(t); %输出层只有一个神经元时的情况endoutVal(k)=purelin(outinput-b2); %输出层的输出值endsubplot(2,1,1) %//调用窗口句柄[AlltestIn,AlltestOut]=postmnmx(testIn,minAlltestIn,maxAlltestIn,testOut,minAlltestOut,maxAl ltestOut); %反归一化[ResVal]=postmnmx(outVal,minAlltestOut,maxAlltestOut);trainError=abs(ResVal-AlltestOut); %测试误差for k=1:vSquareE(k)=(trainError(k)*trainError(k))/2; %v个样本的误差数组endplot(AlltestIn,SquareE)ylabel('Error')subplot(2,1,2)j=1:1:h;plot(j,bestminimum(j))set(gca,'XLim',[1 100000]);set(gca,'XMinorTick','on');set(gca,'XTick',[1 10 100 1000 10000 100000]);set(gca,'YLim',[0.000001 1]);set(gca,'YMinorTick','on');set(gca,'YTick',[0.000001 0.00001 0.0001 0.001 0.01 0.1 1]);set(gca,'yscale','log','xscale','log')ylabel('training error')xlabel('Iteration Number')hold on%适应度函数部分function fitval = fitcal(X,indim,hiddennum,outdim,D,Ptrain,Ttrain) %三维矩阵:x 微粒数(X的行数);y 微粒维数(X的列数);z 代数(X的层数)[x,y,z]=size(X);[w,v]=size(Ptrain); %二维矩阵:w 训练样本维数,这里为1;v 训练样本个数for i=1:x %x代表粒子数量,z代表代数wi=X(i,1:hiddennum,z);wl=X(i,1*hiddennum+1:2*hiddennum,z);b1=X(i,2*hiddennum+1:3*hiddennum,z);b2=X(i,3*hiddennum+1:3*hiddennum+outdim,z);error=0;for k=1:v %训练样本总数for t=1:hiddennumhidinput=0;hidinput=wi(t)*Ptrain(k)-b1(t);hidoutput(t)=tansig(hidinput);endoutinput=0;for t=1:hiddennumoutinput=outinput+wl(t)*hidoutput(t);endoutval(k)=purelin(outinput-b2);errval(k)=Ttrain(k)-outval(k); %绝对误差error=error+errval(k)*errval(k); %v个样本的误差平方求和endfitval(i,1,z)=error/v; %均方和,返回值是第i个微粒第z代的误差end。

相关文档
最新文档