Spaces:
Sleeping
Sleeping
File size: 4,212 Bytes
bd39f54 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
import numpy as np
import skfuzzy as fuzz
from skfuzzy import control as ctrl
import matplotlib.pyplot as plt
def fuzzy_comprehensive_evaluation_model():
# 创建模糊变量和模糊集合
technical_skill = ctrl.Antecedent(np.arange(0, 101, 1), 'technical_skill')
physical_condition = ctrl.Antecedent(np.arange(0, 101, 1), 'physical_condition')
mental_toughness = ctrl.Antecedent(np.arange(0, 101, 1), 'mental_toughness')
opponent_strength = ctrl.Antecedent(np.arange(0, 101, 1), 'opponent_strength')
performance = ctrl.Consequent(np.arange(0, 101, 1), 'performance')
# 设定模糊隶属度函数
technical_skill['low'] = fuzz.trimf(technical_skill.universe, [0, 0, 50])
technical_skill['medium'] = fuzz.trimf(technical_skill.universe, [0, 50, 100])
technical_skill['high'] = fuzz.trimf(technical_skill.universe, [50, 100, 100])
physical_condition['low'] = fuzz.trimf(physical_condition.universe, [0, 0, 50])
physical_condition['medium'] = fuzz.trimf(physical_condition.universe, [0, 50, 100])
physical_condition['high'] = fuzz.trimf(physical_condition.universe, [50, 100, 100])
mental_toughness['low'] = fuzz.trimf(mental_toughness.universe, [0, 0, 50])
mental_toughness['medium'] = fuzz.trimf(mental_toughness.universe, [0, 50, 100])
mental_toughness['high'] = fuzz.trimf(mental_toughness.universe, [50, 100, 100])
opponent_strength['low'] = fuzz.trimf(opponent_strength.universe, [0, 0, 50])
opponent_strength['medium'] = fuzz.trimf(opponent_strength.universe, [0, 50, 100])
opponent_strength['high'] = fuzz.trimf(opponent_strength.universe, [50, 100, 100])
performance['poor'] = fuzz.trimf(performance.universe, [0, 0, 50])
performance['average'] = fuzz.trimf(performance.universe, [0, 50, 100])
performance['excellent'] = fuzz.trimf(performance.universe, [50, 100, 100])
# 设定输出的解模糊方法——质心解模糊方式
performance.defuzzify_method = 'centroid'
# 设定规则
rule1 = ctrl.Rule(
technical_skill['low'] | physical_condition['low'] | mental_toughness['low'] | opponent_strength['low'],
performance['poor']
)
rule2 = ctrl.Rule(
technical_skill['medium'] | physical_condition['medium'] | mental_toughness['medium'] | opponent_strength['medium'],
performance['average']
)
rule3 = ctrl.Rule(
technical_skill['high'] | physical_condition['high'] | mental_toughness['high'] | opponent_strength['high'],
performance['excellent']
)
# 创建控制系统
performance_evaluation = ctrl.ControlSystem([rule1, rule2, rule3])
performance_evaluator = ctrl.ControlSystemSimulation(performance_evaluation)
# 输入数据
performance_evaluator.input['technical_skill'] = 75
performance_evaluator.input['physical_condition'] = 80
performance_evaluator.input['mental_toughness'] = 85
performance_evaluator.input['opponent_strength'] = 60
# 计算模糊综合评分
performance_evaluator.compute()
# 输出结果
print("模糊综合评分:", performance_evaluator.output['performance'])
# 打印模糊集合的可视化图表
technical_skill.view("technical_skill", sim=performance_evaluator)
physical_condition.view("physical_condition", sim=performance_evaluator)
mental_toughness.view("mental_toughness", sim=performance_evaluator)
opponent_strength.view("opponent_strength", sim=performance_evaluator)
performance.view("performance", sim=performance_evaluator)
# Perform sensitivity analyze (to change input value)
# input_var_1:
# input_values = np.arange(0, 11, 1)
# output_values = []
#
# for val in input_values:
# fuzzy_control_sys_simulation.input["input_var_1"] = val
# fuzzy_control_sys_simulation.compute()
# output_values.append(fuzzy_control_sys_simulation.output["output_var"])
#
# plt.plot(
# input_values,
# output_values,
# label="Sensitivity Analysis"
# )
# plt.xlabel("Input Variable 1")
# plt.ylabel("Output Variable")
# plt.legend()
# plt.show()
#
# return fuzzy_control_sys_simulation.output["output_var"]
|