нечеткая системная ошибка утверждения python во время ввода

Я построил нечеткую систему управления, которая принимает три входа (x, y, z), которые принимают (плохие, средние или хорошие) значения, и возвращает один выход (w) со значением (низким, средним или высоким). к сожалению, когда я тестирую систему, я получаю ошибку утверждения без какой-либо дополнительной информации. код, используемый для построения системы, показан ниже.

import numpy as np
import skfuzzy as fuzz
from skfuzzy import control as ctrl
import matplotlib.pyplot as plt
from matplotlib import rc
x=ctrl.Antecedent(np.arange(0,1,0.001), 'x')
y=ctrl.Antecedent(np.arange(0,1,0.001), 'y')
z=ctrl.Antecedent(np.arange(0,1,0.001), 'y')
w=ctrl.Consequent(np.arange(0,1,0.1),'w')
x.automf(3)
y.automf(5)
z.automf(7)
w['low'] = fuzz.trimf(w.universe, [0, 0, 0.3])
w['average'] = fuzz.trimf(w.universe, [0.25, 0.5, 0.75])
w['high'] = fuzz.trimf(w.universe, [0.7, 1, 1])
rule1 = ctrl.Rule(x['poor'] & y['poor'] & z['poor'], w['low'])
rule2 = ctrl.Rule(x['poor'] & y['poor'] & z['good'], w['low'])
rule3 = ctrl.Rule(x['poor'] & y['good'] & z['poor'], w['high'])
rule4 = ctrl.Rule(x['poor'] & y['good'] & z['good'], w['average'])
rule5 = ctrl.Rule(x['good'] & y['poor'] & z['poor'], w['low'])
rule6 = ctrl.Rule(x['good'] & y['poor'] & z['good'], w['low'])
rule7 = ctrl.Rule(x['good'] & y['good'] & z['poor'], w['average'])
rule8 = ctrl.Rule(x['good'] & y['good'] & z['good'], w['low'])
w_ctrl = ctrl.ControlSystem([rule1, rule2, rule3, rule4, rule5, rule6, rule7, rule8])
wResults= ctrl.ControlSystemSimulation(w_ctrl)
wResults.input['x'] = 0.03
wResults.input['y'] = 0.7
wResults.input['z'] = 0.01
wResults.compute() 

и ошибка, которую я получаю:

AssertionError                            Traceback (most recent call last)
<ipython-input-162-4519156d7582> in <module>()
     25 wResults= ctrl.ControlSystemSimulation(w_ctrl)
     26 wResults.input['x'] = 0.03
---> 27 wResults.input['y'] = 0.7
     28 wResults.input['z'] = 0.01
     29 wResults.compute()

C:\Users\user01\Anaconda3\lib\site-packages\skfuzzy\control\controlsystem.py in __setitem__(self, key, value)
    129         if len(matches) == 0:
    130             raise ValueError("Unexpected input: " + key)
--> 131         assert len(matches) == 1
    132         var = matches[0]
    133 

AssertionError: 

Интересно, есть ли у кого-нибудь идеи, где этот код пошел не так.


person Bander    schedule 29.05.2017    source источник


Ответы (1)


Первая проблема - опечатка

z = ctrl.Antecedent(np.arange(0,1,0.001), 'y')    # should be 'z'!

Теперь код при запуске возвращает

ValueError: Crisp output cannot be calculated, likely because the system is too sparse.
 Check to make sure this set of input values will activate at least one connected Term
 in each Antecedent via the current set of Rules.

... потому что

wResults.input['y'] = 0.7     # classifies as "decent",
                              # and you haven't given any relevant rules
person Hugh Bothwell    schedule 29.05.2017
comment
Спасибо @ Хью. Я исправил ошибку опечатки и настроил все функции принадлежности на значение 3, и теперь все работает правильно. - person Bander; 30.05.2017