1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
19
21 """Create fuzzy system."""
22 import fuzzy
23 import fuzzy.System
24 import fuzzy.InputVariable
25 import fuzzy.fuzzify.Plain
26 import fuzzy.OutputVariable
27 import fuzzy.defuzzify.COG
28 import fuzzy.Adjective
29
30 import fuzzy.Rule
31 import fuzzy.operator
32 import fuzzy.operator.Input
33 import fuzzy.norm
34 import fuzzy.norm.Min
35 import fuzzy.set
36
37
38 import fuzzy.set.Triangle
39 import fuzzy.set.SFunction
40 import fuzzy.set.ZFunction
41
42
43
44 self.system = fuzzy.System.System()
45
46
47 input_temp = fuzzy.InputVariable.InputVariable(
48 fuzzify=fuzzy.fuzzify.Plain.Plain(),
49 description="temperature",
50 min=0.0,max=100.0,
51 unit="degrees"
52 )
53
54
55 self.system.variables["input_temperature"] = input_temp
56
57
58
59
60 input_temp.adjectives["cold"] = fuzzy.Adjective.Adjective(fuzzy.set.ZFunction.ZFunction(a=target,delta=10.))
61
62
63
64
65 input_temp.adjectives["hot"] = fuzzy.Adjective.Adjective(fuzzy.set.SFunction.SFunction(a=target,delta=10.))
66
67
68
69 output_temp = fuzzy.OutputVariable.OutputVariable(
70 defuzzify=fuzzy.defuzzify.COG.COG(),
71 description="temperature",
72 min=0.0,max=100.0,
73 unit="degrees"
74 )
75
76
77
78
79
80 self.system.variables["output_temperature"] = output_temp
81
82
83 output_temp.adjectives["cold"] = fuzzy.Adjective.Adjective(fuzzy.set.Triangle.Triangle(m=cold))
84
85 output_temp.adjectives["hot"] = fuzzy.Adjective.Adjective(fuzzy.set.Triangle.Triangle(m=hot))
86
87
88 rule1 = fuzzy.Rule.Rule(
89
90 adjective=self.system.variables["output_temperature"].adjectives["hot"],
91
92 operator=fuzzy.operator.Input.Input(
93
94 self.system.variables["input_temperature"].adjectives["cold"],
95 ),
96 certainty=1.0,
97 CER=fuzzy.norm.Min.Min()
98 )
99
100
101 rule2 = fuzzy.Rule.Rule(
102
103
104
105
106
107 adjective=self.system.variables["output_temperature"].adjectives["cold"],
108 operator=fuzzy.operator.Input.Input(
109
110
111
112
113
114 self.system.variables["input_temperature"].adjectives["hot"]
115 ),
116 certainty=1.0,
117 CER=fuzzy.norm.Min.Min()
118 )
119
120
121 self.system.rules["too cold"] = rule1
122 self.system.rules["too warm"] = rule2
123
124
125
128
130
131
132 input_values = {"input_temperature" : input}
133 output_values = {"output_temperature" : 0.0}
134
135 self.system.calculate(input=input_values,output=output_values)
136
137 result = output_values["output_temperature"]
138
139 self.system.variables["output_temperature"].failsafe = result
140 return result
141