如何修复Python中模糊逻辑系统的断言错误?

问题描述 投票:0回答:1

我已经构建了一个模糊系统,其中包含输入变量(温度和压力)的描述符和输出变量(油门设置)的 5 个描述符。但是我遇到了断言错误并且不明白问题。

代码如下

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

# Define the input variables
temperature = ctrl.Antecedent(np.arange(0, 101), 'temperature')
pressure = ctrl.Antecedent(np.arange(0, 101), 'pressure')

# Define the output variable
throttle_setting = ctrl.Consequent(np.arange(0, 101), 'throttle_setting')

# Define the membership functions for the input variables
temperature['low'] = fuzz.trimf(temperature.universe, [0, 0, 50])
temperature['medium'] = fuzz.trimf(temperature.universe, [0, 50, 100])
temperature['high'] = fuzz.trimf(temperature.universe, [50, 100, 100])

pressure['low'] = fuzz.trimf(pressure.universe, [0, 0, 50])
pressure['medium'] = fuzz.trimf(pressure.universe, [0, 50, 100])
pressure['high'] = fuzz.trimf(pressure.universe, [50, 100, 100])

# Define the membership functions for the output variable
throttle_setting['very_low'] = fuzz.trimf(throttle_setting.universe, [0, 0, 20])
throttle_setting['low'] = fuzz.trimf(throttle_setting.universe, [0, 20, 40])
throttle_setting['medium'] = fuzz.trimf(throttle_setting.universe, [20, 40, 60])
throttle_setting['high'] = fuzz.trimf(throttle_setting.universe, [40, 60, 80])
throttle_setting['very_high'] = fuzz.trimf(throttle_setting.universe, [60, 80, 100])

# Define the fuzzy rules
rule1 = ctrl.Rule(temperature['low'] & pressure['low'], throttle_setting['low'])
rule2 = ctrl.Rule(temperature['low'] & pressure['medium'], throttle_setting['medium'])
rule3 = ctrl.Rule(temperature['low'] & pressure['high'], throttle_setting['high'])
rule4 = ctrl.Rule(temperature['medium'] & pressure['low'], throttle_setting['medium'])
rule5 = ctrl.Rule(temperature['medium'] & pressure['medium'], throttle_setting['high'])
rule6 = ctrl.Rule(temperature['medium'] & pressure['high'], throttle_setting['very_high'])
rule7 = ctrl.Rule(temperature['high'] & pressure['low'], throttle_setting['high'])
rule8 = ctrl.Rule(temperature['high'] & pressure['medium'], throttle_setting['very_high'])
rule9 = ctrl.Rule(temperature['high'] & pressure['high'], throttle_setting['very_high'])

# Create the fuzzy controller
fuzzy_ctrl = ctrl.ControlSystem([rule1, rule2, rule3, rule4, rule5, rule6, rule7, rule8, rule9])

# Create the simulation
simulation = ctrl.ControlSystemSimulation(fuzzy_ctrl)

# Set input values
simulation.input['temperature'] = 75
simulation.input['pressure'] = 25

# Compute the result
simulation.compute()

# Get the output value
throttle_setting_value = simulation.output['throttle_setting']

# Defuzzify the output value
defuzzified_value = fuzz.defuzz(throttle_setting.universe, throttle_setting_value, 'centroid')

print("Throttle setting value:", defuzzified_value)

运行上述代码得到的错误是

---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
<ipython-input-3-9a14576c4d9f> in <cell line: 56>()
     54 
     55 # Defuzzify the output value
---> 56 defuzzified_value = fuzz.defuzz(throttle_setting.universe, throttle_setting_value, 'centroid')
     57 
     58 print("Throttle setting value:", defuzzified_value)

/usr/local/lib/python3.9/dist-packages/skfuzzy/defuzzify/defuzz.py in defuzz(x, mfx, mode)
    241     mfx = mfx.ravel()
    242     n = len(x)
--> 243     assert n == len(mfx), 'Length of x and fuzzy membership function must be \
    244                           identical.'
    245 

AssertionError: Length of x and fuzzy membership function must be                           identical.

请让我知道代码中有什么问题以及如何修复它。

python google-colaboratory fuzzy-logic
1个回答
0
投票

对我来说同样的错误。对这个问题有什么想法吗?

© www.soinside.com 2019 - 2024. All rights reserved.