📜  模糊集的常见操作示例和代码(1)

📅  最后修改于: 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()

输出结果:

triangle.png

总结

模糊集是一种重要的模糊逻辑工具,对许多实际问题建模具有很大的帮助。在Python中,使用scikit-fuzzy库可以非常方便地处理模糊集合的创建、模糊化、规则组合、反模糊化和可视化等操作。