|
1 |
| -import sys |
2 |
| -from pathlib import Path |
3 |
| - |
4 |
| -src = str((Path(__file__).parent / "../src").resolve()) |
5 |
| -sys.path.insert(0, src) |
6 |
| - |
7 |
| -import numpy as np |
8 |
| -from fuzzylogic.classes import Domain, Rule |
9 |
| -from fuzzylogic.functions import R, S, trapezoid |
10 |
| - |
11 |
| -temp = Domain("Temperatur", -30, 100, res=0.0001) # ,res=0.1) |
12 |
| -temp.kalt = S(-10, 30) |
13 |
| -temp.heiß = R(30, 70) |
14 |
| -temp.mittel = ~temp.heiß & ~temp.kalt |
15 |
| - |
16 |
| - |
17 |
| -tan = Domain("tandelta", 0, 1.3, res=0.0001) # ,res=0.1) |
18 |
| -tan.klein = S(0.1, 0.5) |
19 |
| -tan.groß = R(0.5, 0.9) |
20 |
| -tan.mittel = ~tan.groß & ~tan.klein |
21 |
| - |
22 |
| -gef = Domain("Gefahrenbewertung", -0.5, 1.5, res=0.0001) # ,res=0.1) |
23 |
| -gef.klein = trapezoid(-0.5, 0, 0, 0.5) |
24 |
| -gef.groß = trapezoid(0.5, 1, 1, 1.5) |
25 |
| -gef.mittel = trapezoid(0, 0.5, 0.5, 1) |
26 |
| - |
27 |
| -R1 = Rule({(temp.kalt, tan.klein): gef.klein}) |
28 |
| -R2 = Rule({(temp.mittel, tan.klein): gef.klein}) |
29 |
| -R3 = Rule({(temp.heiß, tan.klein): gef.klein}) |
30 |
| -R4 = Rule({(temp.kalt, tan.mittel): gef.klein}) |
31 |
| -R5 = Rule({(temp.mittel, tan.mittel): gef.mittel}) |
32 |
| -R6 = Rule({(temp.heiß, tan.mittel): gef.groß}) |
33 |
| -R7 = Rule({(temp.kalt, tan.groß): gef.mittel}) |
34 |
| -R8 = Rule({(temp.mittel, tan.groß): gef.groß}) |
35 |
| -R9 = Rule({(temp.heiß, tan.groß): gef.groß}) |
36 |
| - |
37 |
| - |
38 |
| -rules = R1 | R2 | R3 | R4 | R5 | R6 | R7 | R8 | R9 |
39 |
| - |
40 |
| -table = """ |
41 |
| - tan.klein tan.mittel tan.groß |
42 |
| -temp.kalt gef.klein gef.klein gef.mittel |
43 |
| -temp.mittel gef.klein gef.mittel gef.groß |
44 |
| -temp.heiß gef.klein gef.groß gef.groß |
45 |
| -""" |
46 |
| - |
47 |
| -from fuzzylogic.classes import rule_from_table |
48 |
| - |
49 |
| -table_rules = rule_from_table(table, globals()) |
50 |
| - |
51 |
| -assert table_rules == rules |
52 |
| - |
53 |
| -value = {temp: 20, tan: 0.55} |
54 |
| -result = rules(value) |
55 |
| -assert isinstance(result, float) |
56 |
| -assert np.isclose(result, 0.45, atol=0.0001) |
| 1 | +import numpy as np |
| 2 | +from fuzzylogic.classes import Domain, Rule |
| 3 | +from fuzzylogic.functions import R, S, trapezoid |
| 4 | + |
| 5 | +temp = Domain("Temperatur", -30, 100, res=0.0001) # ,res=0.1) |
| 6 | +temp.kalt = S(-10, 30) |
| 7 | +temp.heiß = R(30, 70) |
| 8 | +temp.mittel = ~temp.heiß & ~temp.kalt |
| 9 | + |
| 10 | + |
| 11 | +tan = Domain("tandelta", 0, 1.3, res=0.0001) # ,res=0.1) |
| 12 | +tan.klein = S(0.1, 0.5) |
| 13 | +tan.groß = R(0.5, 0.9) |
| 14 | +tan.mittel = ~tan.groß & ~tan.klein |
| 15 | + |
| 16 | +gef = Domain("Gefahrenbewertung", -0.5, 1.5, res=0.0001) # ,res=0.1) |
| 17 | +gef.klein = trapezoid(-0.5, 0, 0, 0.5) |
| 18 | +gef.groß = trapezoid(0.5, 1, 1, 1.5) |
| 19 | +gef.mittel = trapezoid(0, 0.5, 0.5, 1) |
| 20 | + |
| 21 | +R1 = Rule({(temp.kalt, tan.klein): gef.klein}) |
| 22 | +R2 = Rule({(temp.mittel, tan.klein): gef.klein}) |
| 23 | +R3 = Rule({(temp.heiß, tan.klein): gef.klein}) |
| 24 | +R4 = Rule({(temp.kalt, tan.mittel): gef.klein}) |
| 25 | +R5 = Rule({(temp.mittel, tan.mittel): gef.mittel}) |
| 26 | +R6 = Rule({(temp.heiß, tan.mittel): gef.groß}) |
| 27 | +R7 = Rule({(temp.kalt, tan.groß): gef.mittel}) |
| 28 | +R8 = Rule({(temp.mittel, tan.groß): gef.groß}) |
| 29 | +R9 = Rule({(temp.heiß, tan.groß): gef.groß}) |
| 30 | + |
| 31 | + |
| 32 | +rules = R1 | R2 | R3 | R4 | R5 | R6 | R7 | R8 | R9 |
| 33 | + |
| 34 | +table = """ |
| 35 | + tan.klein tan.mittel tan.groß |
| 36 | +temp.kalt gef.klein gef.klein gef.mittel |
| 37 | +temp.mittel gef.klein gef.mittel gef.groß |
| 38 | +temp.heiß gef.klein gef.groß gef.groß |
| 39 | +""" |
| 40 | + |
| 41 | +from fuzzylogic.classes import rule_from_table |
| 42 | + |
| 43 | +table_rules = rule_from_table(table, globals()) |
| 44 | + |
| 45 | +assert table_rules == rules |
| 46 | + |
| 47 | +value = {temp: 20, tan: 0.55} |
| 48 | +result = rules(value) |
| 49 | +assert isinstance(result, float) |
| 50 | +assert np.isclose(result, 0.45, atol=0.0001) |
0 commit comments