基于模糊控制的速度跟踪控制问题(C语言以及MATLAB仿真实现)
模糊控制的MATLAB实现具体过程(强势吐血推荐)
a=addvar(a,’input’,’service’,[0 10]);
getfis(a,’input’,1) //取得FIS的部分或全部属性
②函数addmf
功能:向模糊推理系统的语言变量添加隶属度函数。
格式:a=addmf(a, varType, varIndex,mfName,mfType, mfParams)
2、存储( .fis文件)
访问
readfis-读 writefis-写
命令函数 1、隶属度函数 ①函数trimf(表示triangular membership function) 功能:建立三角形隶属度函数。 格式:y=trimf(x,[a b c]) 其中:参数x指定变量论域范围,参数a,b和c指定三角形函 数的形状,该函数在b点处取最大值1,a,c点为0。 例:建立三角形隶属度函数并绘制曲线。
min prod (乘积法)
3. 输出的合成计算Aggregation(模糊规则综合采用的方法)
Aggregation
max sum(求和法)
prober (概率法)
prober(a,b)=a+b-ab
4. 逆模糊化计算(Defuzzification)
centroid(重心法)
lom(最大隶属度函数中的取最大值法)
例:showrule(a,1:2,’indexed’) 输出结果:1 1,1(1):1
1 2,2(1):1
6、计算模糊推理输出结果函数evalfis
格式:y=evalfis(U,FIS) 说明:参数U是输入数据,FIS是模糊推理矩阵。U 的每一行是一个特定的输入向量,Y的每一行是一 个特定的输出向量。
模糊控制的Matlab仿真实例
其他例子
模型Shower.mdl―淋浴温度调节模糊控制系统仿真; 模型slcp.mdl―单级小车倒摆模糊控制系统仿真; 模型 slcp1.mdl―变长度倒摆小车模糊控制系统仿
真; 模型 slcpp1.mdl—定长、变长二倒摆模糊控制系
统仿真; 模型slbb.mdl―球棒模糊控制系统仿真; 模型sltbu.mdl―卡车智能模糊控制倒车系统仿真; 模型sltank2.mdl ― 用子系统封装的水箱控制仿
为简单起见,我们直接利用系统里已经编辑好的 模糊推理系统,在它的基础上进行修改。这里我 们采用与tank . fis中输入输出变量模糊集合完 全相同的集合隶属度函数定义,只是对模糊规则 进行一些改动,来学习模糊工具箱与仿真工具的 结合运用。对于这个问题,根据经验和直觉很显 然可以得到如下的模糊度示 波器
冷水阀子系统
这个仿真模型的输出是用示波器来表示的,如 图所示。通过示波器上的图形我们可以清楚地 看到温度和水流量跟踪目标要求的性能。
水温示波器
水流示波器
水温偏差区间模糊划分及隶属度函数
水流量偏差区间模糊划分及隶属度函数
输出对冷水阀控制策略的模糊化分及隶属度函数
选Edit菜单,选择Rules, 弹出一新界面Rule Editor. 在底部的选择框内,选择相应的 IF…AND…THEN 规则,点击Add rule 键,上部 框内将显示相应的规则。本例中用9条左右的规 则,依次加入。如下图所示:
模糊逻辑工具箱仿真结果
模糊规则浏览器用于显示各条模糊控制规则对 应的输入量和输出量的隶属度函数。通过指定 输入量,可以直接的显示所采用的控制规则, 以及通过模糊推理得到相应输出量的全过程, 以便对模糊规则进行修改和优化。
这样的结果与实际情况还是有些不符。通常顾客都是给15%的 小费,只有服务特别好或特别不好的时候才有改变,也就是说, 希望在图形中间部分的响应平坦些,而在两端(服务好或坏) 有凸起或凹陷。这时服务与小费是分段线性的关系。例如,用 下面 MATLAB 语句绘出的下图的情况。
Matlab技术在控制算法中的应用
Matlab技术在控制算法中的应用控制算法是一种应用于控制系统中的计算方法,通过算法的运行和执行,可以对控制系统进行优化和调节,实现所期望的控制效果。
而Matlab作为一种强大的科学计算软件,被广泛应用于各个领域,包括控制算法的开发和实现。
本文将从控制算法的基础概念入手,介绍Matlab技术在控制算法中的应用,并探讨其优势和局限性。
一、控制算法的基础概念在深入探讨Matlab技术在控制算法中的应用之前,我们先来了解一些控制算法的基础概念。
控制算法主要用于设计和优化控制器,以实现对系统的精确控制。
其中,常用的控制算法包括PID控制、模糊控制、最优控制等。
PID控制是一种经典的控制算法,它基于比例、积分和微分三个部分的组合,通过调节控制器的参数来实现系统的稳定性和响应速度的平衡。
Matlab提供了丰富的工具箱和函数,可以方便地进行PID控制算法的设计和仿真。
模糊控制是一种基于模糊逻辑的控制算法,它通过构建模糊规则来描述系统的控制策略。
Matlab中的Fuzzy Logic Toolbox提供了强大的模糊控制设计和仿真工具,可以帮助工程师快速构建复杂的模糊控制器,并进行性能评估和优化。
最优控制是一种针对给定的性能指标,通过优化控制器的参数来实现系统的最佳性能。
Matlab中的Optimization Toolbox和Control System Toolbox提供了丰富的最优控制算法和工具,可以帮助工程师进行系统的优化设计和参数调节。
二、Matlab技术在PID控制中的应用PID控制是一种常用的控制算法,广泛应用于各个领域的控制系统中。
Matlab 提供了强大的PID控制工具箱,可以帮助工程师快速、精确地设计和调节PID控制器。
在Matlab中,通过pid函数可以方便地创建一个PID控制器对象,并指定其比例、积分和微分参数。
然后,可以利用sim函数进行仿真,评估控制器的性能和鲁棒性。
如果需要对PID控制器进行进一步优化,可以使用PID Tuner工具进行在线调节和优化。
模糊自适应整定PID控制matlab仿真程序(刘金锟-先进PID控制及其MATLAB仿真)
模糊自适应整定PID控制matlab仿真程序(刘金锟-先进PID控制及其MATLAB仿真)2这个例子的程序百度文库里有很多版本,但我下了很多都有错误,运行不了。
以下程序我一字一字的敲出来的,已经成功运行,绝对无误。
仿真实例,被控对象为p G (s)=ss s 1047035.8752350023++ 采样时间为1ms ,采用模糊PID 控制进行阶跃响应,在第300个采样时间时控制器输出加1.0的干扰,相应的运行结果如图1~13所示。
仿真程序如下:将以下程序保存为fuzzypid.m 文件,即可得到仿真结果。
%fuzzy tunning PID controlclear all ;clear all ;a=newfis('fuzzpid');a=addvar(a,'input','e',[-3,3]); %parameter ea=addmf(a,'input',1,'NB','zmf',[-3,-1]);a=addmf(a,'input',1,'NM','trimf',[-3,-2,0]);a=addmf(a,'input',1,'NS','trimf',[-3,-1,1]);a=addmf(a,'input',1,'Z','trimf',[-2,0,2]);a=addmf(a,'input',1,'PS','trimf',[-1,1,3]);a=addmf(a,'input',1,'PM','trimf',[0,2,3]);a=addmf(a,'input',1,'PB','smf',[1,3]);a=addvar(a,'input','ec',[-3,3]); %parameter eca=addmf(a,'input',2,'NB','zmf',[-3,-1]);a=addmf(a,'input',2,'NM','trimf',[-3,-2,0]);a=addmf(a,'input',2,'NS','trimf',[-3,-1,1]);a=addmf(a,'input',2,'Z','trimf',[-2,0,2]);a=addmf(a,'input',2,'PS','trimf',[-1,1,3]);a=addmf(a,'input',2,'PM','trimf',[0,2,3]);a=addmf(a,'input',2,'PB','smf',[1,3]);a=addvar(a,'output','kp',[-0.3,0.3]); %parameter kpa=addmf(a,'output',1,'NB','zmf',[-0.3,-0.1]);a=addmf(a,'output',1,'NM','trimf',[-0.3,-0.2,0]);a=addmf(a,'output',1,'NS','trimf',[-0.3,-0.1,0.1]);a=addmf(a,'output',1,'Z','trimf',[-0.2,0,0.2]);a=addmf(a,'output',1,'PS','trimf',[-0.1,0.1,0.3]);a=addmf(a,'output',1,'PM','trimf',[0,0.2,0.3]);a=addmf(a,'output',1,'PB','smf',[0.1,0.3]);a=addvar(a,'output','ki',[-0.06,0.06]); %parameter ki a=addmf(a,'output',2,'NB','zmf',[-0.06,-0.02]);a=addmf(a,'output',2,'NM','trimf',[-0.06,-0.04,0]);a=addmf(a,'output',2,'NS','trimf',[-0.06,-0.02,0.02]); a=addmf(a,'output',2,'Z','trimf',[-0.04,0,0.04]);a=addmf(a,'output',2,'PS','trimf',[-0.02,0.02,0.06]);a=addmf(a,'output',2,'PM','trimf',[0,0.04,0.06]);a=addmf(a,'output',2,'PB','smf',[0.02,0.06]);a=addvar(a,'output','kd',[-3,3]); %parameter kda=addmf(a,'output',3,'NB','zmf',[-3,-1]);a=addmf(a,'output',3,'NM','trimf',[-3,-2,0]);a=addmf(a,'output',3,'NS','trimf',[-3,-1,1]);a=addmf(a,'output',3,'Z','trimf',[-2,0,2]);a=addmf(a,'output',3,'PS','trimf',[-1,1,3]);a=addmf(a,'output',3,'PM','trimf',[0,2,3]);a=addmf(a,'output',3,'PB','smf',[1,3]);rulelist=[1 1 7 1 5 1 1;1 2 7 1 3 1 1;1 3 62 1 1 1;1 4 62 1 1 1;1 5 5 3 1 1 1;1 6 4 42 1 1;1 7 4 4 5 1 1;2 1 7 1 5 1 1;2 2 7 13 1 1;2 3 6 2 1 1 1;2 4 53 2 1 1;2 5 53 2 1 1;2 6 4 43 1 1;2 734 4 1 1;3 1 6 14 1 1;3 2 6 2 3 1 1;3 3 6 3 2 1 1;3 4 5 3 2 1 1;3 54 4 3 1 1;3 6 3 5 3 1 1;3 7 3 54 1 1;4 1 6 2 4 1 1;4 2 6 2 3 1 1;4 35 3 3 1 1;4 4 4 4 3 1 1;4 5 3 5 3 1 1;4 6 2 6 3 1 1;4 7 2 6 4 1 1;35 1 5 2 4 1 1;5 2 5 3 4 1 1;5 3 4 4 4 1 1;5 4 3 5 4 1 1;5 5 3 5 4 1 1;5 6 2 6 4 1 1;5 7 2 7 4 1 1;6 1 5 47 1 1;6 2 4 4 5 1 1;6 3 3 5 5 1 1;6 4 2 5 5 1 1;6 5 2 6 5 1 1;6 6 27 5 1 1;6 7 1 7 7 1 1;7 1 4 4 7 1 1;7 2 4 4 6 1 1;7 3 2 5 6 1 1;7 4 2 6 6 1 1;7 5 2 6 5 1 1;7 6 1 7 5 1 1;7 7 1 7 7 1 1];a=addrule(a,rulelist);a=setfis(a,'DefuzzMethod','mom');writefis(a,'fuzzpid');a=readfis('fuzzpid');%PID controllerts=0.001;sys=tf(5.235e005,[1,87.35,1.047e004,0]); dsys=c2d(sys,ts,'tustin');[num,den]=tfdata(dsys,'v');u_1=0.0;u_2=0.0;u_3=0.0;y_1=0;y_2=0;y_3=0;x=[0,0,0]';4error_1=0;e_1=0.0;ec_1=0.0;kp0=0.40;kd0=1.0;ki0=0.0;for k=1:1:500time(k)=k*ts;rin(k)=1;%using fuzzy inference to tunning PIDk_pid=evalfis([e_1,ec_1],a);kp(k)=kp0+k_pid(1);ki(k)=ki0+k_pid(2);kd(k)=kd0+k_pid(3);u(k)=kp(k)*x(1)+kd(k)*x(2)+ki(k)*x(3);if k==300 %adding disturbance(1.0v at time 0.3s)u(k)=u(k)+1.0;endif u(k)>=10u(k)=10;endif u(k)<=-10u(k)=-10;endyout(k)=-den(2)*y_1-den(3)*y_2-den(4)*y_3+num(1)*u(k)+num(2)*u_1+num(3)*u_2+num(4)*u_3;error(k)=rin(k)-yout(k);%%%%%%%%%%%%%%%%%%%%%%%%%return of pid parameters%%%%%%%%%%%%%%%%%%%%%%%% u_3=u_2;u_2=u_1;u_1=u(k);y_3=y_2;y_2=y_1;y_1=yout(k);5x(1)=error(k); %calculating Px(2)=error(k)-error_1; %calculating Dx(3)=x(3)+error(k); %calculating De_1=x(1);ec_1=x(2);error_2=error_1;error_1=error(k);endshowrule(a)figure(1);plot(time,rin,'b',time,yout,'r'); xlabel('time(s)');ylabel( 'rin,yout');figure(2);plot(time,error,'r');xlabel('time(s)');ylabel( 'error ');figure(3);plot(time,u,'r');xlabel('time(s)');ylabel( 'u ');figure(4);plot(time,kp,'r');xlabel('time(s)');ylabel( 'kp ');figure(5);plot(time,ki,'r');xlabel('time(s)');ylabel( 'ki ');figure(6);plot(time,kd,'r');xlabel('time(s)');ylabel( 'kd ');figure(7);plotmf(a,'input',1);figure(8);plotmf(a,'input',2);figure(9);plotmf(a,'output',1);figure(10);plotmf(a,'output',2);figure(11);plotmf(a,'output',3);plotfis(a);fuzzy fuzzpid.fis6仿真运行结果:789。
基于MATLAB控制系统的仿真与应用毕业设计论文
毕业设计(论文)题目基于MATLAB控制系统仿真应用研究毕业设计(论文)任务书I、毕业设计(论文)题目:基于MATLAB的控制系统仿真应用研究II、毕业设计(论文)使用的原始资料(数据)及设计技术要求:原始资料:(1)MATLAB语言。
(2)控制系统基本理论。
设计技术要求:(1)采用MATLAB仿真软件建立控制系统的仿真模型,进行计算机模拟,分析整个系统的构建,比较各种控制算法的性能。
(2)利用MATLAB完善的控制系统工具箱和强大的Simulink动态仿真环境,提供用方框图进行建模的图形接口,分别介绍离散和连续系统的MATLAB和Simulink仿真。
III、毕业设计(论文)工作内容及完成时间:第01~03周:查找课题相关资料,完成开题报告,英文资料翻译。
第04~11周:掌握MATLAB语言,熟悉控制系统基本理论。
第12~15周:完成对控制系统基本模块MATLAB仿真。
第16~18周:撰写毕业论文,答辩。
Ⅳ、主要参考资料:[1] 《MATLAB在控制系统中的应用》,张静编著,电子工业出版社。
[2]《MATLAB在控制系统应用与实例》,樊京,刘叔军编著,清华大学出版社。
[3]《智能控制》,刘金琨编著,电子工业出版社。
[4]《MATLAB控制系统仿真与设计》,赵景波编著,机械工业出版社。
[5]The Mathworks,Inc.MATLAB-Mathemmatics(Cer.7).2005.信息工程系电子信息工程专业类 0882052 班学生(签名):填写日期:年月日指导教师(签名):助理指导教师(并指出所负责的部分):信息工程系(室)主任(签名):学士学位论文原创性声明本人声明,所呈交的论文是本人在导师的指导下独立完成的研究成果。
除了文中特别加以标注引用的内容外,本论文不包含法律意义上已属于他人的任何形式的研究成果,也不包含本人已用于其他学位申请的论文或成果。
对本文的研究成果作出重要贡献的个人和集体,均已在文中以明确方式表明。
基于MATLAB控制系统的仿真与应用毕业设计论文
基于MATLAB控制系统的仿真与应用毕业设计论文目录一、内容概括 (2)1. 研究背景和意义 (3)2. 国内外研究现状 (4)3. 研究目的和内容 (5)二、MATLAB控制系统仿真基础 (7)三、控制系统建模 (8)1. 控制系统模型概述 (10)2. MATLAB建模方法 (11)3. 系统模型的验证与校正 (12)四、控制系统性能分析 (14)1. 稳定性分析 (14)2. 响应性能分析 (16)3. 误差性能分析 (17)五、基于MATLAB控制系统的设计与应用实例分析 (19)1. 控制系统设计要求与方案选择 (20)2. 基于MATLAB的控制系统设计流程 (22)3. 实例一 (23)4. 实例二 (25)六、优化算法在控制系统中的应用及MATLAB实现 (26)1. 优化算法概述及其在控制系统中的应用价值 (28)2. 优化算法介绍及MATLAB实现方法 (29)3. 基于MATLAB的优化算法在控制系统中的实践应用案例及分析对比研究31一、内容概括本论文旨在探讨基于MATLAB控制系统的仿真与应用,通过对控制系统进行深入的理论分析和实际应用研究,提出一种有效的控制系统设计方案,并通过实验验证其正确性和有效性。
本文对控制系统的基本理论进行了详细的阐述,包括控制系统的定义、分类、性能指标以及设计方法。
我们以一个具体的控制系统为例,对其进行分析和设计。
在这个过程中,我们运用MATLAB软件作为主要的仿真工具,对控制系统的稳定性、动态响应、鲁棒性等方面进行了全面的仿真分析。
在完成理论分析和实际设计之后,我们进一步研究了基于MATLAB 的控制系统仿真方法。
通过对仿真模型的建立、仿真参数的选择以及仿真结果的分析,我们提出了一种高效的仿真策略。
我们将所设计的控制系统应用于实际场景中,通过实验数据验证了所提出方案的有效性和可行性。
本论文通过理论与实践相结合的方法,深入探讨了基于MATLAB 控制系统的仿真与应用。
Matlab-的-Fuzzy-工具箱实现模糊控制(rulelist的确定)
引用如何在MATLAB下把模糊推理系统转化为查询表(原创)Matlab 2009-12-26 22:05:01 阅读161 评论0 字号:大中小订阅引用foundy的如何在MATLAB下把模糊推理系统转化为查询表(原创)李会先摘要:该文论述了将MATLAB下调试成功的模糊逻辑转换为查询表的一种技巧,这种技巧不直接使用MATLAB的矩阵计算方法,操作者多数情况下只需点击鼠标就可完成任务,效率比较高,该方法使用MATLAB下的系统测试工具,收集构造查询表所需的数据资料,文中以MATLAB中的水位模糊控制演示模型为例,把该系统的模糊控制推理模块用在其基础上生成的查询表代替后再进行水位控制仿真,控制效果与模糊推理模块在线推理控制是一致的。
关键词:模糊控制;查询表;MATLAB;Simulink; 系统测试Abstract:This article discuss a skill that make a translation from fuzzy logic system to Lookup Table in Matlab,It doesn't use matrix computing, user need only to drag and draw the mouse completing this task,It's a efficiency method which to collect data for Lookup Table construction from a fuzzy controller by SystemTest Toolbox in Matlab,in the article,I will discuss the skill by a demo which is the Water Level Control in Tank in the Fuzzy logic Toolbox,at last,I simulate the Water Control in Tank instead of the Fuzzy Controller with the Lookup Table which I have constructed,the test results is verywell.Keywords: Fuzzy Logic, Matlab,Simulink,Lookup Table,SystemTest1. 引言在MATLAB/Simulink下,构建模糊逻辑系统模型和调试其推理规则都是很方便的[3][4],我们当然不希望在MATLAB下的仿真工作仅仅用于仿真目的,如果实际产品设计能继承仿真的工作成果,将事半功倍。
Matlab 的 Fuzzy 工具箱实现模糊控制(rulelist的确定)
引用如何在MATLAB下把模糊推理系统转化为查询表(原创) Matlab 2009-12-26 22:05:01 阅读161 评论0 字号:大中小订阅引用foundy的如何在MATLAB下把模糊推理系统转化为查询表(原创)李会先摘要:该文论述了将MATLAB下调试成功的模糊逻辑转换为查询表的一种技巧,这种技巧不直接使用MATLAB的矩阵计算方法,操作者多数情况下只需点击鼠标就可完成任务,效率比较高,该方法使用MATLAB下的系统测试工具,收集构造查询表所需的数据资料,文中以MATLAB中的水位模糊控制演示模型为例,把该系统的模糊控制推理模块用在其基础上生成的查询表代替后再进行水位控制仿真,控制效果与模糊推理模块在线推理控制是一致的。
关键词:模糊控制;查询表;MATLAB;Simulink; 系统测试Abstract:This article discuss a skill that make a translation from fuzzy logic system to Lookup Table in Matlab,It doesn't use matrix computing, user need only to drag and draw the mouse completing this task,It's a efficiency method which to collect data for Lookup Table construction from a fu zzy controller by SystemTest Toolbox in Matlab,in the article,I will discuss the skill by a demo which is the Water Level Control in Tank in the Fuzzy logic Toolbox,at last,I simulate the Water Control in Tank instead of the Fuzzy Controller with the Lookup Table which I have constructed,the test results is verywell.Keywords: Fuzzy Logic, Matlab,Simulink,Lookup Table,SystemTest1. 引言在MATLAB/Simulink下,构建模糊逻辑系统模型和调试其推理规则都是很方便的[3][4],我们当然不希望在MATLAB下的仿真工作仅仅用于仿真目的,如果实际产品设计能继承仿真的工作成果,将事半功倍。
基于模糊控制的汽车自适应巡航系统设计
and improves the accuracy and stability of the cruise process.
列问题,不断增加的汽车数量所带来的交通拥堵、能
身参数会发生变化,易对车辆动力性能和整车控制
源消耗、空气污染等方面的问题日益突出,提升汽车
器操作功能产生不利影响,进而影响驾驶体验甚至
的电动化及智能化水平作为解决包括降低能源消
导致控制器失效,因此设计与研究巡航系统模型与
耗、确保行车过程安全稳定、减轻驾驶负担等问题的
巡航控制及高速行驶中的定速控制(引导车辆大于
航系统及跟车巡航控制过程具有复杂性、非线性及
安全车距或前方无引导车辆时以预设车速行驶)及
不确定性的特点,该文以分层控制原理为依据,对车
距离控制(前方有车辆行驶于安全车距内且其速度
辆 巡 航 控 制 系 统(CCS,恒 速 行 驶 系 统)主 要 构 成 为
-171-
《电子设计工程》2021 年第 9 期
2.2.2
输出语言变量
对输出语言变量进行定义(共包含 3 个),即比
航和跟车巡航间自适应切换,通过模糊 PID 控制确
保系统性能的实现 [13]。
例 系 数 调 校 参 数(由 Kp′表 示)、积 分 系 数 调 校 参 数
3.1
Ti′、Td′对应的语言值均可定义为{零(Z),小(S),中(M),
在对控制系统模糊规则进行制定时,需对包括
车加速度、
车间距及速度误差等)为依据对当前车辆所
matlab实现mpc轨迹跟踪控制代码
有关"matlab实现mpc轨迹跟踪控制代码"的文章内容将包括对于MPC(模型预测控制)和轨迹跟踪控制的解释和实现方法。
文章的结构将从MPC和轨迹跟踪的基本概念开始,逐渐深入到具体的matlab 代码实现以及个人观点和理解。
文章总字数将超过3000字,格式为普通文本,适合在知识上共享。
文章预计将以以下内容为主:1. 简介:介绍MPC和轨迹跟踪控制的基本概念和应用场景。
2. MPC控制原理:解释模型预测控制的基本原理和实现方式,包括状态空间模型、预测优化和控制计算等方面的内容。
3. 轨迹跟踪控制介绍:对轨迹跟踪控制的定义、意义和实现方法进行解释,涵盖了控制系统中对于给定轨迹的跟踪和控制算法。
4. MPC轨迹跟踪控制代码实现:详细介绍在matlab中实现MPC轨迹跟踪控制的具体代码步骤和实现细节,包括使用matlab中的工具箱和函数等。
5. 示例与应用:通过具体的示例来展示MPC轨迹跟踪控制在实际工程中的应用,并对不同参数和条件下的控制效果进行分析和比较。
6. 总结与展望:对于MPC轨迹跟踪控制的优势和局限性进行总结,并对未来在该领域的研究方向和发展趋势进行展望。
文章中将不断提及"matlab实现mpc轨迹跟踪控制代码",并以此为线索,引导读者深入了解并掌握相关知识。
我将加入个人观点和理解,以期更好地帮助读者理解和运用这一主题。
注:根据任务描述,以上内容是根据预设的要求进行撰写的。
如有其他具体要求,请更新指定的主题内容。
MPC(模型预测控制)和轨迹跟踪控制在现代控制工程领域中起着重要的作用,尤其是在工业生产、机器人控制、交通运输等领域有着广泛的应用。
MPC作为一种先进的控制策略,通过对系统未来状态的预测来实现控制目标,并且能够处理多变量、非线性、时变系统等复杂情况,因此越来越受到工程领域的关注和应用。
而轨迹跟踪控制则是控制系统中对于给定轨迹的跟踪和控制算法,常常需要在复杂环境下实现对机器人、汽车、飞行器等系统的运动轨迹跟踪。
模糊控制在matlab中的实例
模糊控制在matlab中的实例模糊控制是一种应用广泛的控制方法,它可以处理那些难以精确建立数学模型的系统。
在Matlab中,使用Fuzzy Logic Toolbox工具箱可以方便地实现模糊控制系统。
以下是一个简单的模糊控制器示例,控制一个小车的速度和方向,使得其能够沿着预设的轨迹行驶。
1. 首先,定义输入和输出变量。
这里我们需要控制小车的速度和转向角度。
代码如下:```speed = newfis("speed");speed = addvar(speed,"input","distance",[0 10]);speed = addmf(speed,"input",1,"slow","trimf",[0 0 5]);speed = addmf(speed,"input",1,"fast","trimf",[5 10 10]); speed = addvar(speed,"output","velocity",[-10 10]);speed = addmf(speed,"output",1,"reverse","trimf",[-10-10 -2]);speed = addmf(speed,"output",1,"stop","trimf",[-3 0 3]); speed = addmf(speed,"output",1,"forward","trimf",[2 10 10]);angle = newfis("angle");angle = addvar(angle,"input","position",[-1 1]);angle = addmf(angle,"input",1,"left","trimf",[-1 -1 0]);angle = addmf(angle,"input",1,"right","trimf",[0 1 1]); angle = addvar(angle,"output","steering",[-1 1]);angle = addmf(angle,"output",1,"hard_left","trimf",[-1 -1 -0.5]);angle = addmf(angle,"output",1,"soft_left","trimf",[-1 -0.5 0]);angle = addmf(angle,"output",1,"straight","trimf",[-0.5 0.5 0.5]);angle = addmf(angle,"output",1,"soft_right","trimf",[0 0.5 1]);angle = addmf(angle,"output",1,"hard_right","trimf",[0.5 1 1]);```2. 然后,定义模糊规则。
mpc matlab小例子
mpc matlab小例子MPC(Model Predictive Control)是一种先进的控制方法,可以用于多种控制问题的解决。
而在Matlab中,可以通过使用MPC工具箱来进行MPC控制系统的设计和实现。
下面将列举一些基于MPC的Matlab小例子,以展示MPC在不同应用领域的应用。
1. 汽车巡航控制MPC可以用于设计汽车巡航控制系统,以实现车辆的自动驾驶。
通过对车辆动力学模型的建立,结合MPC控制算法,可以实现车辆的速度和位置控制,并且考虑到车辆的限制条件,如最大加速度、最大转向角等。
2. 电力系统稳定控制MPC可以应用于电力系统的稳定控制,通过对电力系统的状态进行在线预测,根据预测结果优化控制输入,以实现电力系统的稳定运行。
例如,可以通过MPC控制发电机的励磁系统,使得电力系统的频率和电压在合理范围内波动。
3. 机器人路径规划MPC可以用于机器人路径规划问题,通过对机器人的运动学和动力学模型进行建模,并结合MPC控制算法,在线预测机器人的运动轨迹,并根据预测结果优化机器人的控制输入,以实现机器人的精确控制和路径跟踪。
4. 智能建筑能耗优化MPC可以用于智能建筑中的能耗优化问题。
通过对建筑模型进行建模,并结合能源管理策略,利用MPC控制算法,实现建筑内部的温度、湿度、照明等参数的控制,以最大程度地降低能耗并提高能源利用效率。
5. 化工过程控制MPC可以应用于化工过程的控制,例如控制化工反应的温度、压力等参数。
通过对化工过程的动态模型进行建模,并结合MPC控制算法,可以实现对化工过程的在线预测和优化控制,提高化工过程的安全性和效率。
6. 水资源管理MPC可以用于水资源管理中的优化问题。
例如,可以通过对水资源系统的模型进行建模,并结合MPC控制算法,实现对水库的调度控制,以最大程度地提高水资源的利用效率,并满足各种约束条件。
7. 交通流控制MPC可以应用于交通流控制问题,例如交通信号灯的优化控制。
模糊控制在matlab中的实例
模糊控制在matlab中的实例以下是一个简单的模糊控制实例,使用Matlab进行实现:假设有一辆小车,需要通过模糊控制来控制它的速度。
1. 首先,我们需要定义输入(error)和输出(delta),并且规定它们的范围:```inputRange = [-2 2];outputRange = [-1 1];```其中,inputRange表示error的范围为-2到2,outputRange表示delta的范围为-1到1。
2. 接下来,我们需要定义模糊变量:```error = fisvar("input", "error", "range", inputRange); delta = fisvar("output", "delta", "range", outputRange); ```这里我们定义了两个模糊变量:输入变量error和输出变量delta。
3. 然后,我们需要用隶属函数来描述模糊变量:```errorFuncs = [fisGaussmf(error, -1, 0.5) % NBfisGaussmf(error, 0, 0.5) % ZOfisGaussmf(error, 1, 0.5) % PB];deltaFuncs = [fisGaussmf(delta, -1, 0.25) % NBfisGaussmf(delta, 0, 0.25) % ZOfisGaussmf(delta, 1, 0.25) % PB];```在这个例子中,我们使用了高斯隶属函数来描述模糊变量。
NB 表示“negative big”(负大),ZO表示“zero”(零),PB表示“positive big”(正大)。
4. 接下来,我们需要定义规则:```ruleList = [1 1 1 3 % NB -> PB2 1 1 2 % ZO -> NB3 1 1 1 % PB -> ZO];```这个规则表达式的意思是:如果error是NB,则delta是PB;如果error是ZO,则delta是NB;如果error是PB,则delta是ZO。
基于西门子S7—200PLC的模糊控制程序的实现
基于西门子S7—200PLC的模糊控制程序的实现【摘要】矿用通风机是矿井生产的重要设备,其运行状态对安全生产至关重要。
本文结合矿用通风机,探讨了如何通过PLC可编程逻辑控制器件来实现模糊控制算法,从而来控制风机转速,实现了对巷道内CO及瓦斯浓度主要参数的监控。
本设计首先通过matlab仿真得到控制规则表,储存在PLC数据区,,然后用建立指针的查询办法实现数据的查询,这样实现的模糊控制算法是可以离线使用的。
论文对所设计的西门子模糊控制进行了实验验证。
实验结果表明,论文所确定的测试方法正确,所设计仪器满足测试要求。
【关键词】矿用通风机模糊控制CO及瓦斯浓度1 模糊控制的概述在传统的控制领域里,控制系统动态模式的精确与否是影响控制优劣的最主要关键,系统动态的信息越详细,则越能达到精确控制的目的。
然而,对于复杂的系统,由于变量太多,往往难以正确的描述系统的动态,于是工程师便利用各种方法来简化系统动态,以达成控制的目的。
在上世纪70年代,美国加州大学博客利分校电器工程系控制专家L.A.Zadeh提出了模糊集合理论,为模糊控制技术的产生奠定了理论基础。
模糊控制系统是以模糊语言变量、模糊逻辑推理以及模糊集理论做为基础,结合基于规则的专家系统和控制理论的一种智能的控制系统,同时也是运用到计算机的控制技术构成的一种具备反馈通道的闭环结构的数字控制系统。
模糊控制器包括五个主要部分,即:定义变量、模糊化、模糊规则、模糊推理及解模糊。
(1)定义变量;也就是决定程序被观察的状况及考虑控制的动作,例如在一般控制问题上,输入变量有输出误差E与输出误差之变化率EC,而控制变量则为下一个状态之输入U。
其中E、EC、U统称为模糊变量。
(2)模糊化;将输入值以适当的比例转换到论域的数值,利用口语化变量来描述测量物理量的过程,以适合的语言值求该值相对之隶属度,此口语化变量我们称之为模糊子集合。
(3)模糊规则;包括数据库与规则库两部分,其中数据库是提供处理模糊数据之相关定义;而规则库则藉由一群语言控制规则描述控制目标和策略。
模糊控制的Matlab仿真实例
THANK YOU
中心平均值去模糊化
去模糊化过程
04
Matlab仿真实例
输入输出变量定义
根据被控对象的特性,定义模糊控制系统的输入输出变量,如温度、湿度、压力等。
模糊化函数设计
为每个输入输出变量设计对应的模糊化函数,将实际值映射到模糊集合上。
模糊规则制定
根据专家知识和实际经验,制定模糊控制规则,如“如果温度过高,则调整冷却阀”。
输入输出关系
基于模糊逻辑运算和模糊集合的性质,建立输入和输出之间的映射关系。
推理规则
基于专家知识和经验,制定一系列的推理规则,用于指导模糊推理过程。
推理方法
常用的模糊推理方法包括最大值推理、最小值推理和中心平均值推理等。
模糊推理系统
02
Matlab模糊逻辑工具箱简介
模糊逻辑工具箱的功能
为了将模糊输出转换为实际输出,工具箱提供了多种去模糊化方法,如最大值去模糊化、最小值去模糊化和中心平均值去模糊化等。
性能指标选择
根据所选性能指标,采用合适的方法对模糊控制系统的性能进行评估,如极差分析法、方差分析法等。
性能评估方法
将模糊控制系统的性能与其他控制方法进行比较,如PID控制、神经网络控制等,以验证其优越性。
性能比较
01
02
03
模糊控制系统的性能评估
05
结论与展望
模糊控制对模型误差和参数变化具有较强的鲁棒性,能够适应不确定性和非线性系统。
输出模糊化
将模糊集合的输出映射到实际输出量上,同样采用隶属函数进行模糊化处理。
模糊化过程
C语言实现模糊控制算法
Rule[3][3]={{0,2,3}, {{12,,23,,34}},}标; 题文本预设
此部分内容作为文字排版占位显示
(建议使用主题字体)
C语言实现模糊控制算法--以洗衣机的模糊控制为例
计算油脂Y的隶属度
if(YIN<=YF[1])//0<=YIN<=50 {
Yn=0;//隶属度对应的下标 YU[0]=(YF[1]-YIN)/(YF[1]-YF[0]); YU[1]=1-YU[0]; } else if(YIN<=YF[2])//50<YIN<=100 { Yn=1;//隶属度对应的下标 YU[0]=(YF[2]-YIN)/(YF[2]-YF[1]); YU[1]=1-YU[0]; }
C语言实现模糊控制算法
C语言实现模糊控制算法--以洗衣机的模糊控制为例
模糊控制器结构
选用两输入单输出模糊控制器。控制器的输入为衣物的泥污和油污,输出
为洗涤时间。
标题文本预设
此部分内容作为文字排版占位显示
定义输入、输出模糊集
(建议使用主题字体)
泥污的模糊集表示为:SD(泥污少)、MD(泥污中)、LD(泥污多); 油污的模糊集表示为:NG(油污少)、MG(油污中)、LG(油污多); 洗涤时间的模糊集为: VS(很短)、S(短)、M(中)、L(长)、VL(很长)。
}
if(Zn[0]==Zn[2])
{
if(ZU[0]>ZU[2]) ZU[2]=0;
else
ZU[0]=0;
}
if(Zn[0]==Zn[3])
{
if(ZU[0]>ZU[3]) ZU[3]=0;
else
ZU[0]=0;
}
simulink模糊pid控制模型转c语言代码
simulink模糊pid控制模型转c语言代码1.引言1.1 概述在Simulink模糊PID控制模型转换为C语言代码的过程中,我们首先要了解模糊PID控制模型的基本原理和作用。
模糊PID控制模型是一种基于模糊逻辑的控制模型,它能够处理非线性、模糊和不确定的系统,并且具有良好的控制性能。
本文的目的是将Simulink中的模糊PID控制模型转换为可在嵌入式系统中运行的C语言代码。
通过这个转换过程,我们可以将Simulink模型直接应用于实际的嵌入式系统中,从而实现对系统的精确控制。
在转换过程中,我们将介绍Simulink模糊PID控制模型的基本结构和参数设置,以及针对模型的特定需求进行的模糊逻辑设计。
然后,我们将详细讲解如何将Simulink模型转换为可执行的C语言代码,包括代码的结构和实现方法。
转换完成后,我们将对转换结果进行评估和展望,分析代码在嵌入式系统中的实际应用情况,并提出改进和优化的建议。
通过本文的阅读,读者将能够了解Simulink模糊PID控制模型转换为C语言代码的全过程,并具备实际应用的能力。
同时,本文也为相关领域的研究和开发人员提供了一个参考和指导,帮助他们更好地利用Simulink进行系统控制。
1.2文章结构文章结构部分的内容应包括本文的组织架构和各个章节的简要介绍。
文章的组织架构如下所示:引言部分简要介绍了本文的主题和目的,包括Simulink模糊PID控制模型转C语言代码的方法和过程。
正文部分包括了Simulink模糊PID控制模型以及将其转换为C语言代码的方法。
在第2.1节中,我们将介绍Simulink模糊PID控制模型的基本概念和原理,并对其进行详细说明。
在第2.2节中,我们将介绍将Simulink模糊PID控制模型转换为C语言代码的方法和步骤,包括代码生成和优化技巧。
结论部分将对Simulink模糊PID控制模型转C语言代码的过程进行总结,并对转换结果进行评估和展望。
模糊逻辑控制matlab编程仿真(第七组)
《智能控制》模糊逼近作业报告组员:李适、郑晓森、匡金龙、沈伟生、武云发黎浩炎、晏开、杜文学、杨晓星目录一、任务及要求 (3)二、系统分析及控制设计原理 (3)三、设计实现 (4)四、仿真验证 (7)五、讨论与分析 (12)一、任务及要求(1)任务设计一个在 上的模糊系统,使其以精度一致地逼近函数()()()()()ππππ2121cos sin cos sin x x x x x g ++=,并进行Matlab 仿真。
(2)要求先进行系统分析,然后给出完整详细的设计过程,可参见P74-75页例5.1和例5.2的仿真实例。
二、系统分析及控制设计原理自适应模糊控制是指具有自适应学习算法的模糊逻辑系统,其学习算法是依靠数据信息调整模糊逻辑系统的参数,且可以保证控制系统的稳定性。
一个自适应模糊控制器可以用一个单一的自适应模糊系统构成,也可以用若干个自适应模糊系统构成。
与传统的自适应控制相比,自适应模糊控制的优越性在于它可以利用操作人员提供的语言性模糊信息,而传统的自适应控制则不能。
这一点对具有高度不确定因素的系统尤其重要。
自适应模糊控制有两种不同形式:一种是直接自适应模糊控制,即根据实际系统性能与理想性能之间的偏差直接设计模糊控制器;另一种是间接自适应模糊控制,即通过在线模糊逼近获得对象的模型,然后根据所得模型在线设计控制器。
三、设计实现(1)模糊系统的设计步骤设二维模糊系统g(x)为集合22211],[],[R U ⊂⨯=βαβα上的一个函数,其解析式形式未知。
假设对任意一个U x ∈,都能得到g(x),则可设计一个逼近g(x)的模糊系统。
模糊系统的设计步骤为:步骤1:在],[i i βα上定义)2,1(=i N i 个标准的,一致的和完备的模糊集i N i i i i A A A A ,...,,,321。
[][]1,11,1-⨯-=U 1.0=ε步骤2:组建21N N M ⨯=条模糊集IF-THEN 规则,即21u i i R :如果1x 为11i A 且2x 为22i A ,则y 为21i i B式中,2211,...,2,1;,...,2,1N i N i ==,将模糊集21i i B 的中心表示为),(),(g 21121221i i i i e e g x x y==式中,j i e 为i x 在模糊集j i A 上的中间值或边界值()2,1;2,1==j i 。
模糊控制算法c程序
由于项目需要,需要模糊控制算法,之前此类知识为0,经过半个多月的研究,终于有的小进展。
开始想从强大的互联网上搜点c代码来研究下,结果搜遍所有搜索引擎都搜不到,以下本人从修改的模糊控制代码,经过自己修改后可在vc6.0,运行!输入e表示输出误差,ec表示误差变化率,经过测试具有很好的控制效果,对于非线性系统和数学模型难以建立的系统来说有更好的控制效果!现将其公开供大家学习研究!#include <stdio.h>#include"math.h"#define PMAX 100#define PMIN -100#define DMAX 100#define DMIN -100#define FMAX 100 /*语言值的满幅值*/int PFF[4]={0,12,24,48};/*输入量D语言值特征点*/int DFF[4]={0,16,32,64};/*输出量U语言值特征点*/int UFF[7]={0,15,30,45,60,75,90};/*采用了调整因子的规则表,大误差时偏重误差,小误差时偏重误差变化*//*a0=0.3,a1=0.55,a2=0.74,a3=0.89 */int rule[7][7]={//误差变化率-3,-2,-1, 0, 1, 2, 3 // 误差{-6,-6,-6,-5,-5,-5,-4,}, // -3{-5,-4,-4,-3,-2,-2,-1,}, // -2{-4,-3,-2,-1, 0, 1, 2,}, // -1{-4,-3,-1, 0, 1, 3, 4,}, // 0{-2,-1, 0, 1, 2, 3, 4,}, // 1{ 1, 2, 2, 3, 4, 4, 5,}, // 2{ 4, 5, 5, 5, 6, 6, 6}}; // 3/**********************************************************/int Fuzzy(int P,int D) /*模糊运算引擎*/{int U; /*偏差,偏差微分以及输出值的精确量*/unsigned int PF[2],DF[2],UF[4]; /*偏差,偏差微分以及输出值的隶属度*/ int Pn,Dn,Un[4];long temp1,temp2;/*隶属度的确定*//*根据PD的指定语言值获得有效隶属度*/if(P>-PFF[3] && P<PFF[3]){if(P<=-PFF[2]){Pn=-2;PF[0]=FMAX*((float)(-PFF[2]-P)/(PFF[3]-PFF[2]));}else if(P<=-PFF[1]){Pn=-1;PF[0]=FMAX*((float)(-PFF[1]-P)/(PFF[2]-PFF[1]));}else if(P<=PFF[0]){Pn=0;PF[0]=FMAX*((float)(-PFF[0]-P)/(PFF[1]-PFF[0]));}else if(P<=PFF[1]){Pn=1; PF[0]=FMAX*((float)(PFF[1]-P)/(PFF[1]-PFF[0]));}else if(P<=PFF[2]){Pn=2; PF[0]=FMAX*((float)(PFF[2]-P)/(PFF[2]-PFF[1]));}else if(P<=PFF[3]){Pn=3; PF[0]=FMAX*((float)(PFF[3]-P)/(PFF[3]-PFF[2]));}}else if(P<=-PFF[3]){Pn=-2; PF[0]=FMAX;}else if(P>=PFF[3]){Pn=3; PF[0]=0;}PF[1]=FMAX-PF[0];if(D>-DFF[3] && D<DFF[3]){if(D<=-DFF[2]){Dn=-2;DF[0]=FMAX*((float)(-DFF[2]-D)/(DFF[3]-DFF[2])); }else if(D<=-DFF[1]){Dn=-1;DF[0]=FMAX*((float)(-DFF[1]-D)/(DFF[2]-DFF[1]));}else if(D<=DFF[0]){Dn=0;DF[0]=FMAX*((float)(-DFF[0]-D)/(DFF[1]-DFF[0]));}else if(D<=DFF[1]){Dn=1;DF[0]=FMAX*((float)(DFF[1]-D)/(DFF[1]-DFF[0]));}else if(D<=DFF[2]){Dn=2; DF[0]=FMAX*((float)(DFF[2]-D)/(DFF[2]-DFF[1])); }else if(D<=DFF[3]){Dn=3; DF[0]=FMAX*((float)(DFF[3]-D)/(DFF[3]-DFF[2])); }}else if(D<=-DFF[3]){Dn=-2;DF[0]=FMAX;else if(D>=DFF[3]){Dn=3;DF[0]=0;}DF[1]=FMAX-DF[0];/*使用误差围优化后的规则表rule[7][7]*//*输出值使用13个隶属函数,中心值由UFF[7]指定*/ /*一般都是四个规则有效*/Un[0]=rule[Pn-1+3][Dn-1+3];Un[1]=rule[Pn+3][Dn-1+3];Un[2]=rule[Pn-1+3][Dn+3];Un[3]=rule[Pn+3][Dn+3];if(PF[0]<=DF[0])UF[0]=PF[0];elseUF[0]=DF[0];if(PF[1]<=DF[0])UF[1]=PF[1];elseUF[1]=DF[0];if(PF[0]<=DF[1])UF[2]=PF[0];elseUF[2]=DF[1];if(PF[1]<=DF[1])UF[3]=PF[1];elseUF[3]=DF[1];/*同隶属函数输出语言值求大*/if(Un[0]==Un[1]){if(UF[0]>UF[1])UF[1]=0;elseUF[0]=0;if(Un[0]==Un[2]){if(UF[0]>UF[2])UF[2]=0;elseUF[0]=0;}if(Un[0]==Un[3]){if(UF[0]>UF[3])UF[3]=0;elseUF[0]=0;}if(Un[1]==Un[2]){if(UF[1]>UF[2])UF[2]=0;elseUF[1]=0;}if(Un[1]==Un[3]){if(UF[1]>UF[3])UF[3]=0;elseUF[1]=0;}if(Un[2]==Un[3]){if(UF[2]>UF[3])UF[3]=0;elseUF[2]=0;}/*重心法反模糊*//*Un[]原值为输出隶属函数标号,转换为隶属函数值*/ if(Un[0]>=0)Un[0]=UFF[Un[0]];elseUn[0]=-UFF[-Un[0]];if(Un[1]>=0)Un[1]=UFF[Un[1]];elseUn[1]=-UFF[-Un[1]];if(Un[2]>=0)Un[2]=UFF[Un[2]];elseUn[2]=-UFF[-Un[2]];if(Un[3]>=0)Un[3]=UFF[Un[3]];elseUn[3]=-UFF[-Un[3]];temp1=UF[0]*Un[0]+UF[1]*Un[1]+UF[2]*Un[2]+UF[3]*Un[3]; temp2=UF[0]+UF[1]+UF[2]+UF[3];U=temp1/temp2;return U;}void main(){int a=0,e,ec;/*int nowpoint,p1,p2=1;FILE *in,*out;in=fopen("in.txt","r");out=fopen("out.txt","w");*///while(!feof(in))while(1){//fscanf(in,"%d",&nowpoint);//p1=nowpoint;//e=0-nowpoint;//ec= p1-p2;printf("请输入e:");scanf("%d",&e);printf("请输入ec:");scanf("%d",&ec);a=Fuzzy(e,ec);//fprintf(out,"%d ",a);//printf("%d: ",p1);printf("e: %d ec: %d ",e,ec);printf("a: %d \n",a); //p2=p1;}//fclose(in);//fclose(out);}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于模糊控制的速度控制——地面智能移动车辆速度控制系统问题描述利用模糊控制的方法解决速度跟踪问题,即已知期望速度(desire speed),控制油门(throttle output)和刹车(brake output)来跟踪该速度。
已知输入:车速和发动机转速(值可观测)。
欲控制刹车和油门电压(同一时刻只有一个量起作用)。
算法思想模糊控制器是一语言控制器,使得操作人员易于使用自然语言进行人机对话。
模糊控制器是一种容易控制、掌握的较理想的非线性控制器,具有较佳的适应性及强健性(Robustness)、较佳的容错性(Fault Tolerance)。
利用控制法则来描述系统变量间的关系。
不用数值而用语言式的模糊变量来描述系统,模糊控制器不必对被控制对象建立完整的数学模式。
Figure 1模糊控制器的结构图模糊控制的优点:(1)模糊控制是一种基于规则的控制,它直接采用语言型控制规则,出发点是现场操作人员的控制经验或相关专家的知识,在设计中不需要建立被控对象的精确的数学模型,因而使得控制机理和策略易于接受与理解,设计简单,便于应用。
(2)由工业过程的定性认识出发,比较容易建立语言控制规则,因而模糊控制对那些数学模型难以获取,动态特性不易掌握或变化非常显著的对象非常适用。
(3)基于模型的控制算法及系统设计方法,由于出发点和性能指标的不同,容易导致较大差异;但一个系统语言控制规则却具有相对的独立性,利用这些控制规律间的模糊连接,容易找到折中的选择,使控制效果优于常规控制器。
(4)模糊控制是基于启发性的知识及语言决策规则设计的,这有利于模拟人工控制的过程和方法,增强控制系统的适应能力,使之具有一定的智能水平。
简化系统设计的复杂性,特别适用于非线性、时变、模型不完全的系统上。
模糊控制的缺点1.模糊控制的设计尚缺乏系统性,这对复杂系统的控制是难以奏效的。
所以如何建立一套系统的模糊控制理论,以解决模糊控制的机理、稳定性分析、系统化设计方法等一系列问题;2.如何获得模糊规则及隶属函数即系统的设计办法,这在目前完全凭经验进行;3.信息简单的模糊处理将导致系统的控制精度降低和动态品质变差。
若要提高精度则必然增加量化级数,从而导致规则搜索范围扩大,降低决策速度,甚至不能实时控制;4.如何保证模糊控制系统的稳定性即如何解决模糊控制中关于稳定性和鲁棒性问题。
实现步骤以及算法利用一般控制系统的架构,其中包含五个主要部分:定义变量、模糊化、知识库、逻辑判断及去模糊化,下面将就每一部分做简单的说明:(1) 定义变量也就是决定程序被观察的状况及考虑控制的动作,控制变量的选择要能够具有系统特性,而控制变量选择是否正确,对系统的性能将有很大的影响。
在此控制问题上,输入变量有速度误差和实际速度,而控制变量则为下一个状态之输出油门和刹车。
作为模糊控制器的语言变量,而如何选择则有赖工程师对于系统的了解和专业知识而定。
因此,经验和工程知识在选择控制变量时占有相当重要的角色。
(2) 模糊化(fuzzify)将输入值以适当的比例转换到论域的数值,利用口语化变量来描述测量物理量的过程,依适合的语言值(linguistic value)求该值相对之隶属度,此口语化变量我们称之为模糊子集合(fuzzy subsets)。
当控制变量确定之后,接下来就是根据经验写出控制规则,但是在做成模糊控制规则之前,首先必需对模糊控制器的输入和输出变量空间做模糊分割。
本案例中输入空间有两个变量,可以用三个或五个模糊集合对空间做模糊分割,划分成三个或五个区域。
由于程序实现的复杂性,暂时设置为三个。
模糊分割时各领域间重叠的程度大大地影响控制的性能;一般而言,模集合重叠的程度并没有明确的决定方法,目前大都依靠模拟和实验的调整决定分割方式,不过有文献提出大约1/3~1/2最为理想。
重叠的部份意味着模糊控制规则间模糊的程度,因此模糊分割是模糊控制的重要特征。
由于隶属度函数是连续型的,这里采用高斯型的隶属函数。
Figure 2 速度误差的隶属度函数即v ∆的隶属度函数分别为: 110()26120()26130()261 0<10:() 10:() 30:() 1 30v v v v P S v e v P M v ee v P B v v μμμ∆--∆--∆--∆<⎧⎪∆=⎨⎪∆≥⎩∆=⎧⎪∆<∆=⎨⎪∆≥⎩ 110()26120()26130()261 10<0:() 10:() 30<0:() 1 30v v v v N S v ev N M v ee v N B v v μμμ∆+-∆+-∆+--∆<⎧⎪∆=⎨⎪∆≤-⎩∆=⎧⎪-∆<∆=⎨⎪∆≤-⎩其中左边为误差为正的情况,此时只有油门的输出,右边为误差为负的情况,此时只有刹车的输出。
实际速度的隶属函数同样采用高斯型的,其图像同样如图Figure 1: 110()26120()26130()261 10<0:() 10:() 30<0:() 1 30v v v v S v e v M v ee v B v v μμμ-------<⎧⎪=⎨⎪≤-⎩=⎧⎪-<=⎨⎪≤-⎩油门输出的隶属函数: 刹车输出的隶属函数:1150()2541300()2541450()2541 0<t 150:() t 150:() t 450:() 1 t 450t t t S v e M v ee B v μμμ------<⎧⎪∆=⎨⎪≥⎩=⎧⎪<=⎨⎪≥⎩ 18()26116()26124()26:():():()v v v S b eM b eB b eμμμ------===上式中,NB,NM,NS,ZO,PS,PM,PB等是论域中模糊集合的标记,其意义如下所示:NB=负方向大的偏差(Negative Big);NM=负方向中的偏差(Negative Medium);NS=负方向小的偏差(Negative Small);ZO=近于零的偏差(Zero);PS=正方向小的偏差(Positive Small);PM=正方向中的偏差(Positive Medium);PB=正方向大的偏差(Positive Big)。
图中将模糊集合之全集合加以正规化为区间(0,1),在模糊控制上,使用标准化的模糊变量,其全集也常正规化,这时之正规化常数(亦称为增益常数),也是在设计模糊控制器时必须决定的重要参数。
(3) 规则库包括数据库(data base)与规则库(rule base)两部分,其中数据库是提供处理模糊数据之相关定义;而规则库则由一群语言控制规则描述控制目标和策略。
控制规则是模糊控制器的核心,规则的正确与否直接影响控制器的性能,而规则数目的多寡也是一个重要因素,因此下面将对控制规则做进一步的探讨。
模糊控制规则的取得方式:a.专家的经验和知识前面曾经提到模糊控制也称为控制上的专家系统,专家的经验和知识是设计上有余力的线索。
人类日常生活常中判断事情时,使用语言定性分析多于数值定量分析;而模糊控制规则提供了一个自然的架构来描述人类的行为及决策分析,并且专家的知识通常可用if….then 的型式来表示。
藉由询问经验丰富的专家,在获得系统的知识后,将知识改为if….then的型式,则如此便可构成模糊控制规则。
为了获得最佳的系统性能,常需多次使用试误法,以修正模糊控制规则。
b.操作员的操作模式现在流行的专家系统,其想法只考虑知识的获得,专家巧妙地操作复杂的控制对象,但要将专家的诀窍加以逻辑化并不容易;因此,在控制上也要考虑技巧的获得。
在许多工业系统无法以一般的控制理论做正确的控制,但是熟练的操员在没有数学模式下,也能够成功地控制这些系统;因此,记录操作员的操作模式,并将其整理为if….then的型式,可构成一组控制规则。
c.学习为了改善模糊控制器的性能,必须让它有自我学习或自我组织的能力,得模糊控制器能依设定的目标,增加或修改模糊控制规则。
模糊控制规则的型式:状态评估模糊控制规则状态评估(state evaluation)模糊控制规则为类似人类的直觉思考,所以大多数的模糊控制器都使用这种模糊控制规则,其型式如下:Ri:if x1 is Ai1 and x2 is Ai2….and xn i s Ain then y is Ci ;其中x1,x2,…,xn及y为语言变量或称为模糊变量,代表系统的态变量和控制变量;Ai1,Ai2,…,Ain及Ci为语言值,代表论域中的模糊集合。
其次还有另一种表示法,是将后件部改为系统状态变量的函数,其形式如下:Ri:if x1 is Ai1 and x2 is Ai2….and xn is Ain then y=f1(x1,x2,…,xn)设计模糊控制规则时,是在所设想对控制对象各阶段之反应,记述采取那一种控制比较好;首先选择各阶段的特征点,记录在模糊控制规则的前件部,然后思考在该点采取的动作,记录在模糊控制规则的后件部可分别得到如下的控制规则库:a1:If v∆is PS and v is B then T is B;b1:If v∆is PM and v is CE then T is CE;c1:If v∆is PB and v is S then T is S ;……表为依上述程序所构成的9条控制规则,其中纵列为v值,横列为v∆值,表中所列之值为控制油门输出T值。
由Table1可知规则数最多可为18条,但是v∆的值为负时,只有刹车B的输出。
表中只使用了其中15条控制规则,也可依实际结果以及实验需求自行加减规则之数量;为了改善控制的结果,也可适当的改变规则数量以及规则。
(4) 模糊推理推理模仿人类下判断时的模糊概念,运用模糊逻辑和模糊推论法进行推论,而得到模糊控制信号。
不精确的前提集合中得出可能的不精确结论的推理过程,又称近似推理。
在人的思维中,推理过程常常是近似的。
此部分是模糊控制器的精髓所在。
把模糊规则库中的模糊IF-Then规则结合起来,利用最大最小规则,程序实现的主要部分为该部分的内容。
(5) 去模糊化(defuzzify)将推论所得到的模糊值转换为明确的控制信号,做为系统的输出值。
在实行模糊控制时,将许多控制规则进行上述推论演算,然后结合各个由演算得到的推论结果获得控制输出。
为了求得受控系统的输出,必须将模糊集合去模糊化,本例中使用的是最大平均值法(Mean of Maximal,MOM):取隶属度最大的所有元素代表取模糊推论结论中,具有最大隶属度值作为去模糊化的输出值。
若同时具有多点最大,则取平均值,该方法简单易操作。
结果分析由于该方法所设的隶属函数数量较少分别为3个,所以实验结果会存在数值较少,输出只会固定在几个值之间,而在两个隶属函数交叉相对较多的区间下,结果的可信度将提高,同时由于实验中未能进行智能车实跑,所以不能进行数据的进一步分析和实验方法的改进,若要加强该控制精度,一方面应该增加规则数量,另一方面通过具体实验结果更改规则库中规则。