当前位置: 首页 > news >正文

【MATLAB数据处理实用案例详解(22)】——基于BP神经网络的PID参数整定

目录

    • 一、问题描述
    • 二、算法仿真
      • 2.1 BP_PID参数整定初始化
      • 2.2 优化PID
      • 2.3 绘制图像
    • 三、运行结果
    • 四、完整程序

一、问题描述

基于BP神经网络的PID控制的系统结构如下图所示:
在这里插入图片描述
考虑仿真对象,输入为r(k)=1.0,输入层为4,隐藏层为5,输出层为3,仿真输出满足 a ( k ) = 1.2 ( 1 − 0.8 e x p ( − 0.1 k ) ) , y ( k ) = a ( k ) y − 1 1 + ( y − 1 ) 2 + u − 1 a(k)=1.2(1-0.8exp(-0.1k)),y(k)=a(k) \frac{y-1}{1+(y-1)^2}+u-1 a(k)=1.2(10.8exp(0.1k)),y(k)=a(k)1+(y1)2y1+u1,进行仿真分析。

二、算法仿真

算法流程图如下:
在这里插入图片描述

2.1 BP_PID参数整定初始化

代码如下:

clc,clear,close all
warning off
xite=0.25;  % 学习因子
alfa=0.05;  % 惯量因子
S=1; %Signal type
%NN Structure
IN=4;   % 输入层个数
H=5;    % 隐藏层个数
Out=3;  % 输出层个数
if S==1  %Step Signal
wi=[-0.6394   -0.2696   -0.3756   -0.7023;-0.8603   -0.2013   -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_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_1=wo;wo_2=wo;wo_3=wo;
endif S==2  %Sine Signal
wi=[-0.2846    0.2193   -0.5097   -1.0668;-0.7484   -0.1210   -0.4708    0.0988;-0.7176    0.8297   -1.6000    0.2049;-0.0858    0.1925   -0.6346    0.0347;0.4358    0.2369   -0.4564   -0.1324];
%wi=0.50*rands(H,IN);
wi_1=wi;wi_2=wi;wi_3=wi;
wo=[1.0438    0.5478    0.8682    0.1446    0.1537;0.1716    0.5811    1.1214    0.5067    0.7370;1.0063    0.7428    1.0534    0.7824    0.6494];
%wo=0.50*rands(Out,H);
wo_1=wo;wo_2=wo;wo_3=wo;
endx=[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);    %从隐藏层到输出层
I=Oh;             %从输入层到隐藏层
error_2=0;
error_1=0;ts=0.001;

2.2 优化PID

2.3 绘制图像

三、运行结果

PID三个参数变化值如下:
在这里插入图片描述

四、完整程序

完整程序如下:

%BP based PID Control
clc,clear,close all
warning off
xite=0.25;  % 学习因子
alfa=0.05;  % 惯量因子
S=1; %Signal type
%NN Structure
IN=4;   % 输入层个数
H=5;    % 隐藏层个数
Out=3;  % 输出层个数
if S==1  %Step Signal
wi=[-0.6394   -0.2696   -0.3756   -0.7023;-0.8603   -0.2013   -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_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_1=wo;wo_2=wo;wo_3=wo;
endif S==2  %Sine Signal
wi=[-0.2846    0.2193   -0.5097   -1.0668;-0.7484   -0.1210   -0.4708    0.0988;-0.7176    0.8297   -1.6000    0.2049;-0.0858    0.1925   -0.6346    0.0347;0.4358    0.2369   -0.4564   -0.1324];
%wi=0.50*rands(H,IN);
wi_1=wi;wi_2=wi;wi_3=wi;
wo=[1.0438    0.5478    0.8682    0.1446    0.1537;0.1716    0.5811    1.1214    0.5067    0.7370;1.0063    0.7428    1.0534    0.7824    0.6494];
%wo=0.50*rands(Out,H);
wo_1=wo;wo_2=wo;wo_3=wo;
endx=[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);    %从隐藏层到输出层
I=Oh;             %从输入层到隐藏层
error_2=0;
error_1=0;ts=0.001;
for k=1:1:500
time(k)=k*ts;
if S==1rin(k)=1.0;
elseif S==2rin(k)=sin(1*2*pi*k*ts);
end
%非线性模型
a(k)=1.2*(1-0.8*exp(-0.1*k));
yout(k)=a(k)*y_1/(1+y_1^2)+u_1;  % 输出error(k)=rin(k)-yout(k);  % 误差
xi=[rin(k),yout(k),error(k),1];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:HOh(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:OutK(l)=exp(K(l))/(exp(K(l))+exp(-K(l)));        %Getting kp,ki,kd
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)>=10u(k)=10;
end
if u(k)<=-10u(k)=-10;
enddyu(k)=sign((yout(k)-y_1)/(u(k)-u_1+0.0000001));%Output layer
for j=1:1:OutdK(j)=2/(exp(K(j))+exp(-K(j)))^2;
end
for l=1:1:Outdelta3(l)=error(k)*dyu(k)*epid(l)*dK(l);
endfor l=1:1:Outfor i=1:1:Hd_wo=xite*delta3(l)*Oh(i)+alfa*(wo_1-wo_2);end
endwo=wo_1+d_wo+alfa*(wo_1-wo_2);
%Hidden layer
for i=1:1:HdO(i)=4/(exp(I(i))+exp(-I(i)))^2;
endsegma=delta3*wo;
for i=1:1:Hdelta2(i)=dO(i)*segma(i);
endd_wi=xite*delta2'*xi;
wi=wi_1+d_wi+alfa*(wi_1-wi_2);
% 参数更新
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','linewidth',2);
xlabel('time(s)');ylabel('rin,yout');   % 输入和输出
figure(2);
plot(time,error,'r','linewidth',2);
xlabel('time(s)');ylabel('error');      % 误差
figure(3);
plot(time,u,'r','linewidth',2);
xlabel('time(s)');ylabel('u');          % 控制输出
figure(4); 
subplot(311);                           % PID参数
plot(time,kp,'r','linewidth',2);
xlabel('time(s)');ylabel('kp');
subplot(312);
plot(time,ki,'g','linewidth',2);
xlabel('time(s)');ylabel('ki');
subplot(313);
plot(time,kd,'b','linewidth',2);
xlabel('time(s)');ylabel('kd');

ok,以上便是本文的全部内容了,如果对你有所帮助,记得点个赞哟~

相关文章:

【MATLAB数据处理实用案例详解(22)】——基于BP神经网络的PID参数整定

目录 一、问题描述二、算法仿真2.1 BP_PID参数整定初始化2.2 优化PID2.3 绘制图像 三、运行结果四、完整程序 一、问题描述 基于BP神经网络的PID控制的系统结构如下图所示&#xff1a; 考虑仿真对象&#xff0c;输入为r(k)1.0&#xff0c;输入层为4&#xff0c;隐藏层为5&…...

第11章 项目人力资源管理

文章目录 项目人力资源管理 过程11.2.1 编制项目人力资源计划的工具与技术&#xff08;1&#xff09;层次结构图&#xff08;工作、组织、资源 分解结构&#xff09;&#xff08;2&#xff09;矩阵图&#xff08;责任分配矩阵&#xff0c;RAM&#xff09;&#xff08;3&#xf…...

07-Vue技术栈之(组件之间的通信方式)

目录 1、组件的自定义事件1.1 绑定自定义事件&#xff1a;1.1.1 第一种方式1.1.2 第二种方式1.1.3 自定义事件只触发一次 1.2 解绑自定义事件1.3绑定原生DOM事件1.4 总结 2、全局事件总线&#xff08;GlobalEventBus&#xff09;2.1 应用全局事件总线 3、 消息订阅与发布&#…...

度量学习Metirc Learning和基于负例的对比学习Contrastive Learning的异同点思考

参考&#xff1a;对比学习&#xff08;Contrastive Learning&#xff09;:研究进展精要 - 知乎 参考&#xff1a;对比学习论文综述【论文精读】_哔哩哔哩_bilibili 参考&#xff1a;度量学习DML之Contrastive Loss及其变种_对比损失的变种_胖胖大海的博客-CSDN博客 参考&…...

3.编写油猴脚本之-helloword

3.编写油猴脚本之-helloword Start 通过上一篇文章的学习&#xff0c;我们安装完毕了油猴插件。今天我们来编写一个helloword的脚步&#xff0c;体验一下油猴。 1. 开始 点击油猴插件>添加新脚本 默认生成的脚本 // UserScript // name New Userscript // name…...

openwrt的openclash提示【更新失败,请确认设备闪存空间足够后再试】

网上搜索了一下&#xff0c;问题应该是出在“无法从网络下载内核更新包”或者“无法识别内核的版本号” 解决办法&#xff1a;手动下载&#xff08;我是只搞了DEV内核就搞定了TUN和Meta没有动&#xff09; --> 上传到路由器上 --> 解压缩 --> 回到openclash界面更新配…...

torch.nn.Module

它是所有的神经网络的根父类&#xff01; 你的神经网络必然要继承 可以看一下这篇文章...

论文解析-基于 Unity3D 游戏人工智能的研究与应用

1.重写 AgentAction 方法 1.1 重写 AgentAction 方法 这段代码是一个重写了 AgentAction 方法的方法。以下是对每行代码解释&#xff1a; ①public override void AgentAction(float[] vectorAction) 这行代码声明了一个公共的、重写了父类的 AgentAction 方法的方法。它接受…...

6、Flutterr聊天界面网络请求

一、准备网络数据 1.1 数据准备工作 来到网络数据制造的网址,注册登录后,新建仓库,名为WeChat_flutter;点击进入该仓库,删掉左侧的示例接口,新建接口. 3. 接着点击右上角‘编辑’按钮,新建响应内容,类型为Array,一次生成50条 4. 点击chat_list左侧添加按钮,新建chat_list中的…...

Java 8 腰斩!Java 17 暴涨 430%!!(文末福利)

New Relic 最新发布了一份 “2023 年 Java 生态系统状况报告”&#xff0c;旨在提供有关当今 Java 生态系统状态的背景和见解。该报告基于从数百万个提供性能数据的应用程序中收集的数据&#xff0c;对生产中使用最多的版本、最受欢迎的 JDK 供应商、容器的兴起等多方面进行了调…...

如何手写一个支持H.265的高清播放器

概述 音视频编解码技术在当前的互联网行业中十分热门&#xff0c;特别是高清视频播放器的开发&#xff0c;其中包括4K、8K等超高清分辨率的播放器&#xff0c;具有极高的市场需求和广泛的应用场景。H265编码技术更是实现高清视频压缩的重要手段之一。如果想要掌握音视频编解码…...

Day 1 认识软件测试——(软件测试定义、目的、原则)

Day 1 认识软件测试——(软件测试定义、目的、原则) 文章目录 Day 1 认识软件测试——(软件测试定义、目的、原则)软件测试的定义软件测试的目的软件测试的经济学问题黑盒测试白盒测试软件测试原则小结所谓软件测试,就是一个过程或一系列过程,用来确定计算机代码完成了其…...

Docker Harbor

目录 一、Docker Harbor概述 1、Harbor的优势 2、Harbor知识点 3、Docker私有仓库架构 二、Harbor构建Docker私有仓库 1、环境配置 2、案例需求 3、部署docker-compose服务 4、部署harbor服务 5、启动harbor ① 访问 ② 添加项目并填写项目名称 ③ 通过127.0.0.1来…...

第三十四章 Unity人形动画(上)

在我们DirectX课程中&#xff0c;我们讲过一个模型最少拥有网格和材质&#xff0c;可以没有动画。游戏场景中的静态物体就可以是这样的模型&#xff0c;例如花草树木&#xff0c;建筑物等等&#xff0c;他们通过MeshRenderer就可以渲染。对于一个带有动画的FBX文件&#xff0c;…...

计算机图形学-GAMES101-7

引言 场景中有很多的三角形&#xff0c;如果实现可见性和遮挡呢&#xff1f;  一个简单的想法是&#xff0c;从远到近画&#xff0c;近处的物体自然会覆盖掉远处的物体&#xff0c;这种画法也叫画家算法。  但是实际绘制中物体的顺序是不容易确定的&#xff0c;比如如下图绘制…...

AndroidAuto 解决PCTS NF7

直接上代码 public void handleNavigationFocusRequest(int focusType) {// Always grant requested focus in this example.-mGal.galReceiver.sendNavigationFocusState(focusType);+mGal.galReceiver.sendNavigationFocusState...

GPT:你知道这五年我怎么过的么?

时间轴 GPT 首先最初版的GPT&#xff0c;来源于论文Improving Language Understanding by Generative Pre-Training&#xff08;翻译过来就是&#xff1a;使用通用的预训练来提升语言的理解能力&#xff09;。GPT这个名字其实并没有在论文中提到过&#xff0c;后人将论文名最后…...

Python一行命令搭建HTTP服务器并外网访问 - 内网穿透

文章目录 1.前言2.本地http服务器搭建2.1.Python的安装和设置2.2.Python服务器设置和测试 3.cpolar的安装和注册3.1 Cpolar云端设置3.2 Cpolar本地设置 4.公网访问测试5.结语 转载自远程内网穿透的文章&#xff1a;【Python】快速简单搭建HTTP服务器并公网访问「cpolar内网穿透…...

TypeScript5-泛型

泛型是 TS 中一个重要的概念&#xff0c;它可以创建可复用的组件&#xff0c;同时保持对类型信息的一致性。 泛型提供了一种方式使得类型可以被参数化&#xff0c;这样就可以创建可以适用于各种数据类型的函数或类&#xff0c;而不仅仅限于一个数据类型。 一、泛型 先来看一…...

IMX6ULL裸机篇之DDR3的时钟配置

一. MMDC 控制器 对于 I.MX6U 来说&#xff0c;有 DDR 内存控制器&#xff0c;否则的话它怎么连接 DDR 呢&#xff1f;MMDC控制器 就是 I.MX6U 的 DDR内存控制器。 MMDC 外设包含一个内核(MMDC_CORE)和 PHY(MMDC_PHY)&#xff0c;内核和 PHY 的功能如下&#xff1a; MMDC 内…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会&#xff0c;其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具&#xff0c;对过去十年 WWDC 主题演讲内容进行了系统化分析&#xff0c;形成了这份…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)

目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 &#xff08;1&#xff09;输入单引号 &#xff08;2&#xff09;万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...

在 Spring Boot 中使用 JSP

jsp&#xff1f; 好多年没用了。重新整一下 还费了点时间&#xff0c;记录一下。 项目结构&#xff1a; pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...