模糊控制详细讲解实例

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、速度控制算法:

欧阳学文

首先定义速度偏差50 km/h≤e(k)≤50km/h,20≤ec(i)=e(k)e(k1)≤20,阀值eswith=10km/h

设计思想:油门控制采用增量式PID控制算法,刹车控制采用模糊控制算法,最后通过选择规则进行选择控制量输入。

选择规则:

e(k)<0 ①e(k)>eswith and throttlr_1≠0 选择油门控制

②否则:先将油门控制量置0,再选择刹车控制

0

e(k)=0 直接跳出选择

刹车控制:刹车采用模糊控制算法

1.确定模糊语言变量

e基本论域取[50,50],ec基本论域取[20,20],刹车控制量输出u基本论域取[30,30],这里我将这三个变量按照下面的公式进行离散化:

其中,,n为离散度。

E、ec和u均取离散度n=3,离散化后得到三个量的语言值论域分别为:

E=EC=U={3,2,1,0,1,2,3}

其对应语言值为{NB,NM,NS,ZO,PS,PM,PB}

2.确定隶属度函数

E/EC和U取相同的隶属度函数即:

说明:边界选择钟形隶属度函数,中间选用三角形隶属度函数,图像略

实际EC和E输入值若超出论域范围,则取相应的端点值。

3.模糊控制规则

由隶属度函数可以得到语言值隶属度(通过图像直接可以看出)如下表:

表1:E/EC和U语言值隶属度向量表

设置模糊规则库如下表:

表2:模糊规则表

U E

EC —NB NM NS ZO PS PM PB NB PB PB PM PM PS ZO ZO

NM PB PM PM PS ZO ZO NS

NS PM PM PS PS ZO NS NS

ZO PM PS PS ZO ZO NS NM

PS PS PS ZO ZO ZO NS NM

PM PS ZO ZO ZO NS NM NB

PB ZO ZO ZO NS* NM NM NB

3.模糊推理

由模糊规则表3可以知道输入E与EC和输出U的模糊关系,这里我取两个例子做模糊推理如下:

if (E is NB) and (EC is NM) then (U is PB)

那么他的模糊关系子矩阵为:

其中,,即表1中NB对应行向量,同理可以得到, ,

if (E is NVB or NB) and (EC is NVB) then (U is PVB)

结果略

按此法可得到27个关系子矩阵,对所有子矩阵取并集得到模糊关系矩阵如下:

由R可以得到模拟量输出为:

4.去模糊化

由上面得到的模拟量输出为1×7的模糊向量,每一行的行元素(u(zij))对应相应的离散变量zj,则可通过加权平均法公式解模糊:

从而得到实际刹车控制量的精确值u。

油门控制:

油门控制采用增量式PID控制,即:

只需要设置、、三个参数即可输出油门控制量。

二、程序实现及参数调节

clear all

%************************模糊算法

%/*********隶属度向量 *****%

P0=[1,0.5,0,0,0,0,0];%*********NB

P1=[0,1,0.5,0,0,0,0];%*********NM

P2=[0,0.5,1,0.5,0,0,0];%*********NS

P3=[0,0,0.5,1,0.5,0,0];%*********ZO

P4=[0,0,0,0.5,1,0.5,0];%*********PS

P5=[0,0,0,0,0.5,1,0];%*********PM

P6=[0,0,0,0,0,0.5,1];%*********PB

%***********语言值 *****%

NB=3;NM=2;NS=1;ZO=0;PS=1;PM=2;PB=3;

%/*********模糊规则表*****%

Pg=[PB PB PM PM PS ZO ZO;

PB PM PM PS ZO ZO NS;

PM PM PS PS ZO NS NS;

PM PS PS ZO ZO NS NM;

PS PS ZO ZO ZO NS NM;

PS ZO ZO ZO NS NM NB;

ZO ZO ZO NS NM NM NB];

%/*********根据规则表计算模糊关系矩阵*****% R1_=dikaer(xbing(P0,P1),7,P0,7);

R1_=reshape(R1_,1,49);

R1=dikaer(R1_,49,P6,7);

R2_=dikaer(xbing(P2,P3),7,P0,7);

R2_=reshape(R2_,1,49);

R2=dikaer(R2_,49,P5,7);

R3_=dikaer(P0,7,P1,7);

R3_=reshape(R3_,1,49);

R3=dikaer(R2_,49,P6,7);

R4_=dikaer(xbing(P1,P2),7,P1,7); R4_=reshape(R4_,1,49);

R4=dikaer(R4_,49,P5,7);

R5_=dikaer(P3,7,P1,7);

R5_=reshape(R5_,1,49);

R5=dikaer(R5_,49,P4,7);

R6_=dikaer(xbing(P0,P1),7,P2,7); R6_=reshape(R6_,1,49);

R6=dikaer(R6_,49,P5,7);

R7_=dikaer(xbing(P2,P3),7,P2,7); R7_=reshape(R7_,1,49);

R7=dikaer(R7_,49,P4,7);

R8_=dikaer(P0,7,P3,7);

R8_=reshape(R8_,1,49);

R8=dikaer(R8_,49,P5,7);

R9_=dikaer(xbing(P1,P2),7,P3,7);

相关文档
最新文档