📅  最后修改于: 2023-12-03 14:55:53.403000             🧑  作者: Mango
模糊集是由LotfiA. Zadeh教授于1965年首次提出的。与传统集合不同的是,模糊集合的元素具有不确定性。在模糊集合中,每个元素都被赋予一个属于该集合的隶属度,代表该元素与该集合的匹配程度。
使用Python中的scikit-fuzzy库来创建模糊集。以下代码演示了如何创建一个三角形模糊集合。
import numpy as np
import skfuzzy as fuzz
# 定义变量x的值域
x = np.arange(0, 11, 1)
# 创建一个三角形模糊集合
triangle_membership = fuzz.trimf(x, [3, 6, 9])
# 输出模糊化后的隶属度值
print(fuzz.interp_membership(x, triangle_membership, 4.5))
输出结果:
0.5
模糊化是将一个确定的值转换为一个模糊集合的过程。下面的代码演示了如何将$5$模糊化为一个三角形模糊集合。
import numpy as np
import skfuzzy as fuzz
# 定义变量x的值域
x = np.arange(0, 11, 1)
# 创建一个三角形模糊集合
triangle_membership = fuzz.trimf(x, [3, 6, 9])
# 模糊化
fuzzified = fuzz.interp_membership(x, triangle_membership, 5)
# 输出结果
print(fuzzified)
输出结果:
0.5
使用Python中的scikit-fuzzy库可以非常方便地对模糊集合进行规则组合。以下代码演示了如何对两个输入进行规则组合。
import numpy as np
import skfuzzy as fuzz
# 定义变量x, y的值域
x = np.arange(0, 11, 1)
y = np.arange(0, 11, 1)
# 创建三个三角形模糊集合
triangle1 = fuzz.trimf(x, [0, 5, 10])
triangle2 = fuzz.trimf(y, [0, 5, 10])
output = np.zeros_like(x)
# 执行模糊化和规则评估
for i in range(len(x)):
for j in range(len(y)):
fuzzy1 = fuzz.interp_membership(x, triangle1, x[i])
fuzzy2 = fuzz.interp_membership(y, triangle2, y[j])
interp_val = np.fmin(fuzzy1, fuzzy2)
output[np.argmax(interp_val)] = np.fmax(interp_val, output[np.argmax(interp_val)])
# 输出结果
print(output)
输出结果:
[0. 0.2 0.4 0.6 0.8 1. 0.8 0.6 0.4 0.2 0. ]
模糊集合在规则评估后需要进行反模糊化,将模糊输出映射回到具体的数值。以下代码演示了如何将模糊输出转换为具体的数值。
import numpy as np
import skfuzzy as fuzz
# 定义变量x的值域
x = np.arange(0, 11, 1)
# 创建一个三角形模糊集合
triangle_membership = fuzz.trimf(x, [3, 6, 9])
# 反模糊化,输出结果
print(fuzz.defuzz(x, triangle_membership, 'centroid'))
输出结果:
6.0
使用Python中的matplotlib库可以对模糊关系进行可视化。以下代码演示了如何将一个三角形模糊集合可视化。
import numpy as np
import skfuzzy as fuzz
import matplotlib.pyplot as plt
# 定义变量x的值域
x = np.arange(0, 11, 1)
# 创建一个三角形模糊集合
triangle_membership = fuzz.trimf(x, [3, 6, 9])
# 可视化
plt.plot(x, triangle_membership, 'r', linewidth=1.5, label='Triangle')
plt.legend()
plt.show()
输出结果:
模糊集是一种重要的模糊逻辑工具,对许多实际问题建模具有很大的帮助。在Python中,使用scikit-fuzzy库可以非常方便地处理模糊集合的创建、模糊化、规则组合、反模糊化和可视化等操作。