基于PID神经网络的系统控制(附带Matlab代码)

2023-12-20 00:04

本文主要是介绍基于PID神经网络的系统控制(附带Matlab代码),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基于PID神经网络的系统控制(附带Matlab代码)

基于PID神经网络的系统控制(附带Matlab代码)

1. PID神经元网络结构

PID神经元网络从结构上可以分为输入层、隐含层和输出层三层,n 个控制量的 PID神经元网络包含 n个并列的相同子网络,各子网络间既相互独立,又通过网络连接权值相互联系每个子网络的输入层有两个神经元,分别接收控制量的目标值和当前值。每个子网络的隐含层由比例元积分元和微分元构成,分别对应着 PID 控制器中的比例控制积分控制和微分控制。PID神经元网络按被控系统控制量的个数可以分为控制单变量系统的单控制量神经元网络和控制多变量系统的多控制量神经元网络。其中单控制量神经元网络是 PID神经元网络的基本形式,多控制量神经元网络可以看成是多个单控制量神经元网络的组合形式。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

图中,X1是控制量的控制目标,X2是控制量当前值,Y是神经元网络计算得到的控制律,wij和wjk是网络权值,从中可以看到单控制量神经元网络是一个三层前向神经元网络,网络结构为2一3一1,隐含层包含比例元积分元和微分元三个神经元。多控制量神经元网络可以看成多个单控制量网络的并联连接,多控制量神经元网络拓扑结构如下图所示。

图中,X11,X21,…,Xn1是控制量的控制目标;X12,X22,…,Xn2是控制量的当前值;Y1,Y2,···,Yn是多控制量神经元网络计算得到的控制律;wij和wjk是网络权值。

2. 控制律计算

PID 神经元网络分为输入层、隐含层和输出层,网络输入量为控制量当前值和控制目标,输出量为控制律,各层输人输出计算公式如下。

(1)输入层

输人层中包含2n个神经元,输出数据xsi等于输人数据Xsi计算公式为

(2)隐含层

隐含层有 3n个神经元,包括n个比例神经元个积分神经元和个微分神经元这些神经元的输人值相同,计算公式为

(3)输出层

输出层有n个神经元构成n 维输出量输出层的输出为隐含层全部神经元的输出值加权和,计算公式如下:

图片

3. 权值修正

PID神经元网络在控制的过程中根据控制量误差按照梯度修正法修正权值,使得控制量不断接近控制目标值,权值修正的过程如下。

4.结果展示

基于PID神经网络的系统控制(附带Matlab代码)

clc
clear
close all%% 网络结构初始化
rate1=0.006;rate2=0.001; %学习率
k=0.3;K=3;
y_1=zeros(3,1);y_2=y_1;y_3=y_2;   %输出值
u_1=zeros(3,1);u_2=u_1;u_3=u_2;   %控制率
h1i=zeros(3,1);h1i_1=h1i;  %第一个控制量
h2i=zeros(3,1);h2i_1=h2i;  %第二个控制量
h3i=zeros(3,1);h3i_1=h3i;  %第三个空置量
x1i=zeros(3,1);x2i=x1i;x3i=x2i;x1i_1=x1i;x2i_1=x2i;x3i_1=x3i;   %隐含层输出 %权值初始化
k0=0.03;%第一层权值
w11=k0*rand(3,2);
w12=k0*rand(3,2);
w13=k0*rand(3,2);
%第二层权值
w21=k0*rand(1,9);
w22=k0*rand(1,9);
w23=k0*rand(1,9);%值限定
ynmax=1;ynmin=-1;  %系统输出值限定
xpmax=1;xpmin=-1;  %P节点输出限定
qimax=1;qimin=-1;  %I节点输出限定
qdmax=1;qdmin=-1;  %D节点输出限定
uhmax=1;uhmin=-1;  %输出结果限定%% 网络迭代优化
for k=1:1:200%% 控制量输出计算%--------------------------------网络前向计算--------------------------%系统输出y1(k)=(0.4*y_1(1)+u_1(1)/(1+u_1(1)^2)+0.2*u_1(1)^3+0.5*u_1(2))+0.3*y_1(2);y2(k)=(0.2*y_1(2)+u_1(2)/(1+u_1(2)^2)+0.4*u_1(2)^3+0.2*u_1(1))+0.3*y_1(3);y3(k)=(0.3*y_1(3)+u_1(3)/(1+u_1(3)^2)+0.4*u_1(3)^3+0.4*u_1(2))+0.3*y_1(1);r1(k)=0.7;r2(k)=0.4;r3(k)=0.6;  %控制目标%系统输出限制yn=[y1(k),y2(k),y3(k)];yn(find(yn>ynmax))=ynmax;yn(find(yn<ynmin))=ynmin;%输入层输出x1o=[r1(k);yn(1)];x2o=[r2(k);yn(2)];x3o=[r3(k);yn(3)];%隐含层 x1i=w11*x1o;x2i=w12*x2o;x3i=w13*x3o;%比例神经元P计算xp=[x1i(1),x2i(1),x3i(1)];xp(find(xp>xpmax))=xpmax;xp(find(xp<xpmin))=xpmin;qp=xp;h1i(1)=qp(1);h2i(1)=qp(2);h3i(1)=qp(3);%积分神经元I计算xi=[x1i(2),x2i(2),x3i(2)];qi=[0,0,0];qi_1=[h1i(2),h2i(2),h3i(2)];qi=qi_1+xi;qi(find(qi>qimax))=qimax;qi(find(qi<qimin))=qimin;h1i(2)=qi(1);h2i(2)=qi(2);h3i(2)=qi(3);%微分神经元D计算xd=[x1i(3),x2i(3),x3i(3)];qd=[0 0 0];xd_1=[x1i_1(3),x2i_1(3),x3i_1(3)];qd=xd-xd_1;qd(find(qd>qdmax))=qdmax;qd(find(qd<qdmin))=qdmin;h1i(3)=qd(1);h2i(3)=qd(2);h3i(3)=qd(3);%输出层计算wo=[w21;w22;w23];qo=[h1i',h2i',h3i'];qo=qo';uh=wo*qo;uh(find(uh>uhmax))=uhmax;uh(find(uh<uhmin))=uhmin;u1(k)=uh(1);u2(k)=uh(2);u3(k)=uh(3);  %控制律

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

这篇关于基于PID神经网络的系统控制(附带Matlab代码)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/514185

相关文章

python实现pdf转word和excel的示例代码

《python实现pdf转word和excel的示例代码》本文主要介绍了python实现pdf转word和excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、引言二、python编程1,PDF转Word2,PDF转Excel三、前端页面效果展示总结一

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

python多进程实现数据共享的示例代码

《python多进程实现数据共享的示例代码》本文介绍了Python中多进程实现数据共享的方法,包括使用multiprocessing模块和manager模块这两种方法,具有一定的参考价值,感兴趣的可以... 目录背景进程、进程创建进程间通信 进程间共享数据共享list实践背景 安卓ui自动化框架,使用的是

SpringBoot生成和操作PDF的代码详解

《SpringBoot生成和操作PDF的代码详解》本文主要介绍了在SpringBoot项目下,通过代码和操作步骤,详细的介绍了如何操作PDF,希望可以帮助到准备通过JAVA操作PDF的你,项目框架用的... 目录本文简介PDF文件简介代码实现PDF操作基于PDF模板生成,并下载完全基于代码生成,并保存合并P

SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码

《SpringBoot基于MyBatis-Plus实现LambdaQuery查询的示例代码》MyBatis-Plus是MyBatis的增强工具,简化了数据库操作,并提高了开发效率,它提供了多种查询方... 目录引言基础环境配置依赖配置(Maven)application.yml 配置表结构设计demo_st

SpringCloud集成AlloyDB的示例代码

《SpringCloud集成AlloyDB的示例代码》AlloyDB是GoogleCloud提供的一种高度可扩展、强性能的关系型数据库服务,它兼容PostgreSQL,并提供了更快的查询性能... 目录1.AlloyDBjavascript是什么?AlloyDB 的工作原理2.搭建测试环境3.代码工程1.

Java调用Python代码的几种方法小结

《Java调用Python代码的几种方法小结》Python语言有丰富的系统管理、数据处理、统计类软件包,因此从java应用中调用Python代码的需求很常见、实用,本文介绍几种方法从java调用Pyt... 目录引言Java core使用ProcessBuilder使用Java脚本引擎总结引言python

Java中ArrayList的8种浅拷贝方式示例代码

《Java中ArrayList的8种浅拷贝方式示例代码》:本文主要介绍Java中ArrayList的8种浅拷贝方式的相关资料,讲解了Java中ArrayList的浅拷贝概念,并详细分享了八种实现浅... 目录引言什么是浅拷贝?ArrayList 浅拷贝的重要性方法一:使用构造函数方法二:使用 addAll(

JAVA利用顺序表实现“杨辉三角”的思路及代码示例

《JAVA利用顺序表实现“杨辉三角”的思路及代码示例》杨辉三角形是中国古代数学的杰出研究成果之一,是我国北宋数学家贾宪于1050年首先发现并使用的,:本文主要介绍JAVA利用顺序表实现杨辉三角的思... 目录一:“杨辉三角”题目链接二:题解代码:三:题解思路:总结一:“杨辉三角”题目链接题目链接:点击这里