IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 多种控制率算法的实现案例(LQR、H无穷和神经网络算法等)(Matlab代码实现) -> 正文阅读

[人工智能]多种控制率算法的实现案例(LQR、H无穷和神经网络算法等)(Matlab代码实现)

💥💥💥💞💞💞欢迎来到本博客??????💥💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

??座右铭:行百里者,半于九十。

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现

💥1 概述

? 环形转子由叶轮 、轴承、永磁体 、导磁环 、衔铁和永磁体保持架组成 ,环形定子由外 筒、内环和线圈组成。其 中,环形转 子的磁极(衔铁 )与环形定子的极靴相对应且 同轴?,而转子的叶轮暴露在引信体的外表面以将弹丸飞行时所产生 的气动能转换 为转 子转动 的机 械能。这样 ,弹丸飞行时所产生的气动能就驱动发电机转子的叶轮带动发电机的转子转动 ,形成变化的旋转磁场 ,从而导致发电机的电枢中产生感应 电动势 。

📚2 运行结果

2.1 利用PID来控制低压转速回路

2.2 将DRNC用于发动机转子转速的控制:

部分代码:

%将DRNC用于发动机转子转速的控制
%考虑双输入双输出
%Author:Taylon
%------------------------------------------------------------
clearvars;clc;

ALR=readfis('LR_engine2');

A=[-2.01 2.06;-0.0044 -2.92];
B=[0.84 1.2;0.53 0.28];
C=[1 0;-0.86 5.08];
D=[0 0;-0.21 0.56];
engine=ss(A,B,C,D);
Ts=0.04;
engineD=c2d(engine,Ts);
%step(engine,'-',engineD,'--')

%初始化控制对象
%ts=0.001; ? %采样步长
L=500; ? ? %仿真时长
r=zeros(L,1);
yr=zeros(L,1);
y=zeros(L,1);
u=zeros(L,1);
ec=zeros(L,1);
em=zeros(L,1);
yu=zeros(L,1);
ym=zeros(L,1);
alpha=0; ?%动量系数
etaC=0.2; ? %学习率
etaI=0.4;
%maxS=2; ? ? %灵敏度最大值

%初始化DRNC(控制器)
Nc=6;pc=3;qc=1;
wc_in1=zeros(Nc,L);wc_in1(:,1)=0.1*ones(Nc,1);
wc_in2=zeros(Nc,L);wc_in2(:,1)=0.1*ones(Nc,1);
wc_in3=zeros(Nc,L);wc_in3(:,1)=0.1*ones(Nc,1);
wc_r=zeros(Nc,L);wc_r(:,1)=0.1*ones(Nc,1);
wc_out=zeros(Nc,L);wc_out(:,1)=0.1*ones(Nc,1);
Sc=zeros(Nc,L);diffSc=zeros(Nc,L);
Hc=zeros(Nc,L);
bhc=zeros(Nc,L);
boc=0.1*ones(1,L);
%权值的分配:[p*N N N q*N],一共分为6个部分
gradWc=0.01*ones((pc+qc+2)*Nc,L);
deltaWc=0.01*ones((pc+qc+2)*Nc,L);
gradBoc=0.01*ones(1,L);
deltaBoc=0.2*ones(1,L);
etac=0.08*ones(6,L);
p1c=Nc;p2c=2*Nc;
p3c=3*Nc;p4c=4*Nc;p5c=5*Nc;
Pc=zeros(Nc,L);
Q1c=zeros(Nc,L);Q2c=zeros(Nc,L);Q3c=zeros(Nc,L);


%初始化DRNI(识别器)
Ni=4;pi=2;qi=1;
wi_in1=zeros(Ni,L);wi_in1(:,1)=0.1*ones(Ni,1);
wi_in2=zeros(Ni,L);wi_in2(:,1)=0.1*ones(Ni,1);
wi_r=zeros(Ni,L);wi_r(:,1)=0.1*ones(Ni,1);
wi_out=zeros(Ni,L);wi_out(:,1)=0.1*ones(Ni,1);
Si=0.1*ones(Ni,L);diffSi=0.1*ones(Ni,L);
Hi=zeros(Ni,L);
bi=0.1*ones(Ni,L);
%权值的分配:[p*N N N q*N],一共分为5个部分
gradWi=zeros((pi+qi+2)*Ni,L);
deltaWi=zeros((pi+qi+2)*Ni,L);
etai=zeros(5,L);
p1i=Ni;p2i=2*Ni;
p3i=3*Ni;p4i=4*Ni;
Pi=zeros(Ni,L);
Q1i=zeros(Ni,L);Q2i=zeros(Ni,L);

PITr=[ones(L/2,1);zeros(L/2,1)]; ? ? %目标转速
nL=zeros(L,1); ? ? ?%实际低压转速
PIT=zeros(L,1); ? ? ?%实际高压转速
wf=zeros(L,1); ? ? ?%燃油量

%仿真开始
for k=2:1:L
? ? %控制对象更新
? ? r(k)=PITr(k);
? ? yr(k)=PITr(k);
? ??
? ? xk=engineD.A*[nL(k-1);PIT(k-1)]+engineD.B*[wf(k);0];
? ? yk=engineD.C*[nL(k-1);PIT(k-1)]+engineD.D*[wf(k);0];
? ? nL(k)=xk(1);PIT(k)=xk(2);
? ? y(k)=PIT(k);u(k)=wf(k);
? ??
? ? %DRNC更新
? ? Hc(:,k)=wc_in1(:,k-1)*r(k)+wc_in2(:,k-1)*u(k-1)+wc_in3(:,k-1)*y(k-1)+wc_r(:,k-1).*Sc(:,k-1)+bhc(:,k-1);
? ? Sc(:,k)=Acfun(Hc(:,k));
? ? u(k)=(wc_out(:,k-1))'*Sc(:,k)+boc(k);
? ? wf(k+1)=u(k);
? ??
? ? %DRNI更新
? ? Hi(:,k)=wi_in1(:,k-1)*u(k)+wi_in2(:,k-1)*y(k-1)+wi_r(:,k-1).*Si(:,k-1)+bi(:,k-1);
? ? Si(:,k)=Acfun(Hi(:,k));
? ? ym(k)=(wi_out(:,k-1))'*Si(:,k);
? ??
? ? ec(k)=yr(k)-y(k);
? ? em(k)=y(k)-ym(k);
? ? %反馈阶段
? ? %求取灵敏度yu(k)
? ? yu(k)=wi_out(:,k-1)'*((1-Si(:,k).^2).*wi_in1(:,k-1));

? ??
? ? %计算DRNC权值梯度
? ? gradWc(p5c+1:end,k)=ec(k)*yu(k)*Sc(:,k); ? ? %输出权值梯度
? ? diffSc(:,k)=diffAcfun(Hc(:,k));
? ? gradWc(p4c+1:p5c,k)=ec(k)*yu(k)*wc_out(:,k-1).*diffSc(:,k); ? %隐含层偏置梯度
? ? Pc(:,k)=diffSc(:,k).*(Sc(:,k-1)+wc_r(:,k-1).*Pc(:,k-1));
? ? gradWc(p3c+1:p4c,k)=ec(k)*yu(k)*wc_out(:,k-1).*Pc(:,k); ? ? ? %循环权值梯度
? ? Q3c(:,k)=diffSc(:,k).*(y(k-1)+wc_r(:,k-1).*Q3c(:,k-1));
? ? gradWc(p2c+1:p3c,k)=ec(k)*yu(k)*wc_out(:,k-1).*Q3c(:,k); ? ? ? %第三个输入权值梯度
? ? Q2c(:,k)=diffSc(:,k).*(u(k-1)+wc_r(:,k-1).*Q2c(:,k-1));
? ? gradWc(p1c+1:p2c,k)=ec(k)*yu(k)*wc_out(:,k-1).*Q2c(:,k); ? ? ? %第二个输入权值梯度
? ? Q1c(:,k)=diffSc(:,k).*(r(k)+wc_r(:,k-1).*Q1c(:,k-1));?
? ? gradWc(1:p1c,k)=ec(k)*yu(k)*wc_out(:,k-1).*Q1c(:,k); ? ? ? %第一个输入权值梯度
? ? gradBoc(k)=ec(k)*yu(k);
? ? %计算DRNC自适应学习率
? ? etac(6,k)=evalfis([abs(ec(k)) max(abs(gradWc(p5c+1:end,k)))],ALR);
? ? etac(5,k)=evalfis([abs(ec(k)) max(abs(gradWc(p4c+1:p5c,k)))],ALR);
? ? etac(4,k)=evalfis([abs(ec(k)) max(abs(gradWc(p3c+1:p4c,k)))],ALR);
? ? etac(3,k)=evalfis([abs(ec(k)) max(abs(gradWc(p2c+1:p3c,k)))],ALR);
? ? etac(2,k)=evalfis([abs(ec(k)) max(abs(gradWc(p1c+1:p2c,k)))],ALR);
? ? etac(1,k)=evalfis([abs(ec(k)) max(abs(gradWc(1:p1c,k)))],ALR);
? ? %etac(:,k)=etaC*(2*ec(k))^2;

? ? %计算权值变化量
? ? deltaWc(p5c+1:end,k)=etac(6,k)*gradWc(p5c+1:end,k);
? ? deltaWc(p4c+1:p5c,k)=etac(5,k)*gradWc(p4c+1:p5c,k);
? ? deltaWc(p3c+1:p4c,k)=etac(4,k)*gradWc(p3c+1:p4c,k);
? ? deltaWc(p2c+1:p3c,k)=etac(3,k)*gradWc(p2c+1:p3c,k);
? ? deltaWc(p1c+1:p2c,k)=etac(2,k)*gradWc(p1c+1:p2c,k);
? ? deltaWc(1:p1c,k)=etac(1,k)*gradWc(1:p1c,k);
? ? deltaBoc(k)=etac(6,k)*gradBoc(k);
? ??
? ? %权值更新
? ? wc_out(:,k)=wc_out(:,k-1)+deltaWc(p5c+1:end,k);
? ? bhc(:,k)=bhc(:,k-1)+deltaWc(p4c+1:p5c,k);
? ? wc_r(:,k)=wc_r(:,k-1)+deltaWc(p3c+1:p4c,k);
? ? wc_in3(:,k)=wc_in3(:,k-1)+deltaWc(p2c+1:p3c,k);
? ? wc_in2(:,k)=wc_in2(:,k-1)+deltaWc(p1c+1:p2c,k);
? ? wc_in1(:,k)=wc_in1(:,k-1)+deltaWc(1:p1c,k);
? ? boc(k)=boc(k-1)+deltaBoc(k);
? ??
? ? %计算DRNI权值梯度
? ? gradWi(p4i+1:end,k)=em(k)*Si(:,k); ? ? %输出权值梯度
? ? diffSi(:,k)=diffAcfun(Hi(:,k));
? ? gradWi(p3i+1:p4i,k)=em(k)*wi_out(:,k-1).*diffSi(:,k); ? %隐含层偏置梯度
? ? Pi(:,k)=diffSi(:,k).*(Si(:,k-1)+wi_r(:,k-1).*Pi(:,k-1));
? ? gradWi(p2i+1:p3i,k)=em(k)*wi_out(:,k-1).*Pi(:,k); ? ? ? %循环权值梯度
? ? Q2i(:,k)=diffSi(:,k).*(y(k-1)+wi_r(:,k-1).*Q2i(:,k-1));
? ? gradWi(p1i+1:p2i,k)=em(k)*wi_out(:,k-1).*Q2i(:,k); ? ? ? %第二个输入权值梯度
? ? Q1i(:,k)=diffSi(:,k).*(u(k)+wi_r(:,k-1).*Q1i(:,k-1));?
? ? gradWi(1:p1i,k)=em(k)*wi_out(:,k-1).*Q1i(:,k); ? ? ? %第一个输入权值梯度
? ? %计算DRNI自适应学习率
% ? ? etai(5,k)=1./max(gradWi(p4i+1:end,k).^2);
% ? ? etai(4,k)=1./max(gradWi(p3i+1:p4i,k).^2);
% ? ? etai(3,k)=1./max(gradWi(p2i+1:p3i,k).^2);
% ? ? etai(2,k)=1./max(gradWi(p1i+1:p2i,k).^2);
% ? ? etai(1,k)=1./max(gradWi(1:p1i,k).^2);
? ? etai(:,k)=etaI;
? ? %计算权值变化量
? ? deltaWi(p4i+1:end,k)=etai(5,k)*gradWi(p4i+1:end,k)+alpha*deltaWi(p4i+1:end,k-1);
? ? deltaWi(p3i+1:p4i,k)=etai(4,k)*gradWi(p3i+1:p4i,k)+alpha*deltaWi(p3i+1:p4i,k-1);
? ? deltaWi(p2i+1:p3i,k)=etai(3,k)*gradWi(p2i+1:p3i,k)+alpha*deltaWi(p2i+1:p3i,k-1);
? ? deltaWi(p1i+1:p2i,k)=etai(2,k)*gradWi(p1i+1:p2i,k)+alpha*deltaWi(p1i+1:p2i,k-1);
? ? deltaWi(1:p1i,k)=etai(1,k)*gradWi(1:p1i,k)+alpha*deltaWi(1:p1i,k-1);
? ??
? ? %权值更新
? ? wi_out(:,k)=wi_out(:,k-1)+deltaWi(p4i+1:end,k);
? ? bi(:,k)=bi(:,k-1)+deltaWi(p3i+1:p4i,k);
? ? wi_r(:,k)=wi_r(:,k-1)+deltaWi(p2i+1:p3i,k);
? ? wi_in2(:,k)=wi_in2(:,k-1)+deltaWi(p1i+1:p2i,k);
? ? wi_in1(:,k)=wi_in1(:,k-1)+deltaWi(1:p1i,k);
end

%展示
kk=1:L;
P1=figure(1);
set(P1,'position',[200 400 800 600]);
plot(kk,y,'b--',kk,yr,'k-',kk,ym,'r:');
legend('实际输出','目标输出','识别输出');

🎉3 参考文献

[1]王劲松,林明耀,钱元成.微型稳速无刷直流电动机结构和控制分析[J].微特电机,2004(08):11-13.

🌈4 Matlab代码实现

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-11-05 00:28:48  更:2022-11-05 00:30:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 22:24:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码