-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdefuzzification.py
57 lines (41 loc) · 1.71 KB
/
defuzzification.py
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
from fuzzification import OutPutSick
output_sick = OutPutSick()
class Defuzzify:
def __int__(self):
pass
def defuzzy_caculator(self, data):
points_num = 1000
step = 5. / points_num
points_of_sickness = [0 + i * step for i in range(points_num + 1)]
numerator = 0.
denominator = 0.
for point in points_of_sickness:
sick1 = output_sick.outPut_sick1(point)
sick1 = data['output_sick1'] if sick1 > data['output_sick1'] else sick1
sick2 = output_sick.outPut_sick2(point)
sick2 = data['output_sick2'] if sick2 > data['output_sick2'] else sick2
sick3 = output_sick.outPut_sick3(point)
sick3 = data['output_sick3'] if sick3 > data['output_sick3'] else sick3
sick4 = output_sick.outPut_sick4(point)
sick4 = data['output_sick4'] if sick4 > data['output_sick4'] else sick4
healthy = output_sick.healthy(point)
healthy = data['output_healthy'] if healthy > data['output_healthy'] else healthy
result = max(sick1, sick2, sick3, sick4, healthy)
numerator += result * point
denominator += result
return numerator/denominator if denominator != 0 else 0
def defuzzification_result(self, data):
x_star = self.defuzzy_caculator(data)
result = ""
if x_star < 1.78:
result += "healthy "
if 1 < x_star < 2.51:
result += "sick1 "
if 1.78 < x_star < 3.25:
result += "sick2 "
if 1.5 < x_star < 4.5:
result += "sick3 "
if 3.25 < x_star:
result += "sick4 "
result += ": " + str(x_star)
return result