SKF给出“值错误:意外输入:质量”

2024-06-25 23:11:47 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的代码集使用SCI-KIT学习中的SKFUZZY用PYTHON编写:

import skfuzzy as fuzz
import numpy as np
from skfuzzy import control as ctrl
import matplotlib.pyplot as plt

# 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(5)
service.automf(5)

tip['lower'] = fuzz.gaussmf(tip.universe,5,2)
tip['low'] = fuzz.gaussmf(tip.universe,10,2)
tip['average'] = fuzz.gaussmf(tip.universe,15,2)
tip['high'] = fuzz.gaussmf(tip.universe,20,1)
tip['higher'] = fuzz.gaussmf(tip.universe,23,0.5)


rule1 = ctrl.Rule(((quality['poor'] | quality['mediocre']) and (service['poor'] | service['mediocre'])), tip['lower'])
rule2 = ctrl.Rule(((quality['average'] | quality['mediocre']) and (service['poor'] | service['mediocre'])), tip['low'])
rule3 = ctrl.Rule(((quality['average'] | quality['decent']) and (service['mediocre'] | service['average'])), tip['average'])
rule4 = ctrl.Rule(((quality['decent'] | quality['good']) and (service['poor'] | service['mediocre'])), tip['average'])
rule5 = ctrl.Rule(((quality['decent'] | quality['good']) and (service['decent'] | service['mediocre'])), tip['high'])
rule6 = ctrl.Rule(((quality['decent'] | quality['good']) and (service['decent'] | service['good'])), tip['higher'])


tipping_ctrl = ctrl.ControlSystem([rule1, rule2, rule3, rule4, rule5, rule6])

tipping = ctrl.ControlSystemSimulation(tipping_ctrl)


tipping.input['service'] = 10
tipping.input['quality'] = 10
tipping.compute()

print(tipping.output['tip'])
tip.view(sim=tipping)

在执行代码集时给出以下错误。错误是一个值错误,不确定我为什么会得到这个?是因为我输入规则集的方式吗?:

Traceback (most recent call last):
  File "/Users/gaurangsmacbookpro/Desktop/Gaurang/PYTHON_CODE/FuzzyLogic/employee_salary.py", line 60, in <module>
    tipping.input['quality'] = 10
  File "/usr/local/lib/python3.8/site-packages/skfuzzy/control/controlsystem.py", line 168, in __setitem__
    raise ValueError("Unexpected input: " + key)
ValueError: Unexpected input: quality

有人能告诉我我做错了什么吗?有点过时了。


Tags: andimportinputserviceruledecentctrlaverage
2条回答

尝试自动定义输入成员资格函数,而不是使用automf()

例如

quality['poor'] = fuzz.gaussmf(quality.universe, 1, 5)
quality['mediocre'] = fuzz.gaussmf(quality.universe, 5, 10)
etc.

在执行之前用value()检查输入值,并按顺序排列代码

相关问题 更多 >