什么是模糊逻辑?

43

我在学校使用几种人工智能算法,我发现人们使用模糊逻辑这个词来解释他们可以用几个情况解决的任何情况。当我回到书本上读到的时候,我发现状态不再是从开到关,而是一条对角线,并且某些东西可以处于两种状态但在不同的“水平”上。

我已经阅读了维基百科和一些教程,甚至编写了“使用模糊逻辑”的程序(边缘检测器和一个单轮自控机器人),但我仍然非常困惑如何从理论转化为代码...对您来说,以尽可能简单的定义,什么是模糊逻辑?

Translated:

我在学校使用几种人工智能算法,我发现人们使用模糊逻辑这个词来解释他们可以用几个情况解决的任何情况。当我回到书本上读到的时候,我发现状态不再是从开到关,而是一条对角线,并且某些东西可以处于两种状态但在不同的“水平”上。

我已经阅读了维基百科和一些教程,甚至编写了“使用模糊逻辑”的程序(边缘检测器和一个单轮自控机器人),但我仍然非常困惑如何从理论转化为代码...对您来说,以尽可能简单的定义,什么是模糊逻辑?

11个回答

39
模糊逻辑是一种逻辑,其中状态成员实际上是0到1范围内的浮点数,而不是0或1的整数。它的好处在于,例如控制系统中所做的更改比使用简单二进制逻辑得到的更加精细调整。
一个示例可能是根据活动TCP连接来减少系统活动的逻辑。 假设您将“有点太多”的TCP连接定义为1000个,“非常多”的连接定义为2000个。 在任何给定时间,您的系统都有从0(<= 1000)到1(> = 2000)的“过多的TCP连接”状态,您可以将其作为系数应用于可用的任何减速机制。 这比只知道如何确定“太多”并完全减速或“不太多”并不减速的简单二进制逻辑更容易原谅和响应系统行为。

正确的,模糊逻辑规则的另一半通常是一个模糊集合(而不是单个值)。这些后果模糊集合会根据其前提条件的真实程度进行修改,并且来自所有规则的模糊输出将被组合成最终的模糊输出集。这个最终的集合将被“去模糊化”以产生单个值作为响应。 - Predictor

37
我想补充一下已经被修改的答案,一个好的模糊逻辑可视化方法如下:
传统上,使用二元逻辑,你会得到一个成员函数为真或假的图形,而在模糊逻辑系统中,成员函数则不是这样。
1|
 |   /\
 |  /  \
 | /    \
0|/      \
 ------------
   a  b c   d
暂时假设函数是“喜欢花生”
a. 有点喜欢花生
b. 非常喜欢花生
c. 有点喜欢花生
d. 不喜欢花生
函数本身不必是三角形的,通常也不是(只是用ascii艺术更容易)。
一个模糊的系统可能有许多这样的函数,甚至有些重叠(甚至相反),如下所示:
1|   A    B
 |   /\  /\      A = 喜欢花生
 |  /  \/  \     B = 不喜欢花生
 | /   /\   \
0|/   /  \   \
 ------------
  a  b  c d
因此,c现在是“有点喜欢花生,有点不喜欢花生”,d是“真的不喜欢花生”。
您可以根据这些信息进行相应的编程。
希望这对视觉学习者有所帮助。

11
最好的模糊逻辑(fuzzy logic)定义是由其发明人Lotfi Zadeh提供的:

“模糊逻辑是一种将问题表现给计算机的方式,类似于人类解决问题的方式。而模糊逻辑的实质是,每件事情都有一个程度。”

用计算机解决问题的意义类似于人类解决问题可通过来自篮球比赛的简单例子轻松解释。如果一名球员想要防守另一名球员,首先他应该考虑对方的身高和打球技巧。如果要防守的球员比他高并且相对于他运球速度很慢,那么他将使用直觉决定是否应该防守这个球员,因为对他来说存在不确定性。在这个例子中,重要的是性质与球员相关,身高和打球技巧有一个程度。模糊逻辑为这种不确定情况提供了一种确定性方法。

处理模糊逻辑的步骤包括几个部分(参见图1)。这些步骤包括:第一步是模糊化,将清晰的输入转换为模糊输入;第二步是使用模糊规则处理这些输入,以创建模糊输出;最后是去模糊化,其结果是模糊逻辑中可以有多种具有不同程度的结果。

image004

图1-模糊过程步骤(David M. Bourg P.192)

为了说明模糊过程步骤,可以使用前面篮球比赛的情景。如上例所述,对手的身高为1.87米,相对于我们的球员来说相当高,并且他可以以3 m/s运球速度慢,与我们的球员相比。除了这些数据外,还需要考虑一些称为模糊规则的规则,例如:

if player is short but not fast then guard,
if player is fast but not short then don’t guard
If player is tall then don’t guard
If player is average tall and average fast guard

image005

图2-身高

image007

图3-速度

根据规则和输入数据,模糊系统将生成一个输出,例如:守卫的程度为0.7,有时守卫的程度为0.4,从不守卫的程度为0.2。

image009

图4-输出模糊集

在最后一步中,使用去模糊化来创建一个清晰的输出,即可以确定我们在比赛期间应该使用的能量。重心是创建输出的常用方法。在此阶段,计算平均点的权重完全取决于实现方式。在本应用程序中,考虑到对守卫或不守卫给予高权重,但对有时守卫给予低权重。 (David M. Bourg,2004)

image012

图5-模糊输出(David M. Bourg P.204)

  Output = [0.7 * (-10) + 0.4 * 1 + 0.2 * 10] / (0.7 + 0.4 + 0.2) ≈ -3.5

作为一种处理不确定性的决策方法,模糊逻辑可以用来确定决策程度。然而,模糊逻辑的问题在于随着输入数量的增加,规则数量呈指数级增长。
如需了解更多信息及其在游戏中的应用,请查看我写的一篇小文章:点击这里

总隶属度是否可能超过1?我一直认为不同集合的隶属度之和必须始终等于1。 - Al V

6
为了延续chaos的回答,形式逻辑不过是一个归纳定义的集合,将句子映射到一个估值。至少,这就是模型理论家对逻辑的看法。在命题布尔逻辑的情况下:
 (basis clause) For all A, v(A) in {0,1}
 (iterative) For the following connectives,
   v(!A) = 1 - v(A)
   v(A & B) = min{v(A), v(B)}
   v(A | B) = max{v(A), v(B)}
 (closure) All sentences in a boolean sentential logic are evaluated per above.

模糊逻辑的变化是归纳定义的:
 (basis clause) For all A, v(A) between [0,1]
 (iterative) For the following connectives,
   v(!A) = 1 - v(A)
   v(A & B) = min{v(A), v(B)}
   v(A | B) = max{v(A), v(B)}
 (closure) All sentences in a fuzzy sentential logic are evaluated per above.

请注意,底层逻辑的唯一区别是允许将一个句子的"真值"评估为0.5。对于模糊逻辑模型来说,重要的问题是阈值对于真实满意度的计数。这就是在询问:对于估价v(A),对于什么值D,使得v(A)>D则A被满足。
如果您真的想了解更多关于非经典逻辑(如模糊逻辑)的信息,我建议您阅读《非经典逻辑入门:从If到Is》《可能性与悖论》
换上我的编码帽子,我会小心翼翼地使用模糊逻辑进行实际的编程,因为它容易无法确定。也许这对于一些复杂性而言收益微薄。例如,超估算逻辑可能对于帮助程序模拟模糊性已经足够。或者也许概率已经足够好了。简而言之,我需要确信领域模型与模糊逻辑相吻合。

4
也许一个例子可以更清楚地解释好处:

假设你想制作一个恒温器,你希望它是24度。


这就是你使用布尔逻辑实现的方式:

  • 规则1:当温度低于21度时,以全功率加热。
  • 规则2:当温度高于27度时,以全功率冷却。

这样的系统只会偶尔达到24度,而且效率非常低。


现在,使用模糊逻辑,它可能是这样的:

  • 规则1:对于每低1度,将加热器调高一档(在24度时为0)。
  • 规则2:对于每高1度,将冷却器调高一档(在24度时为0)。

这个系统总是在24度左右,只会偶尔进行微小的调整。而且它还更节能。


1
两者都实现了布尔逻辑 - 模糊逻辑呢? - Jonathan Leffler
1
"对于“每个度数,上升一个槽位”,我的意思是系统在温度远离24度时渐渐变得更加努力,而不是完全开启或关闭。这就是模糊逻辑的运用。我有遗漏什么吗?" - Wouter van Nifterick
这不是模糊逻辑的工作方式。结果相同,但过程不同。模糊逻辑由布尔值具有概率值(0到1),定义一个值在类别中的程度。在您的示例中,值完全属于它们的类别(即高于24度),因此虽然结果相似,但这不是模糊逻辑。 - TheEnvironmentalist
加入模糊值来决定加热器的强度如何? - James P.

3

嗯,你可以阅读Bart Kosko的作品之一,他是“奠基之父”之一。1994年的《Fuzzy Thinking: The New Science of Fuzzy Logic》很容易阅读(并且在亚马逊上二手便宜可得)。显然,他有一本新书《Noise》于2006年出版,也很容易理解。

基本上,模糊逻辑是关于如何处理世界上某些事物可能是10%酷,50%温暖和10%热的情况,不同的决策可能是基于不同状态的真实程度而作出的(不,这些百分比不完全是偶然的 - 尽管如果需要,我会接受更正)。


3

2
我知道你所说的从概念到代码的转换很困难。我正在编写一个评分系统,它查看Linux系统上sysinfo和/proc的值,并得出介于0和10之间的数字,其中10是绝对最差的。一个简单的例子:
你有3个负载平均值(1、5、15分钟),每个平均值至少有三种可能的状态:好、变差、坏。扩展一下,每个平均值可能有六种可能的状态,将“即将”添加到我刚才提到的三个状态中。然而,所有18种可能性的结果只能从得分中减去1。重复这个过程,使用消耗的交换空间、实际VM分配(已提交)内存和其他东西...就会有一个大的条件意大利面碗 :)
这既是定义,也是一种艺术,如何实现决策过程总是比范式本身更有趣...而在布尔世界中,它相当明确。
如果你可以教会程序在评估某些情况时做出你会做出的决策并保持代码可读性,那么你就实现了模糊逻辑的一个很好的例子。

1
模糊逻辑是一种解决问题的方法论,适用于从简单、小型的嵌入式微控制器到大型、网络化、多通道PC或基于工作站的数据采集和控制系统的实现。它可以在硬件、软件或两者的组合中实现。模糊逻辑提供了一种简单的方式来根据模糊、含糊、不精确、嘈杂或缺失的输入信息得出明确的结论。模糊逻辑控制问题的方法模仿了人类做出决策的方式,只是速度更快。
模糊逻辑已被证明在专家系统和其他人工智能应用中特别有用。它还用于一些拼写检查器,以建议一个可能的单词列表来替换拼错的单词。
要了解更多信息,请访问:http://en.wikipedia.org/wiki/Fuzzy_logic

0

以下是一种经验性的答案。

一个简单(可能过于简单)的答案是,“模糊逻辑”是任何返回除了真/假或1/0之外的值的逻辑。这方面有很多变化,它们往往高度特定于领域。

例如,在我以前的生活中,我做过使用“内容相似搜索”而不是当时常见的“布尔搜索”的搜索引擎。我们的相似性系统使用代表查询和文档的加权属性向量的余弦系数,并在0..1范围内产生值。用户会提供“相关反馈”,用于将查询向理想文档的方向移动。这与某些AI系统中进行的训练有些相关,其中逻辑会因试运行结果而“受到奖励”或“受到惩罚”。

现在Netflix正在举办一场比赛,寻找更好的建议算法。请参见http://www.netflixprize.com/。实际上,所有算法都可以被描述为“模糊逻辑”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接