本篇文章会从模糊逻辑最基础的理论概念叙述,并通过具体示例引导您了解整个模糊逻辑的运行过程。
一、概念提出
在提出模糊逻辑之前,我们已经知道布尔运算是针对机器做出准确答案的,就像存在它体内的二进制数一样,要么是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
#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 Fast0.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
这样就完成一个模糊逻辑计算了。