基于神经网络的控制器设计与仿真
这个部分,主要是通过给定模型的输入和输出,然后通过网络进行训练,得到神经网络的辨识参数。
对于网络辨识部分,其基本构架如下所示:
上述的辨识结构,通过控制对象的输入和输出的延迟分别进入F网络和G网络,然后通过网络输出和实际输出的误差对网络F和网络G进行在线学习。
具体理论论文讲的比较详细了,这里不再重复,仿真效果如下所示:
部分核心程序:
clc;
clear all;
close all;
warning off;
addpath 'func\'
pack;
Num_In = 6;
Num_Hidden = 12;
Num_Out = 1;
load func\result3.mat
[In,Out] = func_data(y3,y_out3);
parameter;
while Error>Err_goal & Iter < Max_iter
u_delay1 = 0;
u_delay2 = 0;
u_delay3 = 0;
u_delay4 = 0;
y_delay1 = 0;
y_delay2 = 0;
y_delay3 = 0;
y_delay4 = 0;
Err_tmp = 0;
for k=1:All_Length
Data_Delays = [y_delay1;
y_delay2;
y_delay3;
u_delay2;
u_delay3;
u_delay4];
%隐层求和
[Y_hidden(k),Hidden1G,Hidden2G,Y_hiddenG(k),Hidden1F,Hidden2F,Y_hiddenF(k)] = func_Hiddern(Data_Delays,u_delay1,Num_Hidden,G_wight_In,G_wight_Inb,G_wight_Out,G_wight_Outb,F_wight_In,F_wight_Inb,F_wight_Out,F_wight_Outb);
Err_tmp = Out(k)-Y_hidden(k);
%F和G网络
%G神经网络计算
[dg_weight_in,dg_bweight_in,dg_weight_out,dg_bweight_out] = func_G_net(Err_tmp,Out(k),In(k),Y_hidden(k),G_wight_Out,Hidden2G,Data_Delays,Y_hiddenG(k),Hidden1G,Num_Hidden,Num_In);
%F神经网络计算
[df_weight_in,df_bweight_in,df_weight_out,df_bweight_out] = func_F_net(Err_tmp,Out(k),In(k),Y_hidden(k),F_wight_Out,Hidden2F,Data_Delays,Y_hiddenG(k),Hidden1F,Num_Hidden,Num_In);
%G网络权值更新
[G_wight_In,G_wight_Out,G_wight_Inb,G_wight_Outb]=func_G_W_updata(Learn_Rate,alpha,...
G_wight_In1,G_wight_Out1,G_wight_Inb1,F_wight_Outb1,...
dg_weight_in,dg_weight_out,dg_bweight_in,dg_bweight_out,...
G_wight_Outb1,...
G_wight_In2,G_wight_Out2,G_wight_Inb2,G_wight_Outb2);
%F网络权值更新
[F_wight_In,F_wight_Out,F_wight_Inb,F_wight_Outb]=func_F_W_updata(Learn_Rate,alpha,...
G_wight_In1,F_wight_Out1,F_wight_Inb1,F_wight_Outb1,...
df_weight_in,df_weight_out,df_bweight_in,df_bweight_out,...
G_wight_In2,F_wight_Out2,F_wight_Inb2,F_wight_Outb2);
%延迟
u_delay4 = u_delay3;
u_delay3 = u_delay2;
u_delay2 = u_delay1;
u_delay1 = In(k);
y_delay4 = y_delay3;
y_delay3 = y_delay2;
y_delay2 = y_delay1;
y_delay1 = Out(k);
G_wight_In2 = G_wight_In1;
G_wight_In1 = F_wight_In;
F_wight_Out2 = F_wight_Out1;
F_wight_Out1 = F_wight_Out;
F_wight_Inb2 = F_wight_Inb1;
F_wight_Inb1 = F_wight_Inb;
F_wight_Outb2 = F_wight_Outb1;
F_wight_Outb1 = F_wight_Outb;
G_wight_In2 = G_wight_In1;
G_wight_In1 = G_wight_In;
G_wight_Out2 = G_wight_Out1;
G_wight_Out1 = G_wight_Out;
G_wight_Inb2 = G_wight_Inb1;
G_wight_Inb1 = G_wight_Inb;
G_wight_Outb2 = G_wight_Outb1;
G_wight_Outb1 = G_wight_Outb;
end
Error = sum((Out-Y_hidden).^2)/k;
Error2(Iter) = Error;
%如果当前训练误差反而增加,则放弃此次训练结果,重新训练
if (Iter > 1) & (Error2(Iter) > 1.2*Error2(Iter-1))
Iter = Iter;
Break_cnt = Break_cnt + 1;
if Break_cnt > 20
Error2(Iter) = [];
break;
end
else
Break_cnt = 0;
Iter = Iter+1;
fprintf('迭代次数:%d ',Iter);
fprintf('误差:%f',Error);
fprintf('\n\n');
end
end
figure;
subplot(121);
plot(Times(1:1000),Out(1:1000),'r');
hold on;
plot(Times(1:1000),Y_hidden(1:1000),'b--');
hold on;
xlabel('Times(s)');
ylabel('Out');
legend('系统输出','网络输出');
subplot(122);
semilogy(1:length(Error2),Error2,'r-o');
xlabel('Times(s)');
ylabel('Error');
grid on;
F_wight_In0 = F_wight_In;
F_wight_Out0 = F_wight_Out;
G_wight_In0 = G_wight_In;
G_wight_Out0 = G_wight_Out;
F_wight_Inb0 = F_wight_Inb;
F_wight_Outb0 = F_wight_Outb;
G_wight_Inb0 = G_wight_Inb;
G_wight_Outb0 = G_wight_Outb;
save NN_reg_signal3.mat F_wight_In0 F_wight_Out0 G_wight_In0 G_wight_Out0 F_wight_Inb0 F_wight_Outb0 G_wight_Inb0 G_wight_Outb0
A08-16
基于神经网络的控制器设计与仿真相关推荐
- 基于S函数的BP神经网络PID控制器及simulink仿真
基于S函数的BP神经网络PID控制器及simulink仿真 文章目录 文章来源和摘要 S函数的编写格式和运行步骤 simulink模型结构 S函数模型初始化部分代码理解 S函数模型更新部分 S函数模型 ...
- 汽车主动悬挂系matlab,基于Matlab的汽车主动悬架控制器设计与仿真.doc
基于Matlab的汽车主动悬架控制器设计与仿真 <现代控制理论及其应用>课程小论文 基于Matlab的汽车主动悬架控制器设计与仿真 学院:机 械 工 程 学 院 班级() 姓名: 2015 ...
- matlab 通讯系统设计与仿真,基于BPSK通信系统的设计与仿真
基于BPSK通信系统的设计与仿真 一.BPSK信号调制原理 1.1 系统原理 file:///C:\Users\ADMINI~1.KGH\AppData\Local\Temp\ksohtml\wps ...
- 基于bp神经网络的pid算法,神经网络pid控制器设计
基于BP神经网络的PID控制器设计 参考一下刘金琨的<先进PID控制>这本书. 例子:被控对象yout(k)=a(k)yout(k-1)/(1+yout(k-1)^2)+u(k_1)其中a ...
- 神经网络pid控制原理框图,神经网络pid控制器设计
神经网络自整定PID真的有效吗?我看图书馆的参考书上和知网论文上的方法,感觉推导过程都不对啊? 楼主的这个问题已经是六年前的问题了(今天2021年5月),不知道楼主现在还关注这个话题不?神经网络自整定 ...
- 基于STM32智能窗帘设计proteus仿真
本设计: 基于STM32智能窗帘设计(含源程序+proteus仿真) 仿真:proteus8.11 程序编译器:keil 5 编程语言:C语言 编号C0007 [腾讯文档]C0007 网盘链接 资料下 ...
- m基于K-means聚类算法和神经网络的模糊控制器设计matlab仿真
目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 聚类就是按照某个特定标准把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大,同 ...
- m基于simulink的六自由度高超声速飞行器内外环飞行控制器设计与仿真实现
目录 1.算法仿真效果 2.MATLAB核心程序 3.算法涉及理论知识概要 4.完整MATLAB 1.算法仿真效果 matlab2022a仿真结果如下: 2.MATLAB核心程序 %========= ...
- 基于Matlab的汽车主动悬架控制器设计与仿真
1.内容简介 略217-主动被动悬架-LQR 2.内容说明 汽车悬架系统由弹性元件.导向元件和减振器组成,是车身与车轴之间连接的所有组合体零件的总称,也是车架(或承载式车身)与车桥(或车轮)之间一切力 ...
最新文章
- 梯度下降优化算法综述与PyTorch实现源码剖析
- R语言ggplot2可视化NHANES数据集年龄和身高的关系并按照性别因子分析男性和女性的差异
- Unity中对象池的使用
- 计算机硬件2部件指的是什么,计算机基础-2.计算机硬件基础.doc
- 开工快乐!AI内参邀你继续学习,并送上50元优惠券!
- 代码重构----使用java有限状态机来消除太多的if else判断
- oracle数据泵导入提示00972,oracle数据库使用expdp指定FLASHBACK_TIME遇到ORA-39150错误 | 信春哥,系统稳,闭眼上线不回滚!...
- 14个你可能不知道的JavaScript调试技巧
- 以下不是python内置函数的是_为什么说python内置函数并不是万能的?
- 网页上透明FLASH代码详解
- C++程序员必备知识
- App接入微信登录 步骤
- 大二下学期ACM比赛总结
- 当下移动开发唱衰,iOS开发者如何才能涅槃重生?
- 务实至上:“PHP之父”Rasmus Lerdorf访谈录
- 基于CRNN+CTC的改进图像文本识别算法
- 内核aio_AIO 简介
- PostGIS 快速入门
- 财务自由之路--笔记
- 【持续更新】java多线程面试题整理
热门文章
- jQuery获取CSS样式中的颜色值的问题,不同浏览器格式不同怎么办
- R语言数据可视化 ggplot2基础2 创建单图层的散点图 创建facet
- UA MATH563 概率论的数学基础 中心极限定理6 独立随机变量的和与Kolmogorov扩展定理
- 利用emu8086学习汇编int 10h功能
- 作用域变量 var
- SpringBoot整合RabbitMQ-消息可靠性投递
- php--理解PHP的依赖注入和laravel的服务容器
- Windows XP Embedded 上手指南
- iTOP-4418/6818开发板支持双屏异显,双屏同显
- JS 回车提交,兼容IE、火狐、Opera、Chrome、Safari……