Контроллер нечеткой логики - RuntimeError: невозможно разрешить порядок выполнения правил - PullRequest
0 голосов
/ 25 сентября 2019

Я новичок в этой концепции, и я пытался реализовать контроллер нечеткой логики для душа.входные данные - это положение ручки от крайнего левого до крайнего правого, а выходные значения - от очень холодного до очень горячего.Я сталкиваюсь с этой ошибкой времени выполнения в правилах.Ниже мой глупый код

import numpy as np
import skfuzzy as fuzz
from skfuzzy import control as ctrl

pos = ctrl.Consequent(np.arange(0, 180, 1), 'pos')
temp = ctrl.Consequent(np.arange(0, 100, 1), 'temp')

pos['EL'] = fuzz.trimf(pos.universe, [0, 0, 45])
pos['L'] = fuzz.trimf(pos.universe, [0, 45, 90])
pos['C'] = fuzz.trimf(pos.universe, [45, 90, 135])
pos['R'] = fuzz.trimf(pos.universe, [90, 135, 180])
pos['ER'] = fuzz.trimf(pos.universe, [135, 180, 180])

temp['VC'] = fuzz.trimf(temp.universe, [0, 0, 10])
temp['C'] = fuzz.trimf(temp.universe, [0, 10, 40])
temp['W'] = fuzz.trimf(temp.universe, [10, 40, 80])
temp['H'] = fuzz.trimf(temp.universe, [40, 80, 100])
temp['VH'] = fuzz.trimf(temp.universe, [80, 100, 100])

rule1 = ctrl.Rule(pos['EL'], temp['VC'])
rule2 = ctrl.Rule(pos['L'], temp['C'])
rule3 = ctrl.Rule(pos['C'], temp['W'])
rule4 = ctrl.Rule(pos['R'], temp['H'])
rule5 = ctrl.Rule(pos['ER'], temp['VH'])

temp_ctrl = ctrl.ControlSystem([rule1, rule2, rule3, rule4, rule5])
temprature = ctrl.ControlSystemSimulation(temp_ctrl)

RuntimeError: Unable to resolve rule execution order. The most likely reason is two or more rules that depend on each other. Please check the rule graph for loops.

1 Ответ

0 голосов
/ 25 сентября 2019

Я думаю, вы могли бы захотеть, чтобы

pos = ctrl.Consequent(np.arange(0, 180, 1), 'pos')

было

pos = ctrl.Antecedent(np.arange(0, 180, 1), 'pos')

, поэтому ваши правила будут выглядеть примерно так:

if antecedent then consequent
...