📜  模糊逻辑|集合2(古典和模糊集合)(1)

📅  最后修改于: 2023-12-03 15:26:51.527000             🧑  作者: Mango

模糊逻辑与集合2(古典和模糊集合)

什么是古典集合?

古典集合是基础的集合理论,是指一个元素要么属于一个集合,要么不属于一个集合。例如,所有正整数可以组成一个集合,而负整数则不能。

N = {1, 2, 3, ...}
什么是模糊集合?

相比古典集合,模糊集合更接近于实际问题,因为现实生活中的很多概念无法被严格定义,如“高矮胖瘦”等。通过引入不精确的概念,模糊集合可以更好地描述这些实际问题。

例如,假设我们要定义人的高矮,我们可以通过模糊集合来描述:

H = {(height, degree) | 0 \leq degree \leq 1}

其中,height是人的身高,degree表示这个人“高”的程度。例如, 一个人身高为170cm,我们可以定义他属于高的程度为0.6,即(170, 0.6) 属于 H。

为什么要使用模糊逻辑?

模糊逻辑可以处理这些不确定和模糊的问题,它是建立在经典逻辑的基础上的。经典逻辑只有0和1,而模糊逻辑可以处理0和1之间的情况。

例如,求两个人之间的相似度,我们可以通过模糊逻辑来描述:

S = {(person1, person2, degree) | 0 \leq degree \leq 1}

其中,person1和person2是两个人,degree表示他们的相似程度。

通过模糊逻辑,我们可以处理一些不确定的问题,更接近于实际问题。

怎么在代码中使用模糊逻辑?

在代码中,我们可以使用模糊数学来实现模糊逻辑。下面是使用Python实现模糊数学的一个示例:

import math

class FuzzyNumber(object):
    def __init__(self, val, *funcs):
        self.val = val
        self.funcs = funcs

    def __getitem__(self, item):
        return self.funcs[item]

    def __str__(self):
        return str(self.val)

    def __repr__(self):
        return str(self)

    def __add__(self, other):
        val = self.val + other.val
        funcs = [min(self[i], other[i]) for i in range(len(self))]
        return FuzzyNumber(val, *funcs)

    def __mul__(self, other):
        val = self.val * other.val
        funcs = [min(self[i], other[i]) for i in range(len(self))]
        return FuzzyNumber(val, *funcs)

    def __truediv__(self, other):
        val = self.val / other.val
        funcs = [min(self[i], 1/other[i]) for i in range(len(self))]
        return FuzzyNumber(val, *funcs)

    def __sub__(self, other):
        val = self.val - other.val
        funcs = [max(self[i], 1 - other[i]) for i in range(len(self))]
        return FuzzyNumber(val, *funcs)

    def __eq__(self, other):
        return self.val == other.val and all(self[i] == other[i] for i in range(len(self)))

    def __le__(self, other):
        return self.val <= other.val and all(self[i] <= other[i] for i in range(len(self)))

def fuzzy_triangle(x, a, b, c):
    if x <= a:
        return 0
    elif a <= x <= b:
        return (x - a) / (b - a)
    elif b <= x <= c:
        return (c - x) / (c - b)
    else:
        return 0

def main():
    # 定义模糊集合T,T包含三个模糊数{t1, t2, t3}
    t1 = FuzzyNumber(0.1, fuzzy_triangle, 0.1, 0.3, 0.5)
    t2 = FuzzyNumber(0.6, fuzzy_triangle, 0.4, 0.6, 0.8)
    t3 = FuzzyNumber(0.9, fuzzy_triangle, 0.7, 0.9, 1.0)
    T = [t1, t2, t3]

    # 计算模糊集合T的平均值
    sum_t = sum(T)
    avg_t = sum_t / len(T)
    print(avg_t)

if __name__ == '__main__':
    main()

在这里,我们定义了模糊数FuzzyNumber和模糊函数fuzzy_triangle,模糊数可以用来表示模糊集合中的元素,模糊函数用来计算模糊数的值。

我们还定义了一个模糊集合T,包含三个模糊数。通过这些定义,我们可以使用模糊逻辑来计算T的平均值。