热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

模糊控制及自适应模糊控制实现

模糊控制器与自适应模糊控制设计题一:已知某被控对象的传递函数为:(1)采用二维PD模糊控制器,输入变量和,输出变量为&#x

模糊控制器与自适应模糊控制设计

题一:已知某被控对象的传递函数为:

(1) 采用二维PD模糊控制器,输入变量 和 ,输出变量为 ,其模糊集论域均为[-5,5],语言变量取值[NL,NM,NS,ZO,PS,PM,PL],隶属函数为对称三角形;规则前件及蕴涵均采用“取小”运算,采用COG反模糊化方法。用Simulink建立单位反馈仿真系统,适当调整模糊控制器的增益系数 , 及 ,求出系统的阶跃响应曲线;

(2) 已知条件同条件(1),求系统单位斜坡输入时的系统响应曲线,分析系统响应曲线,分析系统响应曲线是否有静态偏差存在,为什么?

(3) 已知条件同条件(1),针对单位斜坡输入,要求系统无静态偏差,该怎样设计模糊控制器?设计相应的模糊控制器并进行系统仿真。

解:

(1):建立系统Simulink模型及单位阶跃响应曲线:

图1 模糊规则表

图2 系统Simulink模型

图3 不同参数下的阶跃响应曲线

(2) 单位斜坡输入下的系统响应曲线

 

 

图4 斜坡输入下不同参数系统响应

       结论:综合图3和图4可以看出,误差量化因子能够对系统的快速响应特性和超调量起到很好的控制作用,而误差变化率因子对系统的动态特性起到很好的调节作用,同时系统均存在稳态误差,所以整体上模糊控制器的作用类似与PD控制器。

(3):加入积分环节

图5 Simulink模型

图6 斜坡响应输出

       结论:将积分因子加入模糊控制器后可以看出系统的稳态误差得到消除,整体上类似于PID控制器。

题二:设被控对象的传递函数为

式中 。参考模型为一阶系统。系统参考输入为

(1) 针对 设计一个直接模糊控制器(非自适应),使得对象的输出尽可能接近参考模型的性能指标。模糊控制器为二维模糊控制器,其输入变量为偏差 , 为系统参考输入, 为被控对象输出;偏差变化 (用一阶后向差分近似)。

(2) 针对 设计模糊模型参考学习自适应控制系统,使得对象输出跟踪参考模型输出并尽可能地靠近它。将(1)中所设计的模糊控制器作为初始模糊控制器并为FMRLC(模糊模型参考学习控制)所调整,进行系统仿真。

解:

(1).模糊控制器设计:

(a) 设计步骤:输入变量e 和ec ,输出变量为 u,其模糊集论域分别为[-8,8],[-1.6,1.6],[-4,4],语言变量均为[NL,NM,NS,ZO,PS,PM,PL],隶属函数为对称三角形;规则前件及蕴涵均采用“取小”运算,采用COG反模糊化方法,模糊规则采用与图1相同。

(b)  Simulink模型:

图7 Simulink模型

仿真结果:

图8 模糊控制跟踪曲线

       结论:从结果可以看出单纯的模糊控制器输出存在很严重的相位滞后,控制系统的响应跟踪较差。

(2) 模糊模型参考学习自适应(FMRLC)控制系统:

       设计方法1:根据模糊逆模型实际输出得到控制量校正kp,对原模糊控制器的输出隶属度函数位置进行平移,得到系统的实时响应曲线和误差变化。图9,10,11,分别为系统Simulink模型,系统实时跟踪响应和系统误差响应曲线。

       主要设计步骤为(核心代码说明见附录A.1):

    (a)     根据输入变量e和ec确定各自对应的模糊论域等级;

    (b)     查询规则表中由e和ec激活的规则,并获取在规则激活下输出u的论域等级;

    (c)     根据获取的逆模型输出校正量p,对激活输出下的u的隶属度函数进行平移,当p为正时向右平移,当p为负时向左平移,平移量均为p;

图9 模糊参考模型自适应控制Simulink图

图10 系统跟踪响应

图11 系统跟踪误差

       可以看出,通过对模糊控制器规则的实时修改可以起到稳定跟踪的效果,系统的响应误差在0.004附近。

设计方法2:在方法1的基础进一步对激活规则的权重进行修改,修改的原则在于,当模糊逆模型控制输出量p较大时,其激活规则的权重应该相应的增大以保证增大系统输出,减小跟踪误差,反之亦然。

主要步骤(核心代码见附录A.2):

    (a)     根据输入变量e和ec确定各自对应的模糊论域等级;

    (b)     查询规则表中由e和ec激活的规则,并获取在规则激活下输出u的论域等级;

    (c)     根据获取的逆模型输出校正量p,对激活输出下的u的隶属度函数进行平移,当p为正时向右平移,当p为负时向左平移,平移量均为p;

    (d)     将激活的规则权重在原来的基础上增加p;

 

图12 增加规则权重修改的模糊控制器Simulink模型

图13 系统跟踪响应

图14 系统跟踪误差

图15 增加规则权重修改与规则修改误差跟踪曲线对比

可以看出,在进一步引入权重修改后,其系统响应更加平滑,系统在波峰波谷处的跟踪效果有所提高。

附录

A.1:

function u = adaptive_fuzzy(p, e, ec)

coder.extrinsic('readfis');

coder.extrinsic('writefis');

coder.extrinsic('evalfis');

coder.extrinsic('newfis');

coder.extrinsic('addvar');

coder.extrinsic('addmf');

coder.extrinsic('addrule');

coder.extrinsic('setfis');

a = newfis('adapfuzzy');

%确定e和ec的模糊论域等级

dist_e = fix((e+1)*3);%截尾取整

degleft_e = 1 + dist_e;

degright_e = degleft_e + 1;

 

dist_ec = fix((ec+1)*3);%截尾取整

degleft_ec = 1 + dist_ec;

degright_ec = degleft_ec +1;

 

%规则列表

rulelist = [1 1 1 1 1

    1 2 1 1 1

    1 3 1 1 1

    1 4 1 1 1

    1 5 2 1 1

    1 6 3 1 1

    1 7 4 1 1

 

    2 1 1 1 1

    2 2 1 1 1

    2 3 2 1 1

    2 4 2 1 1

    2 5 3 1 1

    2 6 4 1 1

    2 7 4 1 1

 

    3 1 1 1 1

    3 2 2 1 1

    3 3 2 1 1

    3 4 3 1 1

    3 5 4 1 1

    3 6 4 1 1

    3 7 3 1 1

 

    4 1 2 1 1

    4 2 3 1 1;

    4 3 3 1 1

    4 4 4 1 1

    4 5 5 1 1

    4 6 5 1 1

    4 7 6 1 1

 

    5 1 3 1 1

    5 2 4 1 1

    5 3 4 1 1

    5 4 5 1 1

    5 5 6 1 1

    5 6 6 1 1

    5 7 7 1 1

 

    6 1 4 1 1

    6 2 4 1 1

    6 3 5 1 1

    6 4 6 1 1

    6 5 6 1 1

    6 6 7 1 1

    6 7 7 1 1

 

    7 1 4 1 1

    7 2 5 1 1

    7 3 6 1 1

    7 4 7 1 1

    7 5 7 1 1

    7 6 7 1 1

    7 7 7 1 1];

u_index = zeros(1,4);

index = 1;

%根据激活的规则获取对应输出u的论域等级

for i=degleft_e:degright_e

    for j=degleft_ec:degright_ec

        ifrulelist(7*(i-1)+j,3)==u_index(1)||rulelist(7*(i-1)+j,3)==u_index(2)||rulelist(7*(i-1)+j,3)==u_index(3)||rulelist(7*(i-1)+j,3)==u_index(4)

            continue;

        else

           u_index(index)=rulelist(7*(i-1)+j,3);

            index=index+1;

        end

    end

end

%设置输入e的隶属度函数

a = addvar(a,'input','e',[-1,1]);

for i=1:7

   a = addmf(a,'input',1,i,'trimf',[-4/3+(i-1)/3,-1+(i-1)/3,-2/3+(i-1)/3]);

end

%设置输入ec的隶属度函数

a = addvar(a,'input','ec',[-1,1]);

for i=1:7

    a = addmf(a,'input',2,i,'trimf',[-4/3+(i-1)/3,-1+(i-1)/3,-2/3+(i-1)/3]);  

end

%根据控制量p设置输出隶属度函数

a = addvar(a,'output','u',[-1,1]);

for i=1:7

    %对相应的隶属度函数进行平移

    ifi==u_index(1)||i==u_index(2)||i==u_index(3)||i==u_index(4)

         a = addmf(a,'output',1,i,'trimf',[-4/3+(i-1)/3+p,-1+(i-1)/3+p,-2/3+(i-1)/3+p]);

    else

         a = addmf(a,'output',1,i,'trimf',[-4/3+(i-1)/3,-1+(i-1)/3,-2/3+(i-1)/3]);

    end

end

a = addrule(a,rulelist);

adapfuzzy = setfis(a,'DefuzzMethod','centroid');%面积重心法去模糊化·¨

u = 0.0;

u =evalfis([e,ec],adapfuzzy);

 

 

A.2 在A.1的基础上增添以下代码

%根据修改激活规则权重

for i=degleft_e:degright_e

    for j=degleft_ec:degright_ec

       rulelist(7*(i-1)+j,4)=rulelist(7*(i-1)+j,4) + p;

    end

end

 

 


推荐阅读
  • Python基础知识:注释、输出和input交互
    本文介绍了Python基础知识,包括注释的使用、输出函数print的用法以及input函数的交互功能。其中涉及到字符串和整数的类型转换等内容。 ... [详细]
  • 本文介绍了在满足特定条件时如何在输入字段中使用默认值的方法和相应的代码。当输入字段填充100或更多的金额时,使用50作为默认值;当输入字段填充有-20或更多(负数)时,使用-10作为默认值。文章还提供了相关的JavaScript和Jquery代码,用于动态地根据条件使用默认值。 ... [详细]
  • Python教学练习二Python1-12练习二一、判断季节用户输入月份,判断这个月是哪个季节?3,4,5月----春 ... [详细]
  • 判断编码是否可立即解码的程序及电话号码一致性判断程序
    本文介绍了两个编程题目,一个是判断编码是否可立即解码的程序,另一个是判断电话号码一致性的程序。对于第一个题目,给出一组二进制编码,判断是否存在一个编码是另一个编码的前缀,如果不存在则称为可立即解码的编码。对于第二个题目,给出一些电话号码,判断是否存在一个号码是另一个号码的前缀,如果不存在则说明这些号码是一致的。两个题目的解法类似,都使用了树的数据结构来实现。 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 本文介绍了如何使用Python正则表达式匹配MATLAB的函数语法,包括多行匹配和跨行签名的处理方法。同时,作者还分享了自己遇到的问题和解决方案。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • ASP.NET2.0数据教程之十四:使用FormView的模板
    本文介绍了在ASP.NET 2.0中使用FormView控件来实现自定义的显示外观,与GridView和DetailsView不同,FormView使用模板来呈现,可以实现不规则的外观呈现。同时还介绍了TemplateField的用法和FormView与DetailsView的区别。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • Learning to Paint with Model-based Deep Reinforcement Learning
    本文介绍了一种基于模型的深度强化学习方法,通过结合神经渲染器,教机器像人类画家一样进行绘画。该方法能够生成笔画的坐标点、半径、透明度、颜色值等,以生成类似于给定目标图像的绘画。文章还讨论了该方法面临的挑战,包括绘制纹理丰富的图像等。通过对比实验的结果,作者证明了基于模型的深度强化学习方法相对于基于模型的DDPG和模型无关的DDPG方法的优势。该研究对于深度强化学习在绘画领域的应用具有重要意义。 ... [详细]
author-avatar
zmhua123_681
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有