MATLAB基于BP神经网络PID控制程序.pdf
- 格式:pdf
- 大小:183.90 KB
- 文档页数:4
基于BP神经网络的PID控制器的研究与实现课程名称:人工神经网络目录前言 (2)一、BP神经网络 (3)二、模拟PID控制系统 (5)三、基于BP神经网络的PID控制器 (6)四、仿真程序 (10)五、运行结果 (17)六、总结 (18)参考文献 (19)前言人工神经网络是以一种简单神经元为节点,采用某种网络拓扑结构构成的活性网络,可以用来描述几乎任意的非线性系统。
不仅如此,人工神经网络还具有学习能力、记忆能力、计算能力以及各种智能处理能力,在不同程度和层次上模仿人脑神经系统的信息处理、存储和检索的功能。
不同领域的科学家,对人工神经网络有着不同的理解、不同的研究内容,并且采用不同的研究方法。
对于控制领域的研究工作者来说,人工神经网络的魅力在于:①能够充分逼近任意复杂的非线性关系,从而形成非线性动力学系统,以表示某种被控对象的模型或控制器模型;②能够学习和适应不确定性系统的动态特性;③所有定量或定性的信息都分布储存于网络内的各神经单元,从而具有很强的容错性和鲁棒性;④采用信息的分布式并行处理,可以进行快速大量运算。
对于长期困扰控制界的非线性系统和不确定性系统来说,人工神经网络无疑是一种解决问题的有效途径。
正因为如此,把人工神经网络引入传统的 PID 控制,将这两者结合,则可以在一定程度上解决传统 PID 调节器不易在线实时整定参数、难于对一些复杂过程和参数慢时变系统进行有效控制的不足。
一、BP神经网络BP神经网络是一种有隐含层的多层前馈网络,其结构如图1-1所示。
如果把具有M个输入节点和L个输出节点的BP神经网络看成是从M 维欧氏空间到L维欧氏空间的非线性映射,则对于具有一定非线性因数的工业过程被控对象,采用BP网络来描述,不失为一种好的选择。
在BP神经网络中的神经元多采用S型函数作为活化函数,利用其连续可导性,便于引入最小二乘学习算法,即在网络学习过程中,使网络的输出与期望输出的误差边向后传播边修正加权系数,以期使误差均方值最小。
基于BP神经网络的PID控制器设计PID控制器是一种常用的控制器,可以通过根据系统的误差、历史误差和误差的变化率来计算控制信号,从而实现对系统的控制。
传统的PID控制器可以通过调节PID参数来实现对系统动态特性的控制,但是参数调节过程往往需要经验和反复试验,而且很难实现对非线性系统的精确控制。
近年来,基于BP神经网络的PID控制器设计方法得到了广泛的关注。
BP神经网络是一种常用的人工神经网络模型,可以通过训练得到输入与输出之间的映射关系。
在PID控制器设计中,可以将误差、历史误差和误差的变化率作为BP神经网络的输入,将控制信号作为输出,通过训练神经网络来实现对控制信号的合理生成。
1.数据预处理:首先需要采集系统的输入输出数据,包括系统的误差、历史误差和误差的变化率以及相应的控制信号。
对这些数据进行归一化处理,以便神经网络能够更好地学习和训练。
2.网络结构设计:根据系统的特性和要求,设计BP神经网络的输入层、隐藏层和输出层的神经元数量。
通常情况下,隐藏层的神经元数量可以根据经验设置为输入层和输出层神经元数量的平均值。
3.训练网络:采用反向传播算法对神经网络进行训练,以获得输入和输出之间的映射关系。
在训练过程中,需要设置学习率和动量系数,并且根据训练误差的变化情况来确定训练的终止条件。
4.参数调整:将训练得到的神经网络与PID控制器相结合,根据神经网络的输出和系统的误差、历史误差和误差的变化率来计算控制信号,并通过对PID参数的调整来实现对系统的控制。
1.适应能力强:BP神经网络能够通过训练来学习系统的动态特性,从而实现对非线性系统的精确控制。
2.自适应性高:BP神经网络能够根据实时的系统状态来实时调整控制信号,从而实现对系统动态特性的自适应控制。
3.参数调节方便:通过BP神经网络的训练过程,可以直接得到系统的输入和输出之间的映射关系,从而减少了传统PID控制器中参数调节的工作量。
4.系统稳定性好:基于BP神经网络的PID控制器能够根据系统状态及时调整控制信号,从而提高了系统的稳定性和鲁棒性。
第十六届电工理论学术研讨会论文集基于BP神经网络的PID控制器的研究与实现张建国.(漳州职业技术学院电于工程系福建漳州363000)摘要:本文介绍基于BP神经网络的PID控制器的实现方法,可以在一定程度上解决传统PID调节器不易在线实时整定参数、难于对一些复杂过程和参数幔时变系统进行有效控制等问题。
一r一关键词:PID控制;神经网络;研究O引言PID控制要取得好的控制效果,必须寻找比例、积分和微分三种控制作用在形成控制量中相互配合又相互制约的关系,这种关系不一定是简单的“线性组合”,要在变化无穷的非线性组合中找出最佳的关系并非易事。
为此,本文试图利用神经网络所具有的:①能够充分逼近任意复杂的非线性关系,从而形成非线性动力学系统,以表示某种被控对象的模型或控制器模型;②能够学习和适应不确定性系统的动态特性;⑨所有定量或定性的信息都分布储存于网络内的各神经单元,从而具有很强的容错性和鲁棒性;④采用信息的分布式并行处理,可以进行快速大量运算等特点,把神经网络引入传统的PID控制,可以在一定程度上解决传统PID调节器不易在线实时整定参数、难于对一些复杂过程和参数慢时变系统进行有效控制等问题。
1基于BP神经网络的PID控制器BP神经网络具有逼近任意非线性函数的能力,而且结构和学习算法简单明确。
通过神经网络自身的学习,可以找到某一最优控制律下的P、I、D参数。
基于BP神经网络的PID控制系统结构如图1所示。
控制器由两个部分组成:①经典的PID控制器:直接对被控对象过程闭环控制,并且三个参数KP、KI、KD为在线整定式;②神经网络NN:根据系统的运行状态,调节PID控制器的参数,以期达到某种性能指标的最优化。
即使输出层神经元的输出状态对应于PID控制器的三个可调参数KP、KI、KD,通过神经网络的自身学习,加权系数调接,从而使其稳定状态对应于最优控制律下的PID控制器参数。
经典增量式数字PID的控制算式为u(k)=-u(k-1)+KP[e(k)-e(k-1)】+kIc(k)+kDEe(k)-2e(k-1.)+e(k.2)】(1)式中KP、KI、Kd一比例、积分、微分系数。
- 22 -高 新 技 术从本质上来看,PID 控制算法就是对比例、积分和比例微分间的关系进行控制的一种算法。
PID 控制调节器具有适应性强、鲁棒性良好的特征,因此被广泛应用于工业控制领域。
但是,随着科学技术、控制理论发展,在工业生产中被控对象逐渐向复杂化和抽象化的趋势发展,并呈现滞后性、时变性和非线性的特征,这使传统PID 控制器难以精准调控这种较复杂的控制系统。
为了解决该问题,研究人员将控制理论与其他先进的算法相结合,形成全新的控制理论,包括神经网络控制、遗传算法以及模糊控制等。
对神经网络算法来说,由于其具有较高的鲁棒性和容错性,因此适用于复杂的非线性控制系统中,并且具有广阔的应用前景和较大的发展潜力。
1 BP 神经网络结构及算法BP 神经网络将网络视为一个连续域,在这个网络中,输入层和输出层都是任意时刻、任意数目的样本值,网络输出层值与输入层值间也可以具有任意关系,这个学习过程就称为BP 神经网络学习过程。
作为一种被广泛应用的神经网络模型,BP 神经网络由输入层、输出层和隐含层组成:1) 输入层。
从第i 个输入向量中产生相应的输出值。
2) 输出层。
在输出值的作用下将其转换为输入数据。
3) 隐含层。
在输出值的作用下对数据进行隐含处理,将处理后的结果反馈给输入层,3个输入层构成1个BP 神经网络。
当输入数据在时间域内经过多次的误差传播时,最后被一个误差源作为输出信号,即经过输入单元和输出组的中间信息。
如果该误差源的误差小于输出单元和输出组中各单元间的误差,那么这些单元在计算输出时就会有很大的变化;如果超过了期望值,那么这一单元被认为是输入量存在误差(也就是输入信号存在误差),将不再使用该单元;如果仍然超过期望值,那么输出量又会存在误差[1]。
通过分析输入与输出量间的关系可以得出BP 网络中各个隐藏层上节点数与该输出量间的关系。
BP 神经网络的拓扑结构如图1所示。
为了对BP 神经网络进行运算和优化,该文设定了中间层的加权和结点临界,以便将全部采样的真实输出量与预期的输出量的偏差控制在一个很低的区间,并且通过调节这个区间来保证它的稳定性。
基于BP神经网络的模糊PID控制器的设计【摘要】工业过程控制中广泛采用PID控制,但传统PID控制因其控制参数的固定,在线整定难等问题。
为此本文研究了一种新的自适应模糊PID控制方法,为了解决模糊推理没有学习能力的问题,本文又提出了一种基于BP神经网络的自适应模糊控制方法。
此方法是模糊控制、神经网络和PID控制的有效结合。
仿真实验表明,这种基于BP神经网络的模糊PID控制算法具有良好的控制效果。
【关键词】PID控制;BP神经网络;模糊PID控制Abstruct:PID control are widely used in industrial process control,but the traditional PID control because of its control parameters are fixed,and it is difficult to adjust its parameters online.So this paper studies a new adaptive fuzzy PID control method,to solve problem without the ability to learn,and put forward a kind of adaptive fuzzy control method based on BP neural network in this paper.It is the effective combination of fuzzy control,neural network and PID control.Simulation results show that this fuzzy PID control method based on BP neural network has good control effect.Keywords:PID control;BP neural network;Fuzzy PID control1.引言常规PID在控制领域被广泛应用,利用数学算法来整定参数。
基于BP 神经网络的自校正PID 控制研究摘 要: 基于反向传播BP 算法的神经网络具有很强的学习能力,适应能力.本文详细叙述了BP 算法的原理,并将改进的BP 神经网络应用在传统的PID 控制中,克服了PID 控制在参数的调整过程中对于系统模型过分依赖的缺点.利用MATLAB 仿真的结果表明基于BP 神经网络的自校正控制能够使传统PID 控制的参数逼近最优达到很好的控制效果. 关键词: BP 算法,神经网络,PID 控制1引言随着科学技术的发展,人们需要加以控制的过程和系统越来越复杂,许多系统具有大型,复杂和强烈非线性的特点.对这些系统进行有效准确的控制就非常的困难.传统的PID 控制是通过对偏差的比例(P),积分(I),微分(D)的线性组合构成控制向量对被控对象进行控制.它算法结构简单,但是,当被控对象具有非线性,时变不确定性和难以建立精确的数学模型时,PID 控制器参数整定不良,性能欠佳,不能达到理想的控制效果.随着人们对神经网络的研究,基于BP 算法的神经网络以其自学习,自适应及逼近任意函数的能力在控制领域得到应用,将BP 神经网络和传统的PID 控制相结合构成的比例,积分,微分神经元控制器,不仅克服了PID 控制的缺陷,而且具有快速的学习能力,快速的适应性,良好的性能和鲁棒性.因此,可以通过神经网络对系统性能的学习来达到最佳的比例,积分,微分组合,实现最佳的PID 控制效果.2 神经网络的BP 算法2.1 神经网络的结构BP 神经网络是控制领域中应用最多的神经网络,它是多层神经元彼此以前馈方式连接组成的网络,网络中没有信号反馈,只有相邻层神经元,每个神经元首先完成输入信号与连接权值的内积计算,然后通过一个非线性函数作用产生输出.BP 神经网络通常由输入层,输出层和若干隐层构成每层由若干个结点组成, 每一个结点表示一个神经元,上层结点与下层结点之间通过权值联接, 同一层结点之间没有联系。
基于BP神经网络PID整定原理和算法步骤PID(比例、积分、微分)控制是一种常用的控制算法,用于调节系统的输出使其接近期望值。
BP(Back Propagation)神经网络是一种具有强大机器学习能力的神经网络模型。
基于BP神经网络的PID整定方法结合了PID控制算法和神经网络的优点,通过神经网络的学习能力优化PID 参数的选择,提高了控制系统的鲁棒性和适应性。
以下是基于BP神经网络的PID整定原理和算法步骤:一、原理:1.神经网络模型:建立一个具有输入层、隐藏层和输出层的BP神经网络模型,其中输入层接收系统的输入信号,输出层输出控制信号的PID 参数,隐藏层的神经元通过学习调整连接权重以优化参数选择。
2.参数训练:基于反向传播算法,通过输入输出样本对神经网络进行训练,使其学习输入输出之间的映射关系。
训练过程是一个迭代过程,通过不断调整连接权重和偏置,使神经网络的输出结果逼近期望值。
3.PID原理:PID控制算法根据系统当前误差,通过比例、积分和微分项生成控制信号。
调节PID参数可以改变控制信号的响应特性,使其更好地适应控制对象的动态特性。
二、算法步骤:1.数据采集:收集系统的输入输出数据,用于训练神经网络模型。
2.数据预处理:对采集到的数据进行预处理,包括去除噪声、归一化等处理,以提高神经网络的训练效果。
3.网络构建:根据需要构建BP神经网络模型,包括输入层、隐藏层和输出层。
隐藏层的神经元数量和层数可以根据实际情况进行选择。
4.神经网络训练:将预处理后的数据输入到神经网络中,利用反向传播算法对神经网络进行训练。
根据实际需求设置训练的轮数和学习率等参数。
5.训练结果评估:通过评估神经网络的训练结果,包括误差曲线、训练时间等指标,来判断训练是否达到预期效果。
6.PID参数优化:根据神经网络的输出结果调整PID的比例、积分和微分参数。
可以通过试错法或者自适应控制方法对参数进行调整。
7.控制性能评估:利用调整后的PID参数进行控制,通过评估系统的性能指标,例如超调量、调整时间等,来判断PID参数的选择是否合理。
基于BP神经网络的PID控制系统设计摘要本文主要研究一个基于神经网络的自适应PID控制系统的设计方法,利用BP神经网络对被控对象进行在线辨识和控制。
基于BP神经网络学习算法设计出两个神经网络模型:一个利用神经网络(NNM)对非线性映射的逼近能力,对被控对象进行辨识,另一个构成具有PID结构的控制器(NNC)。
通过神经网络NNM的在线学习和修正,产生对被控对象输出的预测作用,然后由网络NNC实施控制作用,从而实现对辨识对象的PID控制。
在利用神经网络对系统进行辨识时,选用白噪声信号作为系统的输入信号,以提高系统的辨识精度;另外,为了得到神经网络控制器的初始化权值,本文在自整定过程中采用常规PID控制器整定方法之一的稳定边界法。
在设计过程中运用MATLAB语言工具箱进行编程,并通过SIMULINK动态仿真工具对一阶非线性对象进行了仿真。
仿真结果表明了利用神经网络对系统进行辨识的有效性,并用经辨识所得到的输出值取代系统的实际输出值,利用神经网络NNC对系统进行控制,获得了满意的控制效果。
关键词:神经网络,BP学习算法,自适应,参数优化,辨识1 综述PID调节器从问世至今已历经了半个多世纪,在这几十年中,人们为它的发展和推广做出了巨大的努力,使之成为工业过程控制中主要的和可靠的技术工具。
近几十年来,现代控制理论迅速发展,出现了许多先进的控制算法,但到目前为止,即使在微处理技术迅速发展的今天,过程控制中大部分控制规律都未能离开PID,这充分说明PID控制仍具有很强的生命力。
过程工业控制中实际应用最多的仍是常规的PID控制算法,这是因为PID控制具有结构简单、容易实现、控制效果好和鲁棒性强等特点,且PID算法原理简明,参数物理意义明确,理论分析体系完整,为广大控制工程师所熟悉。
但在生产现场往往由于参数整定不好而使PID控制器控制效果欠佳,整定的好坏不但会影响到控制质量,而且还会影响到控制器的性能。
PID控制中一个至关重要的问题,就是控制器三参数(比例系数、积分时间、微分时间)的整定。
se s s G 5.01101)(−+=()(1)[(1)]()[()2(1)(2)]/p I D Iu k u k K e k K e k K e k e k e k T T =−+−++−−+−神经网络PID 控制器的设计及仿真一、传统PID 控制数字PID 控制算法分位置式和增量式两种,工程上常用的增量式PID 控制算法,其控制算式为:式中,pK 为比例系数,I K =p K /T T为积分系数,/D D K T T =为微分系数,T 为采样周期,IT 为积分时间,DT 为微分时间,()e k 为t kT =时刻的误差。
上述PID 控制算法易于用微机软件实现,PID 控制系统框图如图示。
现有一被控对象为:根据“稳定边界法”即临界比例度法,来整定调节器的参数,带入“稳定边界法整定参数计算表”得到,当采取P 调节时,KP=16,;当采取PI 调节时,KP=14.545,i T =1.7;当采取PID 调节时,KP=18.824,i T =1,d T =0.25。
通过Simulink 进行如下图所示的仿真:仿真结果如下图所示:二、基于BP算法的PID控制基于BP神经网络的PID控制系统结构如下图所示,控制器由两个部分组成:①经典的PID控制器:直接对被控对象进行闭环控制,并且KP,KI,KD三个参数为在线P,I,D整定;②神经网络NN:根据系统的运行状态,调节PID控制器的参数,以期达到某种性能指标的最优化。
即使神经网络的输出层神经元的输出状态对应于PID控制器的三个可调参数KP,KI,KD,通过神经网络的自学习、调整权系数,从而使其稳定P,I,D状态对应于某种最优控制规律下的PID控制器参数。
在这里设计的BP网络采用结构简单的三层BP神经网络,其结构如下图所示,有m个输入节点、Q个隐含层节点、3个输出节点。
输入节点对应所选的系统运行状态量,如系统不同时刻的输入量和输出量等,必要时要进行归一化K K K。
基于BP神经网络PID整定原理和算法步骤_精品1.基本原理PID控制器是一种经典的闭环控制算法,由比例项、积分项和微分项组成。
BP神经网络是一种具有自适应性的模型,可以根据输入和输出之间的关系来自动调整权重和偏置。
2.算法步骤2.1样本数据的采集在PID控制系统中,需要采集一些样本数据来训练神经网络。
可以通过试验或仿真的方式,对控制系统进行加扰动或变动目标值的操作,得到系统的输入与输出数据。
2.2数据的预处理对采集到的数据进行预处理,主要包括去除噪声、标准化等操作,使得数据更加准确和可靠。
2.3神经网络的构建根据PID控制器的结构,构建对应的BP神经网络模型。
一般来说,BP神经网络由输入层、隐含层和输出层组成。
输入层接收系统的输入数据,隐含层进行特征提取和非线性变换,输出层得到控制系统的输出。
2.4神经网络的训练将预处理后的样本数据输入到神经网络中进行训练。
训练过程中,通过调整网络的权重和偏置,使得网络的输出与期望的输出之间的误差最小化。
2.5PID参数的优化在神经网络训练完成后,可以得到最优的网络结构和权重。
根据神经网络的输出,可以得到相应的PID参数。
一般来说,比例项的参数可直接取输出层的权重,积分项和微分项的参数则可以根据网络的偏置来计算。
2.6控制系统的实时调整将优化得到的PID参数应用到实际的控制系统中。
在控制过程中,根据系统的实时反馈信号,可以通过PID控制器进行实时的调整,使得系统的响应特性达到最佳。
总结:基于BP神经网络的PID整定,通过训练神经网络来寻找最佳的PID 参数,以达到控制系统的最优响应特性。
该方法可以应用于各种复杂的控制系统中,具有很好的适应性和鲁棒性。
但需要注意的是,BP神经网络的训练过程需要较长的时间和大量的样本数据,因此在实际应用中需要进行一定的优化和加速。
基于BP神经网络的PID控制器的研究与实现课程名称:人工神经网络目录前言 (3)一、BP神经网络 (4)二、模拟PID控制系统 (5)三、基于BP神经网络的PID控制器 (6)四、仿真程序 (10)五、运行结果 (17)六、总结 (18)参考文献 (19)前言人工神经网络是以一种简单神经元为节点,采用某种网络拓扑结构构成的活性网络,可以用来描述几乎任意的非线性系统。
不仅如此,人工神经网络还具有学习能力、记忆能力、计算能力以及各种智能处理能力,在不同程度和层次上模仿人脑神经系统的信息处理、存储和检索的功能。
不同领域的科学家,对人工神经网络有着不同的理解、不同的研究内容,并且采用不同的研究方法。
对于控制领域的研究工作者来说,人工神经网络的魅力在于:①能够充分逼近任意复杂的非线性关系,从而形成非线性动力学系统,以表示某种被控对象的模型或控制器模型;②能够学习和适应不确定性系统的动态特性;③所有定量或定性的信息都分布储存于网络内的各神经单元,从而具有很强的容错性和鲁棒性;④采用信息的分布式并行处理,可以进行快速大量运算。
对于长期困扰控制界的非线性系统和不确定性系统来说,人工神经网络无疑是一种解决问题的有效途径。
正因为如此,把人工神经网络引入传统的PID 控制,将这两者结合,则可以在一定程度上解决传统PID 调节器不易在线实时整定参数、难于对一些复杂过程和参数慢时变系统进行有效控制的不足。
一、BP神经网络BP神经网络是一种有隐含层的多层前馈网络,其结构如图1-1所示。
如果把具有M个输入节点和L个输出节点的BP神经网络看成是从M维欧氏空间到L维欧氏空间的非线性映射,则对于具有一定非线性因数的工业过程被控对象,采用BP网络来描述,不失为一种好的选择。
在BP神经网络中的神经元多采用S型函数作为活化函数,利用其连续可导性,便于引入最小二乘学习算法,即在网络学习过程中,使网络的输出与期望输出的误差边向后传播边修正加权系数,以期使误差均方值最小。
基于BP神经网络的自整定PID控制仿真在工业控制中,PID控制是工业控制中最常用的方法。
这是因为PID控制器结构简单、实现简单,控制效果良好,已得到广泛应用。
但是,PID具有一定的局限性:被控制对象参数随时间变化时,控制器的参数难以自动调整以适应外界环境的变化。
为了使控制器具有较好的自适应性,实现控制器参数的自动调整,可以采用神经网络控制的方法。
利用人工神经网络的自学习这一特性,并结合传统的PID控制理论,构造神经网络PID控制器,实现控制器参数的自动调整。
基于BP神经网络的PID控制器结构如图1所示。
控制器由两部分组成:一是常规PID 控制器,用以直接对对象进行闭环控制,且三个参数在线整定;二是神经网络NN,根据系统的运行状态,学习调整权系数,从而调整PID参数,达到某种性能指标的最优化。
图1 基于神经网络的PID控制器结构1.设计原理神经网络采用结构为4-5-3型的BP网络,如图2。
图2 BP网络结构其中,输出层激励函数取非负的Sigmoid函数,隐层取正负对称的Sigmoid函数。
被控对象为一时变非线性对象,数学模型可表示为: 2()(1)()(1)1(1)a k y k y k u k y k -=+-+- 式中,系数a(k)是慢时变的,。
为保证控制器有一定的动态跟踪能力,选定神经网络的输入层输入为[(),(1),(2),1]T in X e k e k e k =--网络的学习过程由正向和反向传播两部分组成。
如果输出层不能得到期望输出,那么转入反向传播过程,通过修改各层神经元的权值,使得输出误差信号最小。
输出层节点分别对应三个可调参数(3)1(3)2(3)3p I D O K O K O K ⎫=⎪=⎬⎪=⎭取性能指标函数为: 21()(()())2E k r k y k =-设其中:()()()r k y k e k -=若PID 控制器采用采用增量式数字PID 控制算法,则有(3)1(3)2(3)3()()(1)()()()()2(1)(2)u k e k e k O u k e k O u k e k e k e k O ⎫∂=--⎪∂⎪⎪∂=⎬∂⎪⎪∂=--+-⎪∂⎭2.网络权系数调整网络权系数的修正采用梯度下降法。
BP神经网络逼近y=1/x,MATLAB程序%BP神经网络逼近y=1/x;%----------------定义必要的变量方便调试--------------------clear;clc;q=8; %神经元个数max_epoch=100000; %最大训练次数err_goal=0.01; %期望误差最小值alpha =0.01; %学习率X = 1:0.5:10; %样本D=1./X; %期望值[m,n] = size(X); %m为输入个数,n为样本数量l=1; %单输出wjk = rand(l,q); %隐层到输出层的初始权值vij = rand(q,m); %输入层到隐层的初始权值for epoch=1:max_epoch%-------------------------前向传播求输入--------------------NETj=vij*X; %隐层净输入Yj=1./(1+exp(-NETj)); %计算隐层输出NETk=wjk*Yj; %输出层净输入Ok=1./(1+exp(-NETk));%计算输出层输出e=((D-Ok)*(D-Ok)')/2; %计算误差函数E(epoch)=e;if(e<err_goal)char='达到输出误差要求学习结束'break;end%-------------------反向传播调权值-------------------------------%调整输出层权值deltak=Ok.*(1-Ok).*(D-Ok);wjk=wjk+alpha*deltak*Yj';%调整隐含层权值deltai=Yj.*(1-Yj).*(deltak'*wjk)';vij=vij+alpha*deltai*X';end%-----------------取样本测试---------------------------------Xx = 1:3:66;D1 = 1./Xx; %期望输出[m1,n1] = size(Xx);NETj1=vij*Xx; %隐层净输入Yj1=1./(1+exp(-NETj1)); %计算隐层输出NETk1=wjk*Yj1; %输出层净输入Ok1=1./(1+exp(-NETk1));%计算输出层输出%-----------------------显示与绘图---------------------------------epoch %显示样本集计算次数Ok %显示训练集输出层输出Ok1 %显示测试集输出层输出subplot(2,2,1);plot(X,D,'b-o'); %样本与期望值title('训练集网络样本')subplot(2,2,2);plot(X,Ok,'b-o',X,D,'r-x');%训练集网络输出与期望值title('训练集网络输出与期望值')subplot(2,2,3);plot(1:1:epoch,E,'k*'); %显示误差title('训练集输出误差')subplot(2,2,4);plot(Xx,Ok1,'b-o',Xx,D1,'r-x'); %绘制样本及网络输出title('测试集网络输出与期望值')运行结果当隐层神经元个数q=8时char =达到输出误差要求学习结束epoch =86197Ok =Columns 1 through 100.8717 0.7039 0.5349 0.4121 0.3313 0.2775 0.2398 0.2120 0.1908 0.1741Columns 11 through 190.1608 0.1499 0.1410 0.1337 0.1276 0.1225 0.1183 0.1147 0.1117Ok1 =Columns 1 through 100.8717 0.2398 0.1410 0.1117 0.1013 0.0972 0.0956 0.0950 0.0947 0.0946Columns 11 through 200.0945 0.0945 0.0945 0.0945 0.0945 0.0945 0.0945 0.0945 0.0945 0.0945Columns 21 through 220.0945 0.0945当隐层神经元个数q=2时epoch =100000Ok =Columns 1 through 100.3222 0.3112 0.3007 0.2910 0.2821 0.2741 0.2668 0.2603 0.2546 0.2495Columns 11 through 190.2451 0.2413 0.2379 0.2351 0.2326 0.2305 0.2287 0.2271 0.2258Ok1 =Columns 1 through 100.3222 0.2668 0.2379 0.2258 0.2211 0.2194 0.2187 0.2185 0.2184 0.2184Columns 11 through 200.2184 0.2184 0.2184 0.2184 0.2184 0.2184 0.2184 0.2184 0.2184 0.2184Columns 21 through 220.2184 0.2184结果分析由运行结果和图形可以看出隐层神经元个数q=8时,网络训练86197次就能使误差达到0.01q=2时,网络训练次数达到最大值100000次还没有达到误差允许的范围。
BP神经网络及其MATLAB实例问题:BP神经网络预测2020年某地区客运量和货运量公路运量主要包括公路客运量和公路货运量两方面。
某个地区的公路运量主要与该地区的人数、机动车数量和公路面积有关,已知该地区20年(1999-2018)的公路运量相关数据如下:人数/万人:20.5522.4425.3727.1329.4530.1030.9634.0636.4238.09 39.1339.9941.9344.5947.3052.8955.7356.7659.1760.63机动车数量/万辆:0.60.750.850.9 1.05 1.35 1.45 1.6 1.7 1.85 2.15 2.2 2.25 2.35 2.5 2.6 2.7 2.85 2.95 3.1公路面积/单位:万平方公里:0.090.110.110.140.200.230.230.320.320.34 0.360.360.380.490.560.590.590.670.690.79公路客运量/万人:5126621777309145104601138712353157501830419836 21024194902043322598251073344236836405484292743462公路货运量/万吨:1237137913851399166317141834432281328936 11099112031052411115133201676218673207242080321804影响公路客运量和公路货运量主要的三个因素是:该地区的人数、机动车数量和公路面积。
Matlab代码实现%人数(单位:万人)numberOfPeople=[20.5522.4425.3727.1329.4530.1030.9634.0636.42 38.0939.1339.9941.9344.5947.3052.8955.7356.7659.1760.63];%机动车数(单位:万辆)numberOfAutomobile=[0.60.750.850.91.051.351.451.61.71.852.15 2.2 2.25 2.35 2.5 2.6 2.7 2.85 2.95 3.1];%公路面积(单位:万平方公里)roadArea=[0.090.110.110.140.200.230.230.320.320.340.360.360.380.490.560.590.590.670.690.79];%公路客运量(单位:万人)passengerVolume=[5126621777309145104601138712353157501830419836 21024194902043322598251073344236836405484292743462];%公路货运量(单位:万吨)freightVolume=[123713791385139916631714183443228132893611099 112031052411115133201676218673207242080321804];%输入数据矩阵p=[numberOfPeople;numberOfAutomobile;roadArea];%目标(输出)数据矩阵t=[passengerVolume;freightVolume];%对训练集中的输入数据矩阵和目标数据矩阵进行归一化处理[pn,inputStr]=mapminmax(p);[tn,outputStr]=mapminmax(t);%建立BP神经网络net=newff(pn,tn,[372],{'purelin','logsig','purelin'});%每10轮回显示一次结果net.trainParam.show=10;%最大训练次数net.trainParam.epochs=5000;%网络的学习速率net.trainParam.lr=0.05;%训练网络所要达到的目标误差net.trainParam.goal=0.65*10^(-3);%网络误差如果连续6次迭代都没变化,则matlab会默认终止训练。
MATLAB基于BP神经网络PID控制程序
>> %BP based PID Control
clear all;
close all;
xite=0.20; %学习速率
alfa=0.01; %惯性因子
IN=4;H=5;Out=3; %NN Structure
wi=[-0.6394 -0.2696 -0.3756 -0.7023;
-0.8603 -0.XXXX -0.5024 -0.2596;
-1.0749 0.5543 -1.6820 -0.5437;
-0.3625 -0.0724 -0.6463 -0.2859;
0.1425 0.0279 -0.5406 -0.7660];
%wi=0.50*rands(H,IN); %隐含层加权系数wi初始化
wi_1=wi;wi_2=wi;wi_3=wi;
wo=[0.7576 0.2616 0.5820 -0.1416 -0.1325;
-0.1146 0.2949 0.8352 0.2205 0.4508;
0.7201 0.4566 0.7672 0.4962 0.3632];
%wo=0.50*rands(Out,H); %输出层加权系数wo初始化
wo_1=wo;wo_2=wo;wo_3=wo;
ts=20; %采样周期取值
x=[0,0,0]; %比例,积分,微分赋初值
u_1=0;u_2=0;u_3=0;u_4=0;u_5=0;
y_1=0;y_2=0;y_3=0;
Oh=zeros(H,1); %Output from NN middle layer 隐含层的输出
I=Oh; %Input to NN middle layer 隐含层输入
error_2=0;
error_1=0;
for k=1:1:500 %仿真开始,共500步
time(k)=k*ts;
rin(k)=1.0;
%Delay plant
sys=tf(1.2,[208 1],'inputdelay',80); %建立被控对象传递函数? dsys=c2d(sys,ts,'zoh'); %把传递函数离散化? [num,den]=tfdata(dsys,'v'); %离散化后提取分子、分母
yout(k)=-den(2)*y_1+num(2)*u_5;
error(k)=rin(k)-yout(k);
xi=[rin(k),yout(k),error(k),1];
%经典增量式数字PID 的控制算式为:
()(1)(()(1))()(()2(1)(2))p i d u k u k k e k e k ke k k e k e k e k =−+−−++−−+− BP 神经网络PID 的控制算式为:
()()()333123()(1)(()(1))()(()2(1)(2))u k u k o e k e k o e k o e k e k e k =−+−−++−−+− x(1)=error(k)-error_1; %比例输出
x(2)=error(k); %积分输出
x(3)=error(k)-2*error_1+error_2; %微分输出 epid=[x(1);x(2);x(3)];
I=xi*wi';% 隐含层的输入,即:输入层输入*权值 for j=1:1:H Oh(j)=(exp(I(j))-exp(-I(j)))/(exp(I(j))+exp(-I(j))); %Middle Layer 在激活函数作用下隐含层的输出
end
K=wo*Oh; %Output Layer 输出层的输入,即:隐含层的输出*权值 for l=1:1:Out
K(l)=exp(K(l))/(exp(K(l))+exp(-K(l))); %Getting kp,ki,kd 输出层的输出,即三个pid 控制器的参数
end kp(k)=K(1);ki(k)=K(2);kd(k)=K(3);
Kpid=[kp(k),ki(k),kd(k)];
du(k)=Kpid*epid;
u(k)=u_1+du(k);
if u(k)>=10 % Restricting the output of controller 控制器饱和环节 u(k)=10; end
if u(k)<=-10
u(k)=-10;
end
%以下为权值wi 、wo 的在线调整,参考刘金琨的《先进PID 控制》
dyu(k)=sign((yout(k)-y_1)/(u(k)-u_1+0.0000001));
%Output layer 输出层
for j=1:1:Out
dK(j)=2/(exp(K(j))+exp(-K(j)))^2;
end
for l=1:1:Out
delta3(l)=error(k)*dyu(k)*epid(l)*dK(l); end
for l=1:1:Out
for i=1:1:H
d_wo=xite*delta3(l)*Oh(i)+alfa*(wo_1-wo_2); end
end
wo=wo_1+d_wo+alfa*(wo_1-wo_2);
%Hidden layer
for i=1:1:H
dO(i)=4/(exp(I(i))+exp(-I(i)))^2;
end
segma=delta3*wo;
for i=1:1:H
delta2(i)=dO(i)*segma(i);
end
d_wi=xite*delta2'*xi;
wi=wi_1+d_wi+alfa*(wi_1-wi_2);
%Parameters Update 参数更新
u_5=u_4;u_4=u_3;u_3=u_2;u_2=u_1;u_1=u(k); y_2=y_1;y_1=yout(k);
wo_3=wo_2;
wo_2=wo_1;
wo_1=wo;
wi_3=wi_2;
wi_2=wi_1;
wi_1=wi;
error_2=error_1;
error_1=error(k);
end
%仿真结束,绘图
figure(1);
plot(time,rin,'r',time,yout,'b'); xlabel('time(s)');ylabel('rin,yout'); figure(2);
plot(time,error,'r');
xlabel('time(s)');ylabel('error'); figure(3);
plot(time,u,'r');
xlabel('time(s)');ylabel('u');
figure(4);
subplot(311);
plot(time,kp,'r');
xlabel('time(s)');ylabel('kp'); subplot(312);
plot(time,ki,'g');
xlabel('time(s)');ylabel('ki'); subplot(313);
plot(time,kd,'b');
xlabel('time(s)');ylabel('kd');。