人工智能基础 | Python实现 洗衣机模糊推理系统

运行环境


Pycharm + Anaconda3

已知一组污泥和油脂两个参数的模糊集合,以及对应的洗涤时间推理的结果。

现再给出一组污泥和油脂的模糊集合,进行模糊推理,推出洗涤时间的模糊集合

最后进行模糊决策,选择洗涤时间的档次,采用最大隶属度加权平均法 两种方法

1. 模糊控制规则


“污泥/油脂越多,洗涤时间越长”;
“污泥/油脂适中,洗涤时间适中”;
“污泥/油脂越少,洗涤时间越短”。

测试样例:
污泥 = [0,0.83,0.6]
油脂 = [0, 0.71, 0.7]

污泥和油脂都分为三个档次1、2、3 分别表示程度低、中、高
洗涤时间则分为五个档次,1、2、3、4、5分别表示时间很短、较短、中等、较高、很高

现给出控制的模糊集合污泥[0, 0.5, 1] , 油脂[0, 0.5, 1] , 洗涤时间[0, 0.25, 0.5, 0.75, 1]

其中的值表示隶属度,而对应的元素则省略。

程序运行逻辑图
在这里插入图片描述

2. 模糊规则控制矩阵


该矩阵是通过对污泥和油脂两个模糊集合进行模糊合成的结果,采用的是取大运算(V)。
实现代码

def getRuleMatrix(a, b, r, c):
    data = np.zeros(shape=(r, c), dtype=float)
    for i in range(len(a)):
        for j in range(len(b)):
                data[i][j] = max(a[i], b[j])
    return data
A = getRuleMatrix([0, 0.5, 1], [0, 0.5, 1], 3, 3)

结果
[[0. 0.5 1. ]
[0.5 0.5 1. ]
[1. 1. 1. ]]

3. 模糊关系


规则控制矩阵和洗涤时间的模糊关系,表示的是污泥和油脂进行模糊合成后的模糊集合洗涤时间再次进行模糊合成的结果

需要注意的是,再次运算是[3 x 3] 的矩阵与 [1 x 5] 矩阵的计算,这里采用降维将[3 x 3] 转化为[9 x 1] 这样就可以和[1 x 5]矩阵进行模糊合成,最后生成一个[9 x 5] 的模糊关系矩阵。而且这次运算是Λ取小。
实现代码

def getRelation(A, B):
    A = [y for x in A for y in x]
    data = np.zeros(shape=(len(A), len(B)), dtype=float)
    for i in range
  • 22
    点赞
  • 134
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
好的,这是一个非常有趣的问题!以下是一个简单的Python代码实现,用于模糊推理洗衣机的操作: ```python import numpy as np # 设定洗衣机的输入和输出变量 temperature = np.arange(0, 101, 1) dirtiness = np.arange(0, 101, 1) water_level = np.arange(0, 101, 1) spin_speed = np.arange(0, 101, 1) drying_time = np.arange(0, 181, 1) # 设定洗衣机规则库 rules = [ {'temperature': [0, 30, 60, 90], 'dirtiness': [0, 25, 50, 75], 'water_level': [0, 30, 60, 90], 'spin_speed': [0, 25, 50, 75], 'drying_time': [0, 60, 120, 180]}, {'temperature': [30, 60, 90, 100], 'dirtiness': [25, 50, 75, 100], 'water_level': [30, 60, 90, 100], 'spin_speed': [25, 50, 75, 100], 'drying_time': [60, 120, 180]} ] # 设定洗衣机模糊推理函数 def fuzzy_inference(temperature_value, dirtiness_value): # 初始化输出变量 water_level_value = 0 spin_speed_value = 0 drying_time_value = 0 # 遍历规则库 for rule in rules: # 计算温度和污垢程度的隶属度 temperature_degree = np.interp(temperature_value, rule['temperature'], [0, 1, 1, 0]) dirtiness_degree = np.interp(dirtiness_value, rule['dirtiness'], [0, 1, 1, 0]) # 取最小值作为规则的隶属度 rule_degree = min(temperature_degree, dirtiness_degree) # 更新输出变量 water_level_value = max(water_level_value, np.interp(rule_degree, [0, 1], rule['water_level'])) spin_speed_value = max(spin_speed_value, np.interp(rule_degree, [0, 1], rule['spin_speed'])) drying_time_value = max(drying_time_value, np.interp(rule_degree, [0, 1], rule['drying_time'])) return water_level_value, spin_speed_value, drying_time_value # 测试模糊推理函数 print(fuzzy_inference(50, 70)) # (60.0, 50.0, 120.0) ``` 在这个代码中,我们首先定义了五个输入和输出变量,分别是温度、污垢程度、水位、转速和烘干时间。然后我们定义了一个简单的规则库,其中包含两个规则,每个规则都包含五个变量的隶属度函数。 接下来,我们定义了一个模糊推理函数`fuzzy_inference`,它接受温度和污垢程度作为输入,然后通过遍历规则库来计算水位、转速和烘干时间的输出。我们使用`numpy`库中的`interp`函数来计算隶属度。最后,我们测试了一下这个函数,输入温度为50,污垢程度为70,输出水位为60,转速为50,烘干时间为120。 当然,这只是一个非常简单的例子,实际上你需要更详细地定义变量的隶属度函数以及更复杂的规则库来使得这个模糊推理系统更加准确和实用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值