精华内容
下载资源
问答
  • Python实现模糊控制系统

    千次阅读 2020-08-30 10:17:13
    Python实现模糊控制系统 // python实现模糊控制系统(服务质量和小费问题) import numpy as np import skfuzzy as fuzz from skfuzzy import control as ctrl # New Antecedent/Consequent objects hold universe ...

    Python实现模糊控制系统

    // python实现模糊控制系统(服务质量和小费问题)
    import numpy as np
    import skfuzzy as fuzz
    from skfuzzy import control as ctrl
    
    # New Antecedent/Consequent objects hold universe variables and membership
    # functions
    quality = ctrl.Antecedent(np.arange(0, 11, 1), 'quality')
    service = ctrl.Antecedent(np.arange(0, 11, 1), 'service')
    tip = ctrl.Consequent(np.arange(0, 26, 1), 'tip')
    
    # Auto-membership function population is possible with .automf(3, 5, or 7)
    quality.automf(3)
    service.automf(3)
    
    # Custom membership functions can be built interactively with a familiar,
    # Pythonic API
    tip['low'] = fuzz.trimf(tip.universe, [0, 0, 13])
    tip['medium'] = fuzz.trimf(tip.universe, [0, 13, 25])
    tip['high'] = fuzz.trimf(tip.universe, [13, 25, 25])
    # You can see how these look with .view()
    quality['average'].view()
    service.view()
    tip.view()
    rule1 = ctrl.Rule(quality['poor'] | service['poor'], tip['low'])
    rule2 = ctrl.Rule(service['average'], tip['medium'])
    rule3 = ctrl.Rule(service['good'] | quality['good'], tip['high'])
    
    rule1.view()
    
    tipping_ctrl = ctrl.ControlSystem([rule1, rule2, rule3])
    tipping = ctrl.ControlSystemSimulation(tipping_ctrl)
    
    # Pass inputs to the ControlSystem using Antecedent labels with Pythonic API
    # Note: if you like passing many inputs all at once, use .inputs(dict_of_data)
    tipping.input['quality'] = 6.5
    tipping.input['service'] = 9.8
    
    # Crunch the numbers
    tipping.compute()
    print(tipping.output['tip'])
    tip.view(sim=tipping)
    
    展开全文
  • Python搭建模糊控制系统(scikit-fuzzy模块)

    千次阅读 多人点赞 2019-12-09 16:56:26
    后来接触Python,发现功能很强大,但在百度搜索中文资料的时候,很少有关于Python模糊控制实现,但在搜索模糊控制模块的时候发现了scikit-fuzzy模块,它可以实现模糊控制系统。 安装包:pip ins...

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

    展开全文
  • Python模糊控制库使用(基本操作与仿真结果3D显示)

    千次阅读 多人点赞 2020-07-12 14:57:35
    Python模糊控制库使用模糊控制库安装示例定义模糊控制变量模糊隶属函数模糊规则激活模糊控制器完整代码 模糊控制库安装 模糊控制库github:链接: Github. python安装:pip install scikit-fuzzy 示例 例子:输入为...

    模糊控制库安装

    模糊控制库github:链接: Github.
    python pip安装:pip install scikit-fuzzy

    示例

    1.选择输入输出模糊集
    2.定义输入输出隶属度函数(不同的隶属度函数,会导致不同的控制特性)
    3.建立模糊控制表
    4.建立模糊控制规则
    5.模糊推理
    6.反模糊化
    7.输出结果绘制结果3D图
    例子:输入为服务(service)和质量(quality)两个参数,输出为得到的小费(tip)

    定义模糊控制变量

    1.定义模糊控制变量,质量和服务的取值范围为[0,10],小费范围为[0,25]

    x_qual = np.arange(0, 11, 1)
    x_serv = np.arange(0, 11, 1)
    x_tip  = np.arange(0, 26, 1)
    quality = ctrl.Antecedent(x_qual, 'quality')
    service = ctrl.Antecedent(x_serv, 'service')
    tip = ctrl.Consequent(x_tip, 'tip')
    

    模糊隶属函数

    2.生成模糊隶属函数,这里是三角形隶属度函数,可以自己定义隶属度范围,也可以用automf函数自动生成

    #定义质量差时的三角隶属度函数横坐标
    quality['L'] = fuzz.trimf(x_qual, [0, 0, 5])  
    quality['M'] = fuzz.trimf(x_qual, [0, 5, 10])
    quality['H'] = fuzz.trimf(x_qual, [5, 10, 10])
    #若使用automf自动生成代码为 
    ##names = ['L', 'M', 'H']
    ##quality.automf(names=names)  #自动分配
    #定义服务差时的三角隶属度函数横坐标
    service['L'] = fuzz.trimf(x_serv, [0, 0, 5]) 
    service['M'] = fuzz.trimf(x_serv, [0, 5, 10])
    service['H'] = fuzz.trimf(x_serv, [5, 10, 10])
    #定义小费的三角隶属度函数横坐标
    tip['L'] = fuzz.trimf(x_tip, [0, 0, 13]) 
    tip['M'] = fuzz.trimf(x_tip, [0, 13, 25])
    tip['H'] = fuzz.trimf(x_tip, [13, 25, 25])
    #解模糊方法采用质心法
    tip.defuzzify_method='centroid'
    #可视化这些输入输出和隶属函数
    # quality.automf(3) #自动分配几种程度NS ZO PS
    #service.automf(3)
    #quality.view()
    # service.view()
    # plt.show()
    

    质量隶属度函数
    服务隶属度函数

    模糊规则

    3.制定模糊规则,即服务,质量和小费的关系
    规则表

    rule1=ctrl.Rule(antecedent=((quality['L'] & service['L'])|(quality['L'] & service['M'])|(quality['M'] & service['L'])),consequent=tip['L'],label='Low')
    rule2=ctrl.Rule(antecedent=((quality['M']&service['M'])|(quality['L']&service['H'])|(quality['H']&service['L'])),consequent=tip['M'],label='Medium')
    rule3=ctrl.Rule(antecedent=((quality['M']&service['H'])|(quality['H']&service['M'])|(quality['H']&service['H'])),consequent=tip['H'],label='High')
    #rule2.view() 	#这个图我没看懂,有哪位看懂了可以告知一下
    

    激活模糊控制器

    4.激活模糊控制器,输入质量值6.5,服务值为9.8时,输出小费的值,并绘制结果

    tipping_ctrl = ctrl.ControlSystem([rule1, rule2, rule3])
    tipping = ctrl.ControlSystemSimulation(tipping_ctrl)
    tipping.input['quality'] = 6.5
    tipping.input['service'] = 9.8
    tipping.compute()
    print (tipping.output['tip'])
    tip.view(sim=tipping)
    plt.show()
    

    结果

    3D可视化结果

    模糊控制库也可输出类似于MATLAB的3D结果图,代码如下:
    逐间隔输入控制参数,输出结果并绘制在3D图中

    upsampled = np.linspace(0, 11, 21)	      #这里的范围不能错,测试参数步距
    x, y= np.meshgrid(upsampled, upsampled)
    z = np.zeros_like(x)
    ##tipping.input['angle'] = 0
    ##tipping.input['distance'] = 0
    ##tipping.compute()
    ##print (tipping.output['out'])
    #out.view(sim=tipping)
    pp=[]
    for i in range(0,21):
        for j in range(0,21):
            tipping.input['quality']=x[i, j]
            tipping.input['service'] = y[i, j]
            tipping.compute()
            z[i, j] = tipping.output['tip']
            pp.append(z[i,j])
    print('max:',max(pp))
    print('min:',min(pp))
    
    import matplotlib.pyplot as plt
    from mpl_toolkits.mplot3d import Axes3D  
    fig = plt.figure(figsize=(8, 8))    #定义画布大小
    ax = fig.add_subplot(111, projection='3d')
    surf = ax.plot_surface(x, y, z, rstride=1, cstride=1, cmap='viridis',linewidth=0.4, antialiased=True)
    #cset = ax.contourf(x, y, z, zdir='z', offset=-2.5, cmap='viridis', alpha=0.5)
    #cset = ax.contourf(x, y, z, zdir='x', offset=3, cmap='viridis', alpha=0.5)
    #cset = ax.contourf(x, y, z, zdir='y', offset=3, cmap='viridis', alpha=0.5)
    ax.view_init(30, 200)				#设置观察角度
    plt.show()
    

    下图为输出仿真结果3D图
    在这里插入图片描述

    完整代码

    import numpy as np
    import skfuzzy as fuzz
    import matplotlib.pyplot as plt
    from skfuzzy import control as ctrl
    import math
    #  质量和服务范围为[0,10]
    #  小费范围为[0,25]
    x_qual = np.arange(0, 11, 1)
    x_serv = np.arange(0, 11, 1)
    x_tip  = np.arange(0, 26, 1)
    # 定义模糊控制变量
    quality = ctrl.Antecedent(x_qual, 'quality')
    service = ctrl.Antecedent(x_serv, 'service')
    tip = ctrl.Consequent(x_tip, 'tip')
    # 生成模糊隶属函数
    quality['L'] = fuzz.trimf(x_qual, [0, 0, 5])  #定义质量差时的三角隶属度函数横坐标
    quality['M'] = fuzz.trimf(x_qual, [0, 5, 10])
    quality['H'] = fuzz.trimf(x_qual, [5, 10, 10])
    service['L'] = fuzz.trimf(x_serv, [0, 0, 5])  #定义服务差时的三角隶属度函数横坐标
    service['M'] = fuzz.trimf(x_serv, [0, 5, 10])
    service['H'] = fuzz.trimf(x_serv, [5, 10, 10])
    tip['L'] = fuzz.trimf(x_tip, [0, 0, 13])      #定义小费的三角隶属度函数横坐标
    tip['M'] = fuzz.trimf(x_tip, [0, 13, 25])
    tip['H'] = fuzz.trimf(x_tip, [13, 25, 25])
    
    tip.defuzzify_method='centroid'
    #可视化这些输入输出和隶属函数
    # quality.automf(3)
    #service.automf(3)#三种程度
    #quality.view()
    # service.view()
    # plt.show()
    #规则
    rule1=ctrl.Rule(antecedent=((quality['L'] & service['L'])|(quality['L'] & service['M'])|(quality['M'] & service['L'])),consequent=tip['L'],label='Low')
    rule2=ctrl.Rule(antecedent=((quality['M']&service['M'])|(quality['L']&service['H'])|(quality['H']&service['L'])),consequent=tip['M'],label='Medium')
    rule3=ctrl.Rule(antecedent=((quality['M']&service['H'])|(quality['H']&service['M'])|(quality['H']&service['H'])),consequent=tip['H'],label='High')
    
    rule2.view()
    tipping_ctrl = ctrl.ControlSystem([rule1, rule2, rule3])
    tipping = ctrl.ControlSystemSimulation(tipping_ctrl)
    # 测试输出
    # tipping.input['quality'] = 6.5
    # tipping.input['service'] = 9.8
    # tipping.compute()
    # print (tipping.output['tip'])
    # tip.view(sim=tipping)
    # plt.show()
    
    # 仿真结果3D图输出,使用下列代码时请注释掉上面的测试输出
    upsampled = np.linspace(0, 11, 21)#这里的范围不能错
    x, y= np.meshgrid(upsampled, upsampled)
    z = np.zeros_like(x)
    ##tipping.input['angle'] = 0
    ##tipping.input['distance'] = 0
    ##tipping.compute()
    ##print (tipping.output['out'])
    #out.view(sim=tipping)
    pp=[]
    for i in range(0,21):
        for j in range(0,21):
    
            tipping.input['quality']=x[i, j]
            tipping.input['service'] = y[i, j]
            tipping.compute()
            z[i, j] = tipping.output['tip']
            pp.append(z[i,j])
    print('max:',max(pp))
    print('min:',min(pp))
    
    import matplotlib.pyplot as plt
    from mpl_toolkits.mplot3d import Axes3D  
    fig = plt.figure(figsize=(8, 8))   #定义画布大小
    ax = fig.add_subplot(111, projection='3d')
    surf = ax.plot_surface(x, y, z, rstride=1, cstride=1, cmap='viridis',linewidth=0.4, antialiased=True)
    #cset = ax.contourf(x, y, z, zdir='z', offset=-2.5, cmap='viridis', alpha=0.5)
    #cset = ax.contourf(x, y, z, zdir='x', offset=3, cmap='viridis', alpha=0.5)
    #cset = ax.contourf(x, y, z, zdir='y', offset=3, cmap='viridis', alpha=0.5)
    ax.view_init(30, 200)#设置观察角度
    plt.show()
    

    附上模糊控制库网站,有更详细说明和例子:
    链接: 模糊控制网站.

    展开全文
  • 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...# 创建模糊控制变量 x_stain=ctrl.Antecedent(x_stain_range.
    
    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)
    # 创建模糊控制变量
    
    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'
    
    
    # 输出为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)
    
    
    
    sim.input['stain'] = 4
    
    sim.input['oil'] = 7
    
    sim.compute()   # 运行系统
    
    output_powder = sim.output['powder']
    
     
    
    # 打印输出结果
    
    print(output_powder)
    
    展开全文
  • 模糊推理系统———python原理及说明设计洗衣洗涤时间模糊控制题目分析做题步骤及相应代码面积重心法解模糊总结 原理及说明 模糊推理所处理的事物自身是模糊的,概念本身没有明确的外延,一个对象是否符合这个概念...
  • p_ = epm.EarthPressure(p, v, n) p = p_ print(p) pList.append(p) plt.plot(pList) plt.show() 编写模糊控制器controller.py import numpy as np class FuzzyController: def __init__(self, n0): self....
  • 模糊集合理论、模糊语言变量及模糊推理为一体的一类控制方法。 (3)特点: a、不需要被控对象的数学模型; b、反应人类智慧; c、易于被人接受; d、构造容易; e、鲁棒性和适应性好。 2.2 模糊集合 2.2.1 概念:...
  • 基于numpy和matplotlib的模糊逻辑python库 版本 0.0.1 安装: pip install fuzzy_logic 包含: FuzzyRel - 模糊关系类。 FuzzySet - 模糊集类。 FuzzyPlot - 旨在使用 matplotlib 轻松绘制模糊图的类(目前...
  • Python中的模糊逻辑控制库 作者:,博士。 分支 地位 覆盖范围 pyfuzzylite是根据许可的。 也可提供商业许可证,请联系。 强烈建议您购买的许可证,以支持FuzzyLite库的开发。 是最新的(很可能是)最好的图形用户...
  • 模糊控制应用实例——洗衣机的模糊控制详解 模糊控制的一般流程(以洗衣机为例) (1)确定模糊控制器的结构 控制器的输入为衣物的污泥和油脂 控制器的输出为洗涤时间 (2)定义输入、输出的模糊集 污泥定义为3个...
  • 机器人控制算法----模糊控制模糊控制原理导纳控制学习参数模糊控制代码实现 最近有一点空闲时间,想学学机器人控制算法和代码实现,前期重点介绍控制理论公式及Python实现算法,后期会逐渐加入C++实现算法的代码。...
  • Matlab 利用M文件产生模糊控制器 有位朋友咨询了一个问题,想要通过粒子群优化模糊控制的论域范围,在这种情况下,就无法直接通过matlab的fuzzy工具箱来自动生成fis模糊文件,需要通过M文件生成模糊控制器,并写成...
  • import numpy as np c=np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]]) print(c.shape) print('\n') print(c) print('\n') print(c.reshape(-1,3))
  • 洗衣机模糊控制推理系统fis,直接用MATLAB模糊推理工具箱打开调用。
  • 控制算法(二)—— 模糊控制算法

    千次阅读 2020-03-19 17:24:29
    模糊控制是以模糊集理论、模糊语言变量和模糊逻辑推理为基础的一种智能控制方法,它是从行为上模仿人的模糊推理和决策过程的一种智能控制算法。模糊控制首先将操作人员或专家经验编成模糊规则,然后将来自传感器的...
  • 多输入多输出系统 模糊控制 自适应模糊控制理论
  • 基于模糊控制的AGV小车轨迹跟踪

    热门讨论 2018-03-29 14:36:13
    运用matlab模糊控制箱实现AGV小车轨迹跟踪,代码齐全,simulink模型能够直接运行,运行前请先把fis文件读到工作空间。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,966
精华内容 7,586
关键字:

模糊控制python

python 订阅