Python搭建模糊控制系统(scikit-fuzzy模块)

在上学的时候最早接触的智能控制算法就是模糊控制系统了,开始是使用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,修改:依据weixin_46829907网友给出的意见,修改规则设置代码和输出。(对此给予感谢)

  • 55
    点赞
  • 260
    收藏
    觉得还不错? 一键收藏
  • 76
    评论
Scikit-fuzzy是一个Python,用于实现模糊控制系统。它提供了一组函数和工具,用于模糊逻辑和模糊控制的设计和实现。与scikit-learn类似,scikit-fuzzy提供了简单易用的API,使得模糊控制器的开发变得更加方便。\[1\] 在使用scikit-fuzzy时,你可以定义模糊变量和模糊集合,并使用模糊集合的成员函数来描述变量的模糊程度。例如,你可以使用`fuzz.trimf`函数来定义一个三角形的模糊集合。在模糊控制系统中,你可以使用这些模糊集合来描述输入和输出变量的模糊程度。\[3\] 通过定义输入和输出变量的模糊集合,以及使用模糊规则来描述输入和输出之间的关系,你可以构建一个模糊控制器。模糊控制器使用模糊推理来根据输入变量的模糊程度和模糊规则来计算输出变量的模糊程度。最后,通过对输出变量的模糊集合进行解模糊,你可以得到一个具体的控制输出。\[2\] 总的来说,scikit-fuzzy是一个强大的Python,可以帮助你实现模糊控制系统。它提供了丰富的功能和工具,使得模糊控制器的设计和实现变得更加简单和方便。\[1\] #### 引用[.reference_title] - *1* [python调用scikit-fuzzy实现简单模糊逻辑控制的说明(一)](https://blog.csdn.net/sweet_chanyelo/article/details/121043232)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Python搭建模糊控制系统scikit-fuzzy模块)](https://blog.csdn.net/dcyywin8/article/details/103460871)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值