43

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

我已经阅读了维基百科条目和一些教程,甚至是“使用模糊逻辑”的编程内容(边缘检测器和单轮自控机器人),但我仍然觉得从理论到代码非常混乱。 . 对你来说,在不太复杂的定义中,什么是模糊逻辑?

4

11 回答 11

39

模糊逻辑是一种逻辑,其中状态成员本质上是一个范围为 0..1 而不是 int 0 或 1 的浮点数。您从中获得的里程是诸如您在控制系统中所做的更改之类的东西比你用幼稚的二进制逻辑得到的更自然地微调。

一个示例可能是基于活动 TCP 连接限制系统活动的逻辑。假设您将计算机上“有点太多”的 TCP 连接定义为 1000,将“太多”定义为 2000。在任何给定时间,您的系统从 0 (<= 1000) 开始处于“太多 TCP 连接”状态到 1 (>= 2000),您可以将其用作应用任何可用节流机制的系数。与只知道如何确定“太多”、完全节流或“不太多”、根本不节流的幼稚二进制逻辑相比,这更加宽容和响应系统行为。

于 2008-12-30T06:21:56.517 回答
37

我想补充一下答案(已修改),可视化模糊逻辑的好方法如下:

传统上,使用二元逻辑,您将拥有一个隶属函数为真或假的图,而在模糊逻辑系统中,隶属函数不是。

1|
 | /\
 | / \
 | / \
0|/\
 ------------
   A B C D

假设函数是“喜欢花生”

一种。有点喜欢花生
湾。真的很喜欢花生
C。有点喜欢花生
d。不喜欢花生

函数本身不必是三角形的,通常也不是(使用 ascii 艺术更容易)。

一个模糊系统可能会有很多这样的,有些甚至重叠(甚至相反),如下所示:

1| AB
 | /\ /\ A = 喜欢花生
 | / \/ \ B = 不喜欢花生
 | / /\ \
0|/ / \ \
 ------------
  A B C D

所以现在 c 是“有点喜欢花生,有点不喜欢花生”,而 d 是“真的不喜欢花生”

您可以根据该信息进行相应的编程。

希望这对那里的视觉学习者有所帮助。

于 2008-12-30T08:29:15.667 回答
11

模糊逻辑的最佳定义由其发明者Lotfi Zadeh给出:

“模糊逻辑以类似于人类解决问题的方式向计算机表示问题的方式,而模糊逻辑的本质是一切都是程度问题。”</p>

用一个篮球比赛中的简单例子可以很容易地解释用计算机解决问题类似于人类解决问题的意义;如果一个球员想要防守另一个球员,首先他应该考虑他的身高和他的比赛技巧。简单来说,如果他想要防守的球员个子很高,并且相对于他来说打得非常慢,那么他会用他的直觉来决定是否应该防守那个球员,因为对他来说存在不确定性。在这个例子中,重要的一点是属性是相对于玩家的,并且对于对手玩家的身高和演奏技巧有一定程度的影响。模糊逻辑为这种不确定的情况提供了一种确定性的方法。

有一些步骤可以处理模糊逻辑(图 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-输出模糊集

最后一步,去模糊化,用于创建一个清晰的输出,这个数字可以决定我们在游戏中应该用来保护玩家的能量。质心是创建输出的常用方法。在这个阶段,计算平均点的权重完全取决于实现。在这个应用程序中,它被认为给后卫或不后卫赋予高权重,但有时对后卫给予低权重。 (大卫·M·博格,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

因此,模糊逻辑是在不确定性下使用来做出决策并找出决策的程度。模糊逻辑的问题是随着输入数量的增加规则的数量呈指数增长。

有关更多信息及其在游戏中的可能应用,我写了一篇小文章,请查看

于 2011-10-25T20:31:21.990 回答
6

为了建立混乱的答案,形式逻辑只不过是一个归纳定义的集合,将句子映射到估值。至少,模型理论家是这样看待逻辑的。在句子布尔逻辑的情况下:

 (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。

如果您真的想了解更多关于模糊逻辑等非经典逻辑的信息,我会推荐非经典逻辑简介:从如果到是可能性与悖论

戴上我的编码器帽子,我会小心在现实世界的编程中使用模糊逻辑,因为模糊逻辑倾向于不可判定。也许它太复杂而收效甚微。例如,超值逻辑可以很好地帮助程序模型模糊。或者也许概率就足够了。简而言之,我需要确信域模型与模糊逻辑相吻合。

于 2008-12-30T06:54:12.397 回答
4

也许一个例子可以说明好处是什么:

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


这是您使用布尔逻辑实现它的方式:

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

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


现在,使用模糊逻辑,它会像这样:

  • 规则 1:每低于 24 度,将加热器调高一个档位(0 到 24 度)。
  • 规则 2:每高于 24 度,将较冷的温度调高一个档位(0 到 24 度)。

该系统将始终在 24 度左右,并且只会进行一次并且只会偶尔进行微小的调整。它也将更加节能。

于 2008-12-30T06:23:56.793 回答
3

好吧,您可以阅读“开国元勋”之一的巴特·科斯科( Bart Kosko )的作品。1994 年的“模糊思维:模糊逻辑的新科学”是可读的(并且可以通过亚马逊以相当便宜的价格二手获得)。显然,他有一本 2006 年的新书《噪音》,也很平易近人。

基本上,虽然(在我的解释中——已经好几年没有读过这些书的第一本了),模糊逻辑是关于如何处理可能有 10% 凉爽、50% 温暖和 10% 热的世界,其中不同的地方可以根据不同状态的真实程度做出决定(不,这些百分比加起来不等于 100% 并非完全偶然——尽管如果需要我会接受更正)。

于 2008-12-30T06:20:32.497 回答
3

一个很好的解释,在Fuzzy Logic Washing Machines的帮助下。

于 2008-12-30T07:25:53.317 回答
2

我知道你的意思是从概念到代码很难。我正在编写一个评分系统,它查看 Linux 系统上 sysinfo 和 /proc 的值,并得出一个介于 0 和 10 之间的数字,10 绝对是最差的。一个简单的例子:

您有 3 个平均负载(1、5、15 分钟),具有(至少)三种可能的状态,好、变坏、坏。扩展它,您平均可以有六个可能的状态,在我刚刚提到的三个状态中添加“即将到”。然而,所有 18 种可能性的结果只能从分数中减去 1。重复使用交换消耗、实际 VM 分配(提交)内存和其他东西......你有一大碗条件意大利面:)

它既是一门艺术,也是一种定义,你如何实现决策过程总是比范式本身更有趣......而在布尔世界中,它相当简单。

如果 load1 < 2 减去 1 对我来说很容易说,但根本不是很准确。

如果您可以教程序在评估某些情况时执行您会执行的操作并保持代码可读性,那么您已经实现了一个很好的模糊逻辑示例。

于 2008-12-30T06:44:43.820 回答
1

模糊逻辑是一种解决问题的方法,适用于从简单、小型、嵌入式微控制器到大型、联网、多通道 PC 或基于工作站的数据采集和控制系统的系统。它可以用硬件、软件或两者的组合来实现。模糊逻辑提供了一种基于模糊、模棱两可、不精确、嘈杂或缺失的输入信息得出明确结论的简单方法。控制问题的模糊逻辑方法模仿了一个人如何做出决定,只是速度要快得多。

模糊逻辑已被证明在专家系统和其他人工智能应用中特别有用。它还用于一些拼写检查器,以建议一个可能的单词列表来替换拼写错误的单词。

要了解更多信息,请查看:http ://en.wikipedia.org/wiki/Fuzzy_logic 。

于 2012-07-04T20:27:40.417 回答
0

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

一个简单的(可能是简单的答案)是“模糊逻辑”是任何返回除真/假或 1 / 0 以外的值的逻辑。对此有很多变体,它们往往是高度特定于域的。

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

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

于 2008-12-30T06:21:43.150 回答
0

模糊逻辑是基于人类思维方式的计算算法。当有大量输入变量时,它特别有用。给出了一个用于两个变量输入的在线模糊逻辑计算器:

http://www.cirvirlab.com/simulation/fuzzy_logic_calculator.php

于 2014-01-28T11:52:39.323 回答