-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexample.py
More file actions
109 lines (92 loc) · 3.89 KB
/
Copy pathexample.py
File metadata and controls
109 lines (92 loc) · 3.89 KB
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
101
102
103
104
105
106
107
108
109
"""
Example: Fuzzy Logic Tipping System
This example demonstrates a fuzzy logic system for calculating restaurant tips
based on food quality and service quality.
"""
from fuzzy_inference import FuzzyVariable, FuzzySet, FuzzyRule, FuzzySystem
from fuzzy_inference import triangular, trapezoidal
def main():
# Create input variables
food_quality = FuzzyVariable("food_quality", 0, 10)
service_quality = FuzzyVariable("service_quality", 0, 10)
# Create output variable
tip = FuzzyVariable("tip", 0, 25)
# Define fuzzy sets for food quality
food_quality.add_set(FuzzySet("poor", lambda x: triangular(x, 0, 0, 5)))
food_quality.add_set(FuzzySet("good", lambda x: triangular(x, 0, 5, 10)))
food_quality.add_set(FuzzySet("excellent", lambda x: triangular(x, 5, 10, 10)))
# Define fuzzy sets for service quality
service_quality.add_set(FuzzySet("poor", lambda x: triangular(x, 0, 0, 5)))
service_quality.add_set(FuzzySet("good", lambda x: triangular(x, 0, 5, 10)))
service_quality.add_set(FuzzySet("excellent", lambda x: triangular(x, 5, 10, 10)))
# Define fuzzy sets for tip
tip.add_set(FuzzySet("low", lambda x: triangular(x, 0, 0, 13)))
tip.add_set(FuzzySet("medium", lambda x: triangular(x, 0, 13, 25)))
tip.add_set(FuzzySet("high", lambda x: triangular(x, 13, 25, 25)))
# Create fuzzy system
system = FuzzySystem()
system.add_input_variable(food_quality)
system.add_input_variable(service_quality)
system.add_output_variable(tip)
# Define rules
rules = [
# If food is poor OR service is poor, tip is low
FuzzyRule(
{"food_quality": food_quality["poor"], "service_quality": service_quality["poor"]},
{"tip": tip["low"]}
),
FuzzyRule(
{"food_quality": food_quality["poor"], "service_quality": service_quality["good"]},
{"tip": tip["low"]}
),
FuzzyRule(
{"food_quality": food_quality["good"], "service_quality": service_quality["poor"]},
{"tip": tip["low"]}
),
# If food is good AND service is good, tip is medium
FuzzyRule(
{"food_quality": food_quality["good"], "service_quality": service_quality["good"]},
{"tip": tip["medium"]}
),
# If food is excellent OR service is excellent, tip is high
FuzzyRule(
{"food_quality": food_quality["excellent"], "service_quality": service_quality["excellent"]},
{"tip": tip["high"]}
),
FuzzyRule(
{"food_quality": food_quality["excellent"], "service_quality": service_quality["good"]},
{"tip": tip["medium"]}
),
FuzzyRule(
{"food_quality": food_quality["good"], "service_quality": service_quality["excellent"]},
{"tip": tip["medium"]}
),
]
for rule in rules:
system.add_rule(rule)
# Test the system with different inputs
test_cases = [
{"food_quality": 3, "service_quality": 3},
{"food_quality": 7, "service_quality": 7},
{"food_quality": 9, "service_quality": 9},
{"food_quality": 2, "service_quality": 8},
{"food_quality": 8, "service_quality": 2},
]
print("Fuzzy Logic Tipping System")
print("=" * 50)
for inputs in test_cases:
result = system.infer(inputs)
print(f"\nInput: Food Quality = {inputs['food_quality']}, "
f"Service Quality = {inputs['service_quality']}")
print(f"Output: Tip = {result['tip']:.2f}%")
# Demonstrate fuzzification
print("\n" + "=" * 50)
print("Fuzzification Example:")
print("=" * 50)
food_value = 6.5
print(f"\nFood quality value: {food_value}")
print("Membership in fuzzy sets:")
for set_name, membership_value in food_quality.fuzzify(food_value).items():
print(f" {set_name}: {membership_value:.3f}")
if __name__ == "__main__":
main()