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"]