600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 模糊逻辑基础篇(Foundations of Fuzzy Logic)-无人驾驶汽车自动调节速度案例

模糊逻辑基础篇(Foundations of Fuzzy Logic)-无人驾驶汽车自动调节速度案例

时间:2022-04-30 01:51:23

相关推荐

模糊逻辑基础篇(Foundations of Fuzzy Logic)-无人驾驶汽车自动调节速度案例

本篇文章会从模糊逻辑最基础的理论概念叙述,并通过具体示例引导您了解整个模糊逻辑的运行过程。

一、概念提出

在提出模糊逻辑之前,我们已经知道布尔运算是针对机器做出准确答案的,就像存在它体内的二进制数一样,要么是1,要么是0。例如,在下图Monday,Thursday,Saturday属于一周之内的日子,而其他不属于。

但是这种方法只能适用于进行事实判断,也就是说答案不存在争议,大家普遍都这样认为的。

而在生活中,人类在做大部分决策都是非常模糊的,是在“yes”和“no”中间寻找可能的答案,而非一个确定的类别。例如身高问题,在回答175cm和185cm是否高时,对于155cm的人来说,175cm和185cm无疑都是高的;而对于174cm的人来讲,因为自己和175cm的差别很小,所以认为175cm属于稍高,而185cm属于高。可以看出,174cm的人在回答这个问题时觉得175cm属于高的程度没那么大,所以加了形容词变成稍微高,反映到数学表达上即高的程度为[0,1]之间的数值。

为了解决此类决策问题,使计算机更符合人类思维,科学家们提出了模糊逻辑方法。包括以下这些新概念:

1. 模糊集合(Fuzzy Set)和隶属度函数(Membership Functions):

模糊集合中的值以某种程度上属于这个集合,例如变量高度中有非常低、低、稍高、高、非常高为五个不同的模糊集合。

隶属度函数是一条曲线,它定义了如何将输入空间中的每个点映射到0到1之间的隶属度。还是以上述例子为例,隶属度就是高的程度,数值位于[0,1]之间。隶属度函数就是身高(自变量)和隶属度(因变量)的对应关系。隶属度函数一般凭经验或机器学习算法进行训练改进得出。论域是自变量的范围,如隶属度函数统计高度[155,195]。

常见的隶属度函数有:

分段线性函数

trimf -三角形隶属函数

trapmf -梯形隶属度函数

linzmf -线性z形隶属函数打开到左边

linsmf -向右开放的线性s形隶属函数

高斯分布函数

由高斯分布推导出两个隶属度函数:一个简单高斯曲线(gaussmf)和一个不同高斯曲线的双面复合曲线(gauss2mf)。广义钟形隶属函数(gbellmf)在0和1之间有类似的平滑过渡。它还有第三个参数,可以用来调整从0到1的过渡的陡度。

- S型曲线

sigmf - 左开口、又开口 sigmoid隶属度函数

dsigmf - 两个 sigmoid函数相差

psigmf - 两个 sigmoid函数相乘

- 二次和三次多项式曲线

zmf - z形隶属函数开向左侧

smf -s形隶属度函数向右开放

pimf -隶属函数,是s形隶属函数与z形隶属函数的乘积

每个隶属度函数都有各自的特性,例如分段线性函数变化太尖锐,在后续建模时容易出现忽高忽低的跳跃状态,高斯函数较为平滑,但很难解决非对称问题等。隶属度函数的选择会影响后面的决策判断,因此作为参数放进机器学习算法中训练并改进是个非常好的想法!

2. 逻辑运算(Logical Operations):

这张图显示了模糊逻辑中的逻辑运算过程:和传统运算一致,AND的意思是不超过A,B的值,即求min(A,B);OR的意思是最少是A,B,即求max(A,B)。

3. 模糊规则:

IF-Then是一般形式:If x is A, then y is B。规则中的“If x is A ”又称前件,“y is B”又称后件。比如“如果温度很低,云层很厚,车速就要很慢”这样的语句,x是温度和云层,A是低,厚,y为车速,B为慢。规则由人事先输入进系统中。运用逻辑运算计算,每一条规则得到的结果被称为Fire Strength(FS),结果变量相同的采取最大值,并全部传给下一模块进行计算。

例如IF Cloudy(Cover) AND Cool(Temp) THEN Slow(Speed).

从隶属度函数中得出Cloudy(Cover)0.2, Cool(Temp)为0.7,那么speed为slow的程度为min(0.2,0.7)=0.2。如果有其他规则的出来slow(speed)的值,与0.4比较取最大。

4. 去模糊化(Defuzzification):

将上述FS整合起来,显示的是输出变量的隶属度,如speed(slow)=0.2,speed(fast)=0.7,但是我们想得到的值是一个速度确定的数值,比如50km/h,所以将隶属度函数变成想要的数值就是去模糊化。

常见的去模糊化方法有:

第一或最后最大值;最大值均值法;中心法;加权平均判决法。第一或最后最大值是最简单之一,但在无最大值的情况下不适合。重心法的使用更广泛,如果你不知道选用哪个方法,可以用重心法。重心法的应用如下:

我们已知slow(speed)=0.2,fast(speed)=0.7,在speed隶属度函数中可以通过隶属度值划定一个区域。

随后在该区域中取重心(非面积相等的中心),横轴显示的速度值(65.2km/h)即为输出值。

二、模糊逻辑计算流程

下面以根据天气温度和云层厚度,自动调节汽车(应用:无人驾驶汽车)的速度为例,讲述整个过程。

流程包括步骤:确定输入输出变量隶属度函数、输入变量值、指定规则和逻辑运算、去模糊化得结果

模糊控制将模糊语言变量与模糊逻辑相结合,当询问今天开多快时,可能会回答取决于天气。我们将设计一个使用两个输入变量(temperature, cloud cover)和一个输出变量(speed)的模糊逻辑速度控制系统。

step1: 确定输入输出变量隶属度函数

输入变量:

#1 Temperature包含4个隶属度函数(4个语言变量,每一个都是模糊的):冻,冷,温暖,热。

#2 Cover包含三个隶属度函数:晴朗,部分,覆盖

输出变量: speed

step2 输入变量值

假设当前温度和云量由传感器传入值为:

– 65 F° Temperature

– 25 % Cloud Cover

想要的结果:我需要开多快的汽车?

根据隶属度函数可知:

在Temp(65)情况下Cool = 0.4, Warm= 0.7 (Freezing=0,Hot=0)

在Cloud Cover(25%) 情况下 Sunny = 0.8, Partly Cloudy = 0.2(Overcast=0),

step3 指定规则和逻辑运算

If it’s Sunny and Warm, drive Fast

0.8 and 0.7=>0.7 fastIf it’s Cloudy and Cool, drive Slow

根据隶属度函数可知

0.2 and 0.4=>0.2 slow

step3 去模糊化得结果

从20% slow and 70% fast转成具体的速度值

这里使用第一或最后最大值方法。

找出slow为1(隶属度最大值)的速度最大值是25,fast为1(隶属度最大值)的速度最小值是75。

于是带入20% slow and 70% fast求加权平均。

(20%*25+70%*75)/(20%+70%)=63.8mph

这样就完成一个模糊逻辑计算了。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。