Python模糊控制
概念和术语
模糊逻辑(Fuzzy Logic)是一种方法论,其基础是可以在连续统一体上表达某物的“真实性”。这就是说某事不是真或假,而是部分正确或部分错误。
模糊变量(fuzzy variable)具有明确的值(crisp value),该值在预定义的域(在模糊逻辑术语中,称为宇宙(universe))上取一些数字。明确的值是我们如何使用普通数学来思考变量。例如,如果我的模糊变量是给某人多少小费,它的范围将是 0 到 25%,并且它可能采用 15% 的清晰值。
模糊变量也有几个用于描述变量的术语。这些项合在一起就是模糊集(fuzzy set),可以用来描述模糊变量的“模糊值”。这些术语通常是形容词,如“差”、“平庸”和“好”。每个术语都有一个隶属函数(membership function),它定义了一个明确的值如何在 0 到 1 的范围内映射到该术语。本质上,它描述了某物“有多好”。
所以,回到小费的例子,一个“好小费”可能有一个成员函数,它有一个介于 15% 和 25% 之间的非零值,其中 25% 是一个“完全好的小费”(即,它的成员资格是 1.0)并且15% 是一个“勉强好的小费”(即它的成员是 0.1)。
模糊控制系统使用一组规则链接模糊变量。这些规则只是描述一个或多个模糊变量如何与另一个相关的映射。这些是用 IF-THEN 语句表示的; IF 部分称为前件(antecedent ),THEN 部分称为后件(consequent)。在小费示例中,一条规则可能是“如果服务好,那么小费也不错”。与如何使用规则根据前提值计算结果值相关的精确数学超出了本入门指南的范围。
小费问题
“小费问题”通常用于说明模糊逻辑原理从一组紧凑、直观的专家规则中生成复杂行为的能力。
以小费为例,如果我们要创建一个控制器来估计我们应该在餐厅给的小费,我们可以这样构建它:
-
前导网络(输入)[Antecednets (Inputs)]
- 服务
- Universe(即明确的值范围):女服务员的服务有多好,从 1 到 10 打分?[service Universe (ie, crisp value range): How good was the service of the waitress, on a scale of 1 to 10?]
- 模糊集(即模糊值范围):差、可接受、惊人[Fuzzy set (ie, fuzzy value range): poor, acceptable, amazing]
- 食物
- Universe:从 1 到 10 打分,食物有多好吃?[food quality Universe: How tasty was the food, on a scale of 1 to 10? ]
- 模糊集:坏的,体面的,伟大的 [Fuzzy set: bad, decent, great ]
- 服务
-
结果(输出)[Consequents (Outputs) ]
- Universe:我们应该给多少小费,从 0% 到 25% [ tip Universe: How much should we tip, on a scale of 0% to 25%]
- 模糊集:低、中、高 [Fuzzy set: low, medium, high]
-
Rules
- 如果服务好或食品质量好,那么小费就会很高。[IF the service was good or the food quality was good, THEN the tip will be high. ]
- 如果服务是平均的,那么小费将是中等的。[IF the service was average, THEN the tip will be medium.]
- 如果服务很差而且食物质量很差,那么小费就会很低。[IF the service was poor and the food quality was poor THEN the tip will be low. ]
-
Usage
- If I tell this controller that I rated: 如果我告诉这个控制器我评价了:
- the service as 9.8, and 服务为 9.8,和
- the quality as 6.5, 质量为6.5,
- it would recommend I leave: 它会建议我给出的小费参考:
- a 20.2% tip. 20.2% 的小费。
- If I tell this controller that I rated: 如果我告诉这个控制器我评价了:
代码实战
1.选择输入输出模糊集
2.定义输入输出隶属度函数(不同的隶属度函数,会导致不同的控制特性)
3.建立模糊控制表
4.建立模糊控制规则
5.模糊推理
6.反模糊化
7.输出结果绘制结果3D图
例子:输入为服务(service)和质量(quality)两个参数,输出为得到的小费(tip)
输入变量
关于用餐时给多少小费的决定有许多变量。考虑其中两个:
quality:食物的质量service:服务质量
输出变量
输出变量只是小费金额,以百分比表示:
tip: 添加为小费的账单百分比
代码逻辑
出于讨论的目的,假设我们需要输入变量和输出变量的“高”、“中”和“低”隶属函数。这些在 scikit-fuzzy 中定义如下
import numpy as np
import skfuzzy as fuzz
import matplotlib.pyplot as plt
# Generate universe variables
# * Quality and service on subjective ranges [0, 10]
# * Tip has a range of [0, 25] in units of percentage points
x_qual = np.arange(0, 11, 1)
x_serv = np.arange(0, 11, 1)
x_tip = np.arange(0, 26, 1)
# Generate fuzzy membership functions
qual_lo = fuzz.trimf(x_qual, [0, 0, 5])
qual_md = fuzz.trimf(x_qual, [0, 5, 10])
qual_hi = fuzz.trimf(x_qual, [5, 10, 10])
serv_lo = fuzz.trimf(x_serv, [0, 0, 5])
serv_md = fuzz.trimf(x_serv, [0,

本文介绍了模糊逻辑的概念,如模糊变量和隶属函数,并通过Python的scikit-fuzzy库展示了如何创建一个模糊控制系统来决定餐厅小费的百分比。模糊规则如“如果服务好或食物质量好,小费就高”被定义并应用于输入的模糊变量。通过模糊推理和反模糊化过程,最终得出建议的小费百分比。


被折叠的 条评论
为什么被折叠?



