博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python搭建模糊控制系统(scikit-fuzzy模块)
阅读量:2577 次
发布时间:2019-05-11

本文共 2483 字,大约阅读时间需要 8 分钟。

在上学的时候最早接触的智能控制算法就是模糊控制系统了,开始是使用MATLAB来进行软件实现的。工作后由于公司的版权意识,而且MATLAB原版很贵┑( ̄Д  ̄)┍,这条路就作罢了。后来接触Python,发现功能很强大,但在百度搜索中文资料的时候,很少有关于Python的模糊控制实现,但在搜索模糊控制模块的时候发现了scikit-fuzzy模块,它可以实现模糊控制系统。

 

安装包:pip install scikit-fuzzy

引用包:import skfuzzy as fuzz

其他使用的包引用如下:

import numpy as np

import skfuzzy.control as ctrl

 

以洗衣机洗衣粉投放量控制为例,令污渍stain和油渍oil为输入变量,洗衣粉powder为输出。假定输入和输出范围均为1~10。步骤如下:

步骤1.引用相关模块并设置各个变量范围:

import numpy as np

import skfuzzy as fuzz

import skfuzzy.control as ctrl

 

x_stain_range=np.arange(1,11,1,np.float32)

x_oil_range=np.arange(1,11,1,np.float32)

y_powder_range=np.arange(1,11,1,np.float32)

 

步骤2.定义输入输出模糊集和其隶属度函数(使用三角函数),同时定义输出解模糊规则。模糊集如下:

污渍(小)=N,污渍(中)=M,污渍(大)=P

油渍(小)=N,油渍(中)=M,油渍(大)=P

洗衣粉(小)=N,洗衣粉(中)=M,洗衣粉(大)=P

代码:

# 创建模糊控制变量

x_stain=ctrl.Antecedent(x_stain_range, 'stain')

x_oil=ctrl.Antecedent(x_oil_range, 'oil')

y_powder=ctrl.Consequent(y_powder_range, 'powder')

 

# 定义模糊集和其隶属度函数

x_stain['N']=fuzz.trimf(x_stain_range,[1,1,5])

x_stain['M']=fuzz.trimf(x_stain_range,[1,5,10])

x_stain['P']=fuzz.trimf(x_stain_range,[5,10,10])

x_oil['N']=fuzz.trimf(x_oil_range,[1,1,5])

x_oil['M']=fuzz.trimf(x_oil_range,[1,5,10])
x_oil['P']=fuzz.trimf(x_oil_range,[5,10,10])
y_powder['N']=fuzz.trimf(y_powder_range,[1,1,5])
y_powder['M']=fuzz.trimf(y_powder_range,[1,5,10])
y_powder['P']=fuzz.trimf(y_powder_range,[5,10,10])

 

# 设定输出powder的解模糊方法——质心解模糊方式

y_powder.defuzzify_method='centroid'

 

步骤3.建立模糊控制规则,并初始化控制系统和运行环境。规则如下表所示:

 

污渍stain

N

M

P

油渍

oil

N

N

N

M

M

M

M

M

P

M

P

P

代码:

# 输出为N的规则

rule0 = ctrl.Rule(antecedent=((x_stain['N'] & x_oil['N']) |

                              (x_stain['M'] & x_oil['N']) ),

                  consequent=y_powder['N'], label='rule N')

# 输出为M的规则

rule1 = ctrl.Rule(antecedent=((x_stain['P'] & x_oil['N']) |

                              (x_stain['N'] & x_oil['M']) |

                              (x_stain['M'] & x_oil['M']) |

                              (x_stain['P'] & x_oil['M']) |

                              (x_stain['N'] & x_oil['P']) ),

                  consequent=y_powder['M'], label='rule M')

# 输出为P的规则

rule2 = ctrl.Rule(antecedent=((x_stain['M'] & x_oil['P']) |

                              (x_stain['P'] & x_oil['P']) ),

                  consequent=y_powder['P'], label='rule P')

# 系统和运行环境初始化

system = ctrl.ControlSystem(rules=[rule0, rule1, rule2])

sim = ctrl.ControlSystemSimulation(system)

 

步骤4.系统建立完成后,通过输入变量值来查看系统的输出

令输入污渍为4,油渍为7

代码:

sim.input['stain'] = 4

sim.input['oil'] = 7

sim.compute()   # 运行系统

output_powder = sim.output['powder']

 

# 打印输出结果

print(output_powder)

输出结果:

5.750558217558256

将上方所有代码合并即可运行。

 

参考:

https://pythonhosted.org/scikit-fuzzy/overview.html (可能因为是境外服务器的原因,有时会上不去)

https://github.com/scikit-fuzzy/scikit-fuzzy

 

202005261118,修改:依据网友给出的意见,修改规则设置代码和输出。(对此给予感谢)

转载地址:http://pszfd.baihongyu.com/

你可能感兴趣的文章
【LEETCODE】299-Bulls and Cows
查看>>
【LEETCODE】223-Rectangle Area
查看>>
【LEETCODE】12-Integer to Roman
查看>>
【学习方法】如何分析源代码
查看>>
【LEETCODE】61- Rotate List [Python]
查看>>
【LEETCODE】143- Reorder List [Python]
查看>>
【LEETCODE】82- Remove Duplicates from Sorted List II [Python]
查看>>
【LEETCODE】86- Partition List [Python]
查看>>
【LEETCODE】147- Insertion Sort List [Python]
查看>>
【算法】- 动态规划的编织艺术
查看>>
用 TensorFlow 让你的机器人唱首原创给你听
查看>>
对比学习用 Keras 搭建 CNN RNN 等常用神经网络
查看>>
深度学习的主要应用举例
查看>>
word2vec 模型思想和代码实现
查看>>
怎样做情感分析
查看>>
用深度神经网络处理NER命名实体识别问题
查看>>
用 RNN 训练语言模型生成文本
查看>>
RNN与机器翻译
查看>>
用 Recursive Neural Networks 得到分析树
查看>>
RNN的高级应用
查看>>