模糊神经网络控制器(MATLAB)

模糊神经网络控制器(Fuzzy Neural Network Controller)是将模糊控制和神经网络相结合的一类控制器。它综合了两者的优点,主要包括以下特点:

知识表达能力强。模糊系统的语言规则和神经网络的学习能力相结合,可以表示复杂的非线性映射关系。

自适应能力强。神经网络提供了在线学习和自适应的能力,可以根据过程的变化自动调整控制器的参数。

控制效果好。模糊推理结合神经网络近似能力,使控制效果优于传统PID控制器。

结构灵活。如T-S型、并行型等多种网络结构,可以根据实际需要选择。

模糊神经网络控制器的设计过程包括:确定输入输出变量、构建模糊控制规则、选择网络结构、确定学习算法以及仿真验证。应用领域十分广泛,如电机控制、机器人控制、化工过程控制等,特别适合对象复杂、模型难以建立的场合。

总体而言,模糊神经网络控制器集两种智能方法之长,是一种性能优异的现代控制策略。

MATLAB代码:

%% 模糊神经网络控制器主程序

% 清空MATLAB环境

clear all;%清除变量

close all;clc;%清空命令窗口

%% --(1)设置参数开始--

InputNumber = 2;%输入变量的数量

FuzzyPartitionNumber = 7;%模糊论域划分数量的设置

RuleNum = 49;%规则数量的设置

ProportionSum = 0;

[c1,b1,w1]=IniFuzzyNN(InputNumber,FuzzyPartitionNumber,RuleNum);%% 初始化模糊神经网络参数

x_input = [0;

    0]; % 神经网络输入初始化

myts=80e-6;%采样间隔

mynum=[500 1];%控制对象传递函数分子

myden=[10,20,5000];%控制对象传递函数分母

mysys=tf(mynum ,myden);

dsys=c2d(mysys,myts,'z');%把传递函数转换为离散状态空间

[mynum myden] = tfdata(dsys,'v');

N=5000;%采样点数

%输入信号为单位阶跃

rin=zeros(N,1);

for gen=1:1:N

    if gen>100

        rin(gen)=1.0;

    end

end

%模糊神经网络控制器的量化因子设置

Ke = 0.8;

Kec = 1e-4;

Ka = 3.5;%比例因子的设置

Kb = 6200;%积分因子的设置

%% 模糊神经网络控制器的控制量参数初始化

error_1 = rin(1);%误差初始化

%输出初始化

y_1=0;

y_2=0;

y_3=0;

%控制论初始化

u_1=0;

u_2=0;

u_3=0;

%% 模糊神经网络控制器的相关参数矩阵初始化

FuzzyBPnet=zeros(InputNumber,FuzzyPartitionNumber);

fuzzyData2=zeros(InputNumber,FuzzyPartitionNumber);

fuzzyData4=zeros(InputNumber,FuzzyPartitionNumber);

ecdata=zeros(N,1);

times=zeros(N,1);

yout=zeros(N,1);

errorData=zeros(N,1);

dError=zeros(N,1);

eData=zeros(N,1);

u=zeros(N,1);

for gen=1:1:N

    times(gen)=gen*myts;

    yout(gen)=-myden(2)*y_1-myden(3)*y_2+mynum(2)*u_1+mynum(3)*u_2;%二阶系统输出计算

    errorData(gen)=rin(gen)-yout(gen);%计算系统误差

    dError(gen) = (errorData(gen)-error_1)/myts;%系统误差变化

    eData(gen) = Ke*errorData(gen);%输入变量模糊化:液位差

    ecdata(gen) = Kec*dError(gen);%输入变量模糊化:液位差变化率

    %% 模糊控制输入变量范围限制

    % 液位差

    limite = 2;

    if eData(gen)>limite

        eData(gen)=limite;

    elseif eData(gen)<-limite

        eData(gen)=-limite;

    end

    % 液位差变化率

    limitec = 2;

    if ecdata(gen)>limitec

        ecdata(gen)=limitec;

    elseif ecdata(gen)<-limitec

        ecdata(gen)=-limitec;

    end

    %% 第1层输入层:模糊神经网络节点输入:液位差e,液位差变化率ec

    x_input(1) = eData(gen);

    x_input(2) = ecdata(gen);

    fuzzydata1 = x_input;

    %% 开始第2层模糊化层:进行模糊划分

    for i=1:1:InputNumber

        for j = 1:1:FuzzyPartitionNumber

            FuzzyBPnet(i,j) = -(fuzzydata1(i)-c1(i,j))^2/(2*b1(i,j)^2);

            fuzzyData2(i,j) = exp(FuzzyBPnet(i,j));

        end

    end

    for j = 1:1:FuzzyPartitionNumber% 提取模糊化层各节点的输出

        m1(j) = fuzzyData2(1,j);

        m2(j) = fuzzyData2(2,j);

    end

    %% 第3层推理层:模糊推理过程

    for i = 1:1:FuzzyPartitionNumber

        for j = 1:1:FuzzyPartitionNumber

            fuzzyData4(i,j) = m1(i)*m2(j);

        end

    end

    fuzzyData3 = [fuzzyData4(1,:),fuzzyData4(2,:),fuzzyData4(3,:),fuzzyData4(4,:),fuzzyData4(5,:),fuzzyData4(6,:),fuzzyData4(7,:)]; %对规则层各节点输出

    %% 第4层是归一化层:对变量进行归一化计算

    fall_sum = 0;

    for i = 1:1:RuleNum

        fall_sum = fall_sum+fuzzyData3(i);

    end

    % 归一化层节点输出

    f4 = fuzzyData3/fall_sum;

    NormalizationOutput(gen) = w1'*fuzzyData3';

    %% 第5层输出层:对模糊控制输出进行清晰化

    ProportionSum = ProportionSum+NormalizationOutput(gen)*myts;

    u(gen) = Ka*NormalizationOutput (gen)+ Kb*ProportionSum ;

    %控制器的输出范围限制

    limitu=15.5;

    if u(gen)>limitu

        u(gen)=limitu;

    elseif u(gen)<-limitu

        u(gen)=-limitu;

    end

    %% 更新 输出量和控制量,注意是二阶系统

    u_3=u_2;

    u_2=u_1;

    u_1=u(gen);

    y_3=y_2;

    y_2=y_1;

    y_1=yout(gen);

    error_2 = error_1;

    error_1=errorData(gen);

end

%% 绘制仿真图

figure

plot(times,yout,'r');

hold on;

plot(times,rin,'b');

legend('输出值','控制值');

xlabel('时间');

ylabel('响应');

title('模糊神经网络控制器对双容水箱的的阶跃相应曲线');

figure

plot(times,eData,'blue',times,ecdata,'r');

legend('e','ec');

legend('液位差','液位差变化率');

xlabel('时间');

ylabel('响应');

title('模糊神经网络控制器对双容水箱的的阶跃相应曲线');

程序结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/358659.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

幻兽帕鲁服务器部署教程(超详细)

幻兽帕鲁服务器部署教程&#xff08;超详细&#xff09; 文章目录 幻兽帕鲁服务器部署教程&#xff08;超详细&#xff09;[TOC] 前言一、怎么部署属于自己的幻兽帕鲁服务器一、怎么登录游戏体验&#xff1f; 前言 在帕鲁的世界&#xff0c;你可以选择与神奇的生物「帕鲁」一同…

HCIA学习作业五

拓扑图&#xff1a; PC端 PC1>ipconfig PC2>ipconfig PC3>ipconfig PC4>ipconfig PC>ping PC1>ping 192.168.1.125 PC1>ping 192.168.1.254 PC1>ping 192.168.1.253 PC2>ping 192.168.1.125 PC2>ping 192.168.1.253 PC3>ping 192.168.1.126…

蓝桥杯备战——9.读写AT24C02

1.分析原理图 由上图我们可以看到AT24C02通过IIC与单片机进行通讯&#xff0c;由于A0,A1,A2都接地&#xff0c;所以器件地址为0XA0。 2.IIC通讯协议 比赛的时候会提供IIC驱动代码&#xff0c;我们不需要自己去写&#xff0c;我这里简单贴出一份&#xff1a; #include "i…

电池-电量监测基础知识

一、为何要进行电池电量监测 不知各位有没有想过为何现在手机电池和笔记本电脑电池不容易鼓包了&#xff1f;十年前还经常出现的电池鼓包最近像是消失了一样&#xff0c;其实是因为随着电量监测技术的发展&#xff0c;哪怕是最基本的电子设备也有电池侧和产品侧至少两级电量监测…

1.30 C++ day4

思维导图 构造函数、析构函数、拷贝构造函数、拷贝赋值函数 代码 #include <iostream>using namespace std;class Stu//封装一个学生类 { private://私有属性string name;int id;double *score; public://公共属性//无参构造函数Stu(){cout << "Stu::无参构…

File、IO流(一)

File、IO流 File File是Java.io包下的类&#xff0c;File类的对象&#xff0c;用于代表当前操作系统的文件&#xff08;可以是文件、或者文件夹&#xff09;。 注意&#xff1a;File类只能对文件本身进行操作&#xff0c;不能读写文件里面存储的数据。 IO流 用于读写数据的&…

二叉树-堆实现

目录 Test.c测试代码 test1 test2 test3 &#x1f387;Test.c总代码 Heap.h头文件&函数声明 头文件 函数声明 &#x1f387;Heap.h总代码 Heap.c函数实现 ☁HeapInit初始化 ☁HeapDestroy销毁 ☁HeapPush插入数据 【1】插入数据 【2】向上调整Adjustup❗ …

nginx负载均衡案例

大家好今天给大家带来nginx负载均衡实验案例,首大家先看一下我的各类版本信息。&#xff08;还有两台设备信息相同就不展示了&#xff09; 一&#xff0c;搭建nginx环境 ❶首先创建Nginx的目录并进入&#xff1a; [rootlocalhost]# mkdir /soft && mkdir /soft/nginx…

java-JUC并发编程学习笔记03(尚硅谷)

线程间通信 例子&#xff1a; 对一个值1 -1交替完成&#xff0c;a的值就是1 b的值就是0 这个过程就是线程间通信 Synchronized实现&#xff1a; 虚假唤醒问题&#xff1a; 我们再添加两个线程。 我们发现我们的结果就不对了。 我们只需要使用while即可。 我们线程通信的最后一…

商品主图重复如何处理?淘宝、拼多多和阿里巴巴多店铺商品上架运营技巧

采集铺货的时候&#xff0c;商品主图重复上架有什么影响&#xff1f; 我们在1688、阿里国际站等采集货品&#xff0c;在抖音、淘宝、京东和拼多多进行售卖的时候&#xff0c;由于货源类似&#xff0c;经常会发现商品重复&#xff0c;无法在平台获得有效流量。以企业为纬度&…

【保驾护航】HarmonyOS应用开发者基础认证-题库-2024

通过系统化的课程学习&#xff0c;熟练掌握DevEco Studio&#xff0c;ArkTS&#xff0c;ArkUI&#xff0c;预览器&#xff0c;模拟器&#xff0c;SDK等HarmonyOS应用开发的关键概念&#xff0c;具备基础的应用开发能力。 考试说明 1、考试需实名认证&#xff0c;请在考前于个…

【云原生】consul自动注册,实现负载均衡器与节点服务应用解耦,批量管理容器

目录 一、consul解决了什么问题&#xff1f; 二、consul的模式 三、consul的工作原理 四、实操consul连接负载均衡与容器 步骤一&#xff1a;完成consul的部署 步骤二&#xff1a;完成gliderlabs/registrator:latest镜像的拉取&#xff0c;并完成启动 步骤三&#xff1a;…

二维数组的学习

前言 在前面我们学习了一维数组&#xff0c;但是有的问题需要用二位数组来解决。 二维数组常称为矩阵&#xff0c;把二维数组写成行和列的排列形式&#xff0c;可以有助于形象化的理解二维数组的逻辑结构。 一、二维数组的定义 二维数组定义的一般格式&#xff1a; 数据类型 数…

最新GPT4.0使用教程,AI绘画-Midjourney绘画,GPT语音对话使用,DALL-E3文生图+思维导图一站式解决

一、前言 ChatGPT3.5、GPT4.0、GPT语音对话、Midjourney绘画&#xff0c;文档对话总结DALL-E3文生图&#xff0c;相信对大家应该不感到陌生吧&#xff1f;简单来说&#xff0c;GPT-4技术比之前的GPT-3.5相对来说更加智能&#xff0c;会根据用户的要求生成多种内容甚至也可以和…

企业资产管理软件市场分析:预计2029年将达到91亿美元

固定资产是企业资产重要的组成部分&#xff0c;是企业赖以生存的基础&#xff0c;加强固定资产管理&#xff0c;对于保障企业稳定发展有着重要意义。但是&#xff0c;不少企业因资产管理模式落后&#xff0c;以致各项资产信息无法及时传递与共享&#xff0c;资产损耗和及时维护…

c语言学习笔记之字符串库函数和逗号表达式

逗号表达式 #include <stdio.h>int main(){int a 10;int b 5;int c 6;int d (a 23,b a-4,c b2);printf("%d",d); }打印结果为: 逗号表达式,从左往右依次进行,将最后一个表达式的值赋值给变量. c语言字符串相关库函数 求字符串长度strlen长度不受限制的…

【Linux】线程安全

线程安全 一、Linux线程互斥1、进程线程间的互斥相关背景概念&#xff08;1&#xff09;临界区和临界资源&#xff08;2&#xff09;互斥和原子性出现负数原因为什么--ticket不是一个原子操作&#xff1f; 2、互斥量mutex&#xff08;1&#xff09;互斥量的接口i、初始化互斥量…

[嵌入式软件][入门篇][仿真平台] STM32CubeMX的搭建

文章目录 一、简介二、STM32CubeMX的使用(1) 新建文件&#xff0c;芯片选型(2) sys设置和RCC设置(3) 配置时钟(4) 生成代码 三、仿真平台的使用 一、简介 STM32CubeMX是一种图形工具&#xff0c;通过分步过程可以非常轻松地配置STM32微控制器和微处理器&#xff0c;生成相应的初…

Java项目:基于SSM框架实现的医疗企业管理系统(ssm+B/S架构+源码+数据库+毕业论文)

一、项目简介 本项目是一套ssm815基于SSM框架实现的医疗企业管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&am…

【wvp】关于码率等的相关流程设计

目录 流程设计 前端UI大致设计 终端上的相关修改界面参考 流程设计 前端UI大致设计 终端上的相关修改界面参考