Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1724593
  • 博文数量: 438
  • 博客积分: 9799
  • 博客等级: 中将
  • 技术积分: 6092
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-25 17:25
文章分类

全部博文(438)

文章存档

2019年(1)

2013年(8)

2012年(429)

分类: 信息化

2013-04-06 14:30:02

传统逻辑只有两种状态,一个元素要么属于一个集合,要么不属于这个集合。如此在某些问题上会有问题。比如如何定义一个男人长得高,在传统逻辑下,可以定义180cm以上的就是高的,那么179cm的呢?
模糊逻辑反映了人类思考的方式,也被称为多值逻辑,由Jan Lukasiewicz在1930年引入。他研究诸如"高"、"热"、"老"等模糊词语的数学表达。他把逻辑值表示为0到1之间的实数,表示为真或假的可能性。比如181cm的男人"高"的可能性可以是0.86,那么他很可能确实是高。
1937年,Max Black发表论文说一个连续的取值范围可以表示"程度"。比如凳子和桌子,随着凳子做的越来越大,它到底是桌子还是凳子?Max认为这个程度值可以取认为是凳子的人的百分比。这篇论文的最大贡献在于定义了第一个简单的模糊集以及相关操作的基本概念。
1965年Lotfi Zadeh发表著名论文"模糊集"。他把"可能性理论"的工作扩展为数学逻辑的形式化系统。此外更重要的是,他引入了应用自然语言术语的新概念。这种表示和操作模糊术语的新逻辑被称为模糊逻辑,而Zadeh成为模糊逻辑之父。

如Zadeh所述,"模糊"这个术语是具体的、直接的、描述性的。我们都知道它的含义。然而西方许多人都因为"模糊"这个词而对其有所抗拒,因为它通常表示负面的意思。
模糊逻辑只是模糊集理论的一小部分,但Zadeh把术语"模糊逻辑"应用到更广泛的场景里:模糊逻辑是用于知识表达的数学理论的集合,它基于隶属程度而不是传统二进制的清晰的隶属关系。
模糊逻辑是可以取多值的,而不仅仅是两个值。它使用0到1之间的连续值,表示隶属程度和真实程度。它允许某件事可以部分正确,部分不正确。

模糊集
假设X是一个经典集合,而x是一个元素,那么x要么属于X,要么不属于X。由此而来而出现著名的逻辑悖论:
1、(Pythagorean School,400 BC)如果克利特岛的哲学家说:“所有的克利特岛人都只说假话”,那么他说的是真话还是假话?
2、(Russell's Paradox,罗素悖论)村里的理发师只给那些不给自己理发的人理发,理发师的头发谁来理?
模糊逻辑没有这种问题。模糊集的定义为:一个具有模糊边界的集合。

对于全集X,元素x,在经典集合理论里,X的清晰集A被定义为A的“特性函数”f_A(x):
f_A(x): X -> {0, 1}
f_A(x) = 1 if x属于X
f_A(x) = 0 if x不属于X

在模糊集合理论里,X的模糊集A被定义为A的“隶属函数”u_A(x):
u_A(x): X -> [0, 1]
u_A(x) = 1 if x is totally in A;
u_A(x) = 0 if x is not in A;
0 < u_A(x) < 1 if x is partly in A.
隶属函数的值表示集合A里的元素x的隶属程度或隶属值。

模糊集的计算机表示
首先是要确定隶属函数。最实际的方法是找一个专家。另一种方式是找多个专家。现在一种形成模糊集的新技术是使用神经元网络,通过学习现有的系统操作数据来自动驱动模糊集。
考虑全局闭包A,也称为引用超集,是包含5个元素x1、x2、x3、x4、x5的清晰集。A是X的子集,并只有两个元素,A={x2, x3}。子集A也可以描述为:A={(x1,0), (x2,1), (x3,1), (x4,0), (x5,0)},这样便成了“元素-隶属函数”对{x_i, u_A(x_i)}的集合。问题在于u_A(x)是只能取0,1还是可以取0到1之间的任意值。
因此,引用超集X的子集A当且仅当:
A = {x, u_A(x)}        x属于X、u_A(x): X->[0,1]
时,A被称为模糊集。
当X->[0,1]变为X->{0,1}时,模糊子集A就变为清晰子集A。

有限的引用超集X的模糊子集A可以表示为:
A = {x1, u_A(x1)}, {x2, u_A(x2)}, ..., {x_n, u_A(x_n)}
一种更方便的表示是:
A = {u_A(x1)/x1}, {u_A(x2)/x2}, ..., {u_A(x_n)/x_n}
分隔符“/”用来关联隶属值和它对应的横坐标的值。
例如,高个子男人 = (0/180, 0.5/185, 1/190)

语言变量
模糊集合理论的根本在于语言变量。语言变量就是一个模糊变量。例如语句“John is tall”蕴含了语言变量“John”采用了语言值“tall”。在模糊专家系统里,语言变量被用在模糊规则里,例如:
IF wind is strong
THEN sailing is good

语言变量的值的可取范围表示这个变量的全局闭包。例如,语言变量“车速”的全局闭包的取值范围可以是0到220,它的模糊子集可以是“非常慢”、“慢”、“一般”、“快”、“非常快”。
语言变量带有模糊集限定词的概念,称为“模糊限制语(hedges)”,包括"very", "somewhat", "quite", "more", "less", "slightly"等副词。模糊限制语可以修改动词、形容词、副词甚至是整个语句。它本身是一种操作,比如"very"进行浓缩(concentration)操作并创建新的子集。"tall men"继承自"very tall men"的子集。
和浓缩相反的操作是膨胀(dilation),它将集合扩大,例如"more or less"。模糊限制语可以把连续区间分解成几个模糊区间,比如“非常冷“、”很冷“等,且这些模糊集会有重叠。模糊限制语有助于反应人类的思考方式,因为人们通常很难区分“有点冷”和“适度得冷”。

模糊限制语可以用来修改隶属,例如:
A little: (u_A(x))^1.3
Slightly: (u_A(x))^1.7
Very: (u_A(x))^2
Extremely: (u_A(x))^3
Very very: (u_A(x))^4
More or less: (u_A(x))^0.5
Somewhat: (u_A(x))^0.5
Indeed: 2*(u_A(x))^2 {if u_A >=0 and u_A <= 0.5} or 1 - 2*(1-u_A(x))^2 {if u_A > 0.5 and u_A <= 1}

模糊集的操作
Georg Cantor在19世纪末发展了经典集合理论,并定义了清晰集的交、并、补、包含等操作。模糊集也有类似的操作。
:u_not_A(x) = 1 - u_A(x),例tall men = (0/180, 0,25/182.5, 0.5/185, 0.75/187.5, 1/190),则not tall men = (1/180, 0.75/182.5, 0.5/185, 0.25/187.5, 0/190)。
包含:子集里的每个元素的隶属值都小于更大的集合。例如tall men = (0/180, 0,25/182.5, 0.5/185, 0.75/187.5, 1/190),而very tall men = (0/180, 0.06/182.5, 0.25/185, 0.56/187.5, 1/190)。
:u_A∩B(x) = min[u_A(x), u_B(x)] = u_A(x) ∩ u_B(x),例如tall men =  (0/165, 0/175, 0.0/180, 0,25/182.5, 0.5/185, 1/190),且average men = (0/165, 1/175, 0.5/180, 0.25/182.5, 0.0/185, 0/190),则tall men ∩ average men = (0/165, 0/175, 0/180, 0.25/182.5, 0/185, 0/190)。
u_AB(x) = max[u_A(x), u_B(x)] = u_A(x)  u_B(x),例如tall men =  (0/165, 0/175, 0.0/180, 0,25/182.5, 0.5/185, 1/190),且average men = (0/165, 1/175, 0.5/180, 0.25/182.5, 0.0/185, 0/190),则tall men  average men = (0/165, 1/175, 0.5/180, 0.25/182.5, 0.5/185, 1/190)。

交换性:A∩B=B∩A; A∪B=B∪A
结合性:A∩(B∩C)=(A∩B)∩CA∪(B∪C)=(A∪B)∪C
分配性:A(BC)=(AB)(AC); A(B∩C)=(AB)(AC)
幂等性:AA=A; A∪A=A
同一性:A?=?; A∩X=A; A?=A; A∪X=X
对合性:not(not A) = A
传递性:If A 包含于 B 且 B包含于C,then A包含于C
摩根法则:not(A∩B) = not A ∪ not B; not(AB) = not A  not B

模糊规则
1973年Lotfi Zadeh发表了他的第二篇最有影响力的论文,指出一种分析复杂系统的新方法:用模糊规则获取人类知识。
模糊规则和经典规则相似,也是if then的形式。区别在于经典规则使用二元逻辑,比如:if speed is > 100,而模糊规则使用模糊逻辑:if speed is fast。

例如模糊规则:if height is tall, then weight is heavy。在推理时,u_tall(1.83)的值是0.3,对应着u_height(w)=0.3的体重是w=76kg。可以看到,虽然模糊,但是精确的输入最后得到的却是精确的输出。

规则的前件(if部分)也可以有多个部分,比如if project_duration is long AND project_staffing is large AND project_funding is inadequate THEN risk is high。同样,后件也可以有多个部分IF temperature is hot THEN hot_water is reduced; cold_water is increased.

模糊推理
Mamdani方法是最普遍使用的模糊推理技术,它在1975年被提出。它分为四个阶段:
1、输入变量的模糊化:确定各个清晰输入所属的模糊集以及隶属程度(每个变量都可以同时属于多个模糊集)。例如,输入x属于A1,A2,且u_A1(x) = 0.5, u_A2(x) = 0.2。
2、规则演算:根据各个变量所属的每个模糊集,找到相应的规则并应用。由于规则前件可能有AND或OR,比如IF A1 AND B1 THEN C1。假设还有一个输入y,且u_B1(y) = 0.1, u_B2(y) = 0.7,此时需要将x和y的隶属值合并。AND的计算方式有多种,一种是min[u_A(x), u_B(y)],一种是probor[u_A(x), u_B(y)] = u_A(x) + u_B(y) - u_A(x) * u_B(y)。同样,OR的计算方式也包括max[u_A(x), u_B(y)],也可以是prod[u_A(x), u_B(y)] = u_A(x) * u_B(x)。对于不同的计算方式,得到的结果也会不同。因此前述的规则的最终隶属值可以是u_A1(x) * u_B1(y) = 0.5 * 0.1 = 0.05,由即结果是C1(0.05)。
3、规则输出的聚合:根据不同的规则和相应的隶属函数,可以得到多个结果。例如,C1(0.1)、C2(0.2)、C3(0.5)。这时,把这三个结果集求并操作,作为单独的结果。
4、去模糊化:聚合后的结果,与x取值的横坐标可以围成一个平面图形。设最左的x坐标点是a,最右的x坐标点是b,那么将a到b的u_A(x)*x的定积分除以a到b的u_A(x)的定积分,就得到这个平面图形的重心点(centre of gravity,COG)。这个点就是最终的精确输出。

Mamdani方法需要计算二维图形的重心,因此计算量很大。Michio Sugeno在1985年提出了Sugeno方法。

Sugeno方法和Mamdani方法很相似。只是模糊规则的结果不再是一个模糊集,而是一个函数。例如IF x is A AND y is B THEN z is f(x, y)。最常用的零阶Sugeno模糊模型让z取常数k。因此,在第二阶段规则演算时,可以得到一个确定的数。在第四阶段去模糊化时,求出各个结果的加权平均值(weighted average, WA),例如:WA = ( u(k1)*K1 + u(k2)*k2 + u(k3)*k3 ) / (u(k1) + u(k2) + u(k3))。

Mamdani方法更加的精确,被广泛应用于获取专业知识。Sugeno由于更高效,适用于时效性要求高的控制系统。


阅读(7388) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~