Python实现模糊控制系统

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)
  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
模糊控制算法是一种基于模糊逻辑的控制方法,可以应用于各种控制系统中。Python中可以使用scikit-fuzzy库来实现模糊控制算法。 具体步骤如下: 1. 确定输入和输出变量,并定义它们的模糊集合和隶属函数。 2. 定义规则库,即输入变量和输出变量之间的关系。 3. 对输入变量进行模糊化,将其转换为隶属度函数。 4. 使用模糊推理方法,根据规则库和输入变量的隶属度函数计算输出变量的隶属度函数。 5. 对输出变量的隶属度函数进行去模糊化,得到具体的输出值。 以下是一个简单的模糊控制器示例代码: ```python import numpy as np import skfuzzy as fuzz from skfuzzy import control as ctrl # 定义输入和输出变量 error = ctrl.Antecedent(np.arange(-5, 6, 1), 'error') delta_error = ctrl.Antecedent(np.arange(-5, 6, 1), 'delta_error') output = ctrl.Consequent(np.arange(-10, 11, 1), 'output') # 定义隶属函数 error['NB'] = fuzz.trimf(error.universe, [-5, -5, -2]) error['NM'] = fuzz.trimf(error.universe, [-4, -2, 0]) error['NS'] = fuzz.trimf(error.universe, [-1, 0, 1]) error['ZO'] = fuzz.trimf(error.universe, [-0.5, 0, 0.5]) error['PS'] = fuzz.trimf(error.universe, [0, 2, 4]) error['PM'] = fuzz.trimf(error.universe, [2, 5, 5]) error['PB'] = fuzz.trimf(error.universe, [2, 5, 5]) delta_error['NB'] = fuzz.trimf(delta_error.universe, [-5, -5, -2]) delta_error['NM'] = fuzz.trimf(delta_error.universe, [-4, -2, 0]) delta_error['NS'] = fuzz.trimf(delta_error.universe, [-1, 0, 1]) delta_error['ZO'] = fuzz.trimf(delta_error.universe, [-0.5, 0, 0.5]) delta_error['PS'] = fuzz.trimf(delta_error.universe, [0, 2, 4]) delta_error['PM'] = fuzz.trimf(delta_error.universe, [2, 5, 5]) delta_error['PB'] = fuzz.trimf(delta_error.universe, [2, 5, 5]) output['NB'] = fuzz.trimf(output.universe, [-10, -10, -5]) output['NM'] = fuzz.trimf(output.universe, [-7.5, -5, -2.5]) output['NS'] = fuzz.trimf(output.universe, [-5, -2.5, 0]) output['ZO'] = fuzz.trimf(output.universe, [-2.5, 0, 2.5]) output['PS'] = fuzz.trimf(output.universe, [0, 2.5, 5]) output['PM'] = fuzz.trimf(output.universe, [2.5, 5, 7.5]) output['PB'] = fuzz.trimf(output.universe, [5, 10, 10]) # 定义规则库 rule1 = ctrl.Rule(error['NB'] & delta_error['NB'], output['NB']) rule2 = ctrl.Rule(error['NB'] & delta_error['NM'], output['NM']) rule3 = ctrl.Rule(error['NB'] & delta_error['NS'], output['NS']) rule4 = ctrl.Rule(error['NB'] & delta_error['ZO'], output['ZO']) rule5 = ctrl.Rule(error['NB'] & delta_error['PS'], output['PS']) rule6 = ctrl.Rule(error['NB'] & delta_error['PM'], output['PM']) rule7 = ctrl.Rule(error['NB'] & delta_error['PB'], output['PB']) rule8 = ctrl.Rule(error['NM'] & delta_error['NB'], output['NM']) rule9 = ctrl.Rule(error['NM'] & delta_error['NM'], output['NS']) rule10 = ctrl.Rule(error['NM'] & delta_error['NS'], output['ZO']) rule11 = ctrl.Rule(error['NM'] & delta_error['ZO'], output['PS']) rule12 = ctrl.Rule(error['NM'] & delta_error['PS'], output['PM']) rule13 = ctrl.Rule(error['NM'] & delta_error['PM'], output['PB']) rule14 = ctrl.Rule(error['NS'] & delta_error['NB'], output['NS']) rule15 = ctrl.Rule(error['NS'] & delta_error['NM'], output['ZO']) rule16 = ctrl.Rule(error['NS'] & delta_error['NS'], output['PS']) rule17 = ctrl.Rule(error['NS'] & delta_error['ZO'], output['PM']) rule18 = ctrl.Rule(error['NS'] & delta_error['PS'], output['PB']) rule19 = ctrl.Rule(error['ZO'] & delta_error['NB'], output['ZO']) rule20 = ctrl.Rule(error['ZO'] & delta_error['NM'], output['PS']) rule21 = ctrl.Rule(error['ZO'] & delta_error['NS'], output['PM']) rule22 = ctrl.Rule(error['ZO'] & delta_error['ZO'], output['PB']) rule23 = ctrl.Rule(error['ZO'] & delta_error['PS'], output['PB']) rule24 = ctrl.Rule(error['PS'] & delta_error['NB'], output['PS']) rule25 = ctrl.Rule(error['PS'] & delta_error['NM'], output['PM']) rule26 = ctrl.Rule(error['PS'] & delta_error['NS'], output['PB']) rule27 = ctrl.Rule(error['PS'] & delta_error['ZO'], output['PB']) rule28 = ctrl.Rule(error['PS'] & delta_error['PS'], output['PB']) rule29 = ctrl.Rule(error['PM'] & delta_error['NB'], output['PM']) rule30 = ctrl.Rule(error['PM'] & delta_error['NM'], output['PB']) rule31 = ctrl.Rule(error['PM'] & delta_error['NS'], output['PB']) rule32 = ctrl.Rule(error['PM'] & delta_error['ZO'], output['PB']) rule33 = ctrl.Rule(error['PM'] & delta_error['PS'], output['PB']) rule34 = ctrl.Rule(error['PB'] & delta_error['NB'], output['PB']) rule35 = ctrl.Rule(error['PB'] & delta_error['NM'], output['PB']) rule36 = ctrl.Rule(error['PB'] & delta_error['NS'], output['PB']) rule37 = ctrl.Rule(error['PB'] & delta_error['ZO'], output['PB']) rule38 = ctrl.Rule(error['PB'] & delta_error['PS'], output['PB']) # 定义控制系统 system = ctrl.ControlSystem([rule1, rule2, rule3, rule4, rule5, rule6, rule7, rule8, rule9, rule10, rule11, rule12, rule13, rule14, rule15, rule16, rule17, rule18, rule19, rule20, rule21, rule22, rule23, rule24, rule25, rule26, rule27, rule28, rule29, rule30, rule31, rule32, rule33, rule34, rule35, rule36, rule37, rule38]) simulator = ctrl.ControlSystemSimulation(system) # 输入变量赋值 simulator.input['error'] = -2 simulator.input['delta_error'] = 1 # 计算输出 simulator.compute() # 输出结果 print(simulator.output['output']) # 输出结果隶属度函数 output.view(sim=simulator) ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值