自适应PID算法学习(01)——单神经元PID控制

这篇具有很好参考价值的文章主要介绍了自适应PID算法学习(01)——单神经元PID控制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

神经元PID

单神经元结构

自适应pid控制器,控制算法,算法,学习,机器学习

  单神经元含有n个输入,仅1个输出,每个输入端可记作 x i ( i = 1 , 2 , . . . n ) x_i (i=1,2,...n) xi(i=1,2,...n),若该神经元为多元组成网络中某一层(输入层/输出层/隐含层)其中的一个单元,记该神经元输出为 o j ( j = 1 , 2 , . . . ) o_j(j=1,2,...) oj(j=1,2,...);不同输入端进入该单元的连接权值不同,记作 ω i j \omega_{ij} ωij,表示连接第 j j j个神经元的第 i i i个输入端的连接权值。
  另外,神经元在接收多个输入时,应有累加-整合的过程,即先有: n e t j = ∑ i = 1 n ω i j ⋅ x i j net_j=\sum_{i=1}^n\omega_{ij}\cdot x_{ij} netj=i=1nωijxij,再经历: o j = f ( n e t j ) o_j=f(net_j) oj=f(netj)才得到输出。累加运算也可表述为矩阵运算形式如:n维权向量 ω j \omega_j ωj的转置(列向量)与n维输入向量 x j x_j xj(行向量)相乘,得到标量 n e t j net_j netj,即有:
n e t j = ω j T ⋅ x j (1) net_j=\omega_j^T\cdot x_j\tag{1} netj=ωjTxj(1)
  整合 n e t j net_j netj f f f即称为激活函数,可选用各种有阈值限制的非线性函数,如常用的有:切换函数 f ( n e t ) = s g n ( n e t ) f(net)=sgn(net) f(net)=sgn(net)、反正切函数 f ( n e t ) = a t a n ( n e t ) f(net)=atan(net) f(net)=atan(net),等等。

学习规则

  神经元/神经网络的学习规则,即修正(更新)连接权值所选用的算法,可分类为有监督学习或无监督学习。

无监督Hebb学习

  连接权值的修正与输入 x i x_i xi和输出 o j o_j oj的乘积成正比,即有:
Δ ω i j ( k ) = η ⋅ ( x i ( k ) ⋅ o j ( k ) ) (2) \Delta\omega_{ij}^{(k)}=\eta\cdot (x_i^{(k)}\cdot o_j^{(k)}) \tag{2} Δωij(k)=η(xi(k)oj(k))(2)

有监督Delta学习

  在无监督Hebb的基础上,引入教师信号,将输出 o j o_j oj替换为实际输出 o j o_j oj相对期望输出 d j d_j dj的误差,即有:
Δ ω i j ( k ) = η ⋅ [ x i ( k ) ⋅ ( d j ( k ) − o j ( k ) ) ] (3) \Delta\omega_{ij}^{(k)}=\eta\cdot [x_i^{(k)}\cdot (d_j^{(k)}-o_j^{(k)})] \tag{3} Δωij(k)=η[xi(k)(dj(k)oj(k))](3)

有监督Hebb学习

  结合无监督Hebb和有监督Delta,即连接权更新正比于输入、输出、输出误差的乘积,即有:
Δ ω i j ( k ) = η ⋅ [ ( d j ( k ) − o j ( k ) ) ⋅ x i ( k ) ⋅ o j ( k ) ] (4) \Delta\omega_{ij}^{(k)}=\eta\cdot[(d_j^{(k)}-o_j^{(k)})\cdot x_i^{(k)} \cdot o_j^{(k)}] \tag{4} Δωij(k)=η[(dj(k)oj(k))xi(k)oj(k)](4)
上述各式中:
  上角标 ( k ) (k) (k)表示当前的迭代轮次; Δ ω i j \Delta\omega_{ij} Δωij为计算得的连接权值的修正量,即有:
ω i j ( k + 1 ) = ω i j ( k ) + Δ ω i j ( k + 1 ) (5) \omega_{ij}^{(k+1)}=\omega_{ij}^{(k)}+\Delta\omega_{ij}^{(k+1)}\tag{5} ωij(k+1)=ωij(k)+Δωij(k+1)(5)

神经元PID控制过程

输入更新

  对于单神经元PID控制而言,我们的目的是要自适应地更新三个控制器参数Kp,Ki,Kd,输入维数n=3;而PID控制器的输入量与传统PID一样,为当前被控对象的实际输出 y ( k ) y^{(k)} y(k)相对目标输出 y d ( k ) y_d^{(k)} yd(k)的误差,即有:
e ( k ) = y d ( k ) − y ( k ) (6) e^{(k)}=y_d^{(k)}-y^{(k)}\tag{6} e(k)=yd(k)y(k)(6)
  若PID控制器模式选用增量式PID,即$\Delta u^{(k)}=K_p \cdot (e{(k)}-e{(k-1)})+K_i \cdot 对于神经元输入 对于神经元输入 对于神经元输入x_{ij}$,应有:
x 1 j ( k ) = e ( k ) − e ( k − 1 ) x 2 j ( k ) = e ( k ) x 3 j ( k ) = e ( k ) − 2 e ( k − 1 ) + e ( k − 2 ) (7) \begin{aligned} &x_{1j}^{(k)}=e^{(k)}-e^{(k-1)}\tag{7} \\ &x_{2j}^{(k)}=e^{(k)} \\ &x_{3j}^{(k)}=e^{(k)}-2e^{(k-1)}+e^{(k-2)} \end{aligned} x1j(k)=e(k)e(k1)x2j(k)=e(k)x3j(k)=e(k)2e(k1)+e(k2)(7)

连接权值更新、归一化

  在已有更新的输入值 x i j ( k ) x_{ij}^{(k)} xij(k)和已有的输出值 o j ( k − 1 ) o_j^{(k-1)} oj(k1)后,即可更新本轮次神经元运算需用到的连接权值 ω i j ( k \omega_{ij}^{(k} ωij(k;设选用了有监督的Hebb学习规则,即同时调用了本轮更新的输出误差 e ( k ) e^{(k)} e(k),则有:
ω 1 j ( k ) = ω 1 j ( k − 1 ) + η p ⋅ [ e ( k ) ⋅ x 1 ( k ) ⋅ o j ( k − 1 ) ] ω 2 j ( k ) = ω 2 j ( k − 1 ) + η i ⋅ [ e ( k ) ⋅ x 2 ( k ) ⋅ o j ( k − 1 ) ] ω 3 j ( k ) = ω 3 j ( k − 1 ) + η d ⋅ [ e ( k ) ⋅ x 3 ( k ) ⋅ o j ( k − 1 ) ] (11) \begin{aligned} &\omega_{1j}^{(k)}=\omega_{1j}^{(k-1)}+\eta_p\cdot[e^{(k)}\cdot x_1^{(k)} \cdot o_j^{(k-1)}]\tag{11} \\ &\omega_{2j}^{(k)}=\omega_{2j}^{(k-1)}+\eta_i\cdot[e^{(k)}\cdot x_2^{(k)} \cdot o_j^{(k-1)}] \\ &\omega_{3j}^{(k)}=\omega_{3j}^{(k-1)}+\eta_d\cdot[e^{(k)}\cdot x_3^{(k)} \cdot o_j^{(k-1)}] \end{aligned} ω1j(k)=ω1j(k1)+ηp[e(k)x1(k)oj(k1)]ω2j(k)=ω2j(k1)+ηi[e(k)x2(k)oj(k1)]ω3j(k)=ω3j(k1)+ηd[e(k)x3(k)oj(k1)](11)
式中, η p \eta_p ηp η i \eta_i ηi η d \eta_d ηd分别为神经元PID的比例项、积分项、微分项的学习速率。
  在得到上述更新的连接权值 ω i j ( k ) \omega_{ij}^{(k)} ωij(k)后,还需要做类似于单位化的归一化操作,即有:
ω i j ( k ) = ω i j ( k ) / ∑ i = 1 n ∣ ω i j ( k ) ∣ , i = 1 , 2 , 3 (10) \omega_{ij}^{(k)}=\omega_{ij}^{(k)}/ \sum_{i=1}^n \lvert\omega_{ij}^{(k)} \rvert ,i=1,2,3\tag{10} ωij(k)=ωij(k)/i=1nωij(k),i=1,2,3(10)
  不难理解可知,一直在更新并用于与式(7)所示的 x 1 j x_{1j} x1j x 2 j x_{2j} x2j x 3 j x_{3j} x3j相乘再累加的连接权值 ω 1 j \omega_{1j} ω1j ω 2 j \omega_{2j} ω2j ω 3 j \omega_{3j} ω3j,乘上神经元比例系数 ϵ \epsilon ϵ,即是我们神经元PID的自适应参数 K p K_p Kp K i K_i Ki K d K_d Kd

输出更新

  单神经元的输出如同普通PID一样,为输入到被控对象的供给量 u u u(控制器输出,即控制律),即经过神经元,输出得到控制律 u ( k ) u^{(k)} u(k)变化量。另外,当前轮次k用到的是当前轮次k的输入、连接权,即有:
n e t j ( k ) = ∑ i = 1 n ω i j ( k ) ⋅ x i j ( k ) (8) net_j^{(k)}=\sum_{i=1}^n\omega_{ij}^{(k)}\cdot x_{ij}^{(k)}\tag{8} netj(k)=i=1nωij(k)xij(k)(8)
  整合函数无非线性要求,直接成比例输出,则控制律更新有:
u ( k ) = u ( k − 1 ) + ϵ ⋅ n e t j ( k ) (9) u^{(k)}=u^{(k-1)}+\epsilon\cdot net_j^{(k)}\tag{9} u(k)=u(k1)+ϵnetj(k)(9)
式中, ϵ \epsilon ϵ为神经元的比例系数。当然,神经元输出符号代换有:
o j ( k ) = u ( k ) (10) o_j^{(k)}=u^{(k)}\tag{10} oj(k)=u(k)(10)
  上述各part表达为控制流图,即如下所示:
![]

代码实现和展示

主程序

  编写成Matlab代码,程序框架(主程序)如下所示:

close all;clear
% 迭代次数:
Num=2000;
% 迭代周期:
T=0.001;     % T=0.01s

% 连接权值初始化:
omega=[0.1,0.1,0.1];
% 输入变量初始化:
x=[0,0,0]';
% 输出变量初始化:
u(1)=0;     % u(k)
u_1=0;      % u(k-1)
u_2=0;      % u(k-2)
u_3=0;      % u(k-3)
net=0;      % net=omega'*x; u(k)=u(k-1)+eps*net
y(1)=0;     % 被控对象实际输出
y_1=0;      % y(k-1)
y_2=0;      % y(k-2)
% 误差变量初始化:
err_0(1)=0; % e(k)
err_1=0;    % e(k-1)
err_2=0;    % e(k-2)
% 控制律输出限幅:
u_max=1.2;
u_min=-1.2;
% 神经元参数设置:
eps=0.12;   % 神经元比例系数
eta_p=0.4; % 比例项学习速率
eta_i=0.35;  % 积分项学习速率
eta_d=0.4;  % 微分项学习速率
w1(1)=0;
w2(1)=0;
w3(1)=0;

%%% 进入控制-训练轮次:
for k=1:Num
   % 目标输出:
   yd(k)=Target_Oput(k,T);
   % 输入到被控对象,实际输出:
   y(k)=Controlled_Obj(y_2,y_1,u_2,u_1);
   % 计算输出误差:
   err_0(k)=yd(k)-y(k);

   % (神经元)输入更新:
   x(1)=err_0(k)-err_1;
   x(2)=err_0(k);
   x(3)=err_0(k)-2*err_1+err_2;
   
   % (神经元)连接权值更新
   omega=Hebb_Learning(omega,eta_p,eta_i,eta_d,...
       err_0(k),x,u_1);
   omega=Omega_Norm(omega);
   
   % (神经元)输出更新:
   u(k)=u_1+eps*omega*x;       % 输出控制律
   if(u(k)>u_max) u(k)=u_max;
   elseif(u(k)<u_min) u(k)=u_min;end
   
   % 误差序列更新:
   err_2=err_1;
   err_1=err_0(k);
   % 控制序列更新:
   u_3=u_2;
   u_2=u_1;
   u_1=u(k);
   % 输出序列更新:
   y_2=y_1;
   y_1=y(k);
   
   % 用于显示Kp,Ki,Kd:
   w1(k)=eps*omega(1);
   w2(k)=eps*omega(2);
   w3(k)=eps*omega(3);
end  

%%% 画图展示:
time=T:T:Num*T;
figure  % 输出响应
plot(time,yd,'r');hold on;
plot(time,y,'b');title("输出响应");
ylabel('yt');xlabel('time');legend('目标输出-yd','实际输出-y');
figure  % 误差响应+控制律变化
subplot(2,1,1);plot(time,err_0,'-r');title("误差响应");
ylabel('error');xlabel('time');
subplot(2,1,2);plot(time,u,'-g');title("控制律变化");
ylabel('ut');xlabel('time');
figure  % PID参数变化
subplot(3,1,1);plot(time,w1,'r');ylabel('Kp');title("PID参数");
subplot(3,1,2);plot(time,w2,'b');ylabel('Ki');
subplot(3,1,3);plot(time,w3,'k');ylabel('Kd');xlabel('time');

子函数——连接权值更新(使用有监督Hebb学习规则)

  在每轮神经元运算之前,更新连接权值 ω i j \omega_{ij} ωij,这里示例用的是有监督Hebb学习规则,对应公式(11),如下所示:

function [omega_new]=Hebb_Learning(omega,eta_p,eta_i,eta_d,...
    err,x,u)
    w1=omega(1);
    w2=omega(2);
    w3=omega(3);
    x1=x(1);
    x2=x(2);
    x3=x(3);
    if err>1;err=-err;end    % 随便加的,合法有效但有病
    w1=w1+eta_p*(err*x1*u);
    w2=w2+eta_i*(err*x2*u);
    w3=w3+eta_d*(err*x3*u);
    omega_new=[w1,w2,w3];
end
子函数——连接权值归一化

  对应公式(10),完成连接权值 ω i j \omega_{ij} ωij更新后的归一化(单位化)步骤,如下所示:

function [omega_new]=Omega_Norm(omega)
    w1=omega(1);
    w2=omega(2);
    w3=omega(3);
    wsum=abs(w1)+abs(w2)+abs(w3);
    w1=w1/wsum;
    w2=w2/wsum;
    w3=w3/wsum;
    omega_new=[w1,w2,w3];
end
子函数——目标输出设置

  设计跟踪目标输出为上下幅值为±1的正负阶跃信号(方波信号),如下示例有:

function [yd_k]=Target_Oput(k,T)
    yd_k=sign(sin(2*pi*k*T));
    % yd_k=sin(2*pi*k*T);
end

  注释中的是将目标输出切换为正弦函数 y d = s i n ( 2 π t ) y_d =sin(2\pi t) yd=sin(2πt),你也可以试着复现下看看效果~

子函数——控制对象设置

  相当于我们在控制系统中所见到的传递函数G(s)的部分,只不过这里的对象是离散系统,并且将该数学描述换用了状态空间表达式的形式,具体怎么推导的可以看看我这段子程序开头的注释,如下有:

% 被控对象的状态空间表达式:
% dx=A*x+B*u;
% 令x1=y(k-2),x2=y(k-1),则:dx1=y(k-1)=x2,dx2=y(k);
% y(k-1)=[0 1]*[y(k-2) y(k-1)]'+0*u,不用写;
% y(k)=[a21 a22]*[y(k-2) y(k-1)]'+[b21 b22]*[u2 u1]';
% u1=u(k-1),u2=u(k-2);
function [y_k]=Controlled_Obj(y_2,y_1,u_2,u_1)
    y_k=0.26*y_2+0.368*y_1+0.632*u_2+0.1*u_1;
end
运行结果展示
运行结果展示

  运行主程序代码(程序要“添加到路径”),输出该单神经元PID控制仿真结果(使用的是有监督Hebb学习规则),跟踪三个上下摆动周期,如下所示:
  目标输出–实际输出跟踪曲线:
自适应pid控制器,控制算法,算法,学习,机器学习
  输出误差曲线+控制律输入曲线
自适应pid控制器,控制算法,算法,学习,机器学习
  P-I-D系数迭代变化曲线
自适应pid控制器,控制算法,算法,学习,机器学习
  文章来源地址https://www.toymoban.com/news/detail-597835.html

未完待续 ~ ~

到了这里,关于自适应PID算法学习(01)——单神经元PID控制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • nn.Dropout随机丢神经元的用法

    前言: pytorch与tensorflow中均有nn.dropout,两者之间的使用方法,下面将介绍。 说明文档: 大致的翻译: 在训练期间, 随机地将输入的一些元素归零 ,以概率为`p`,使用伯努利分布的样本。每个通道将在每次前向调用时被独立清零。 这已被证明是一种有效的正则化技术,可以

    2024年01月18日
    浏览(26)
  • ps2021神经ai滤镜无法使用,ps2021没法用神经元滤镜

    网上买正版,更新下就好了,盗版的都会有各种这样的问题。ps2021神经AI滤镜是需简要上传云端,由Adobe官方服务器人工智能运算的。 Ps2021版本新增了Ai神经元滤镜,它不是与软件一起安装的,只能在线调用,破解版的ps刚发布不久是可以使用的,后来就不能使用了,目前为止

    2024年02月10日
    浏览(29)
  • 人工智能与神经元的内容梳理(持续更新)

    在过去的几年中,深度学习模型已应用于不同领域的各种任务/应用。随着深度学习在不同领域的成熟和数量的增加,我决定整理相关资料来进行学习。 神经元(选读)阅读 函数极限与连续性 导数与微分 不定积分 定积分 常微分方程与数学模型 函数可积性与广义积分 无穷级

    2024年02月06日
    浏览(34)
  • 【人工智能】神经元数学模型的基本方程式及其意义详细说明

    神经元数学模型的基本方程式及其意义 在神经科学中,数学模型被广泛应用于理解神经元及其网络的激活、沟通和计算作用。本文将详细讨论一些典型神经元数学模型的基本方程式及其意义,以表达对神经网络实现认知和行为功能的认识。 一、Hodgkin-Huxley 模型

    2024年02月07日
    浏览(45)
  • 人体大脑神经元运行模拟器!让你直观体验大脑的运行方式

    最近沾花在网上看到一个 神奇 的网站:A Neural Network Playground 经过沾花的亲手测试,发现这玩意儿能模拟人体大脑神经元的运行! 下面是网址: A Neural Network Playground OK,下面来教大家怎么用: 使用时,选择数据集中的一种数据,相应地调整神经元的类型和网络形态(至于怎

    2024年02月14日
    浏览(37)
  • 神经网络自适应PID控制及其应用

    总结来自重庆大学宋永瑞教授2022暑期校园行学术会议   目前人工智能的发展为很多领域里的研究提供了可延展性,提供了新的研究问题的思路,无人系统和人工智能正走向深度融合,无人系统里具有核心驱动作用的智能控制算法的研究成为了热点问题。 人工智能的理论深

    2024年01月21日
    浏览(36)
  • 增强型PID-自适应-前馈-神经网络控制研究(Matlab代码实现)

    💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 2.1 RBFNN_Optimized_hideen_node_20 ​2.2 RBFNN_Lat

    2024年02月01日
    浏览(44)
  • 浅谈BP神经网络PID控制算法及matlab仿真

    本文是对BP神经网络PID控制算法的数学描述及仿真实验,若有错误之处,欢迎指正! 老规矩不废话,直接上链接 BP神经网络维基百科 BP神经网络是人工神经网络中的一种常用结构,其由输入层(input)-隐含层(hidding)-输出层三层构成(output)。 上图中, B 1 B1 B 1 是输入层, B 2 B2 B

    2024年02月05日
    浏览(33)
  • 基于BP神经网络的PID智能控制

    PID控制要获得较好的控制效果,就必须通过调整好比例、积分和微分三种控制作用,形成控制量中既相互配合又相互制约的关系,这种关系不一定是简单的“线性组合”,从变化无穷的非线性组合中可以找出最佳的。神经网络所具有的任意非线性表达的能力,可以通过对系统

    2024年02月02日
    浏览(44)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包