!
pip install scikit-fuzzy
Collecting scikit-fuzzy
Downloading scikit_fuzzy-0.5.0-py2.py3-none-any.whl.metadata (2.6
kB)
Downloading scikit_fuzzy-0.5.0-py2.py3-none-any.whl (920 kB)
---------------------------------------- 0.0/920.8 kB ? eta -:--:--
---------------------------------------- 0.0/920.8 kB ? eta -:--:--
---------------------------------------- 0.0/920.8 kB ? eta -:--:--
----------- ---------------------------- 262.1/920.8 kB ? eta
-:--:--
----------- ---------------------------- 262.1/920.8 kB ? eta
-:--:--
----------- ---------------------------- 262.1/920.8 kB ? eta
-:--:--
--------------------- ---------------- 524.3/920.8 kB 509.0 kB/s
eta 0:00:01
--------------------- ---------------- 524.3/920.8 kB 509.0 kB/s
eta 0:00:01
-------------------------------- ----- 786.4/920.8 kB 472.8 kB/s
eta 0:00:01
-------------------------------------- 920.8/920.8 kB 490.1 kB/s
eta 0:00:00
Installing collected packages: scikit-fuzzy
Successfully installed scikit-fuzzy-0.5.0
import numpy as np
import skfuzzy as fuzz
from skfuzzy import control as ctrl
#Auto membership function population is possible with .automf(3,5 or
7)
#quality.automf(3)
#service.automf(3)
#quality = ctrl.Antecedent(np.range(0,11,1),'quality')
#service = ctrl.Antecedent(np.range(0,11,1),'service')
#tip = ctrl.Antecedent(np.range(0,26,1),'tip')
quality = ctrl.Antecedent(np.arange(0,11,1),'quality')
service = ctrl.Antecedent(np.arange(0,11,1),'service')
tip = ctrl.Consequent(np.arange(0,26,1), 'tip')
quality['poor'] = fuzz.trimf(quality.universe,[0,0,5])
quality['acceptable'] = fuzz.trimf(quality.universe,[0,5,10])
quality['amazing'] = fuzz.trimf(quality.universe,[5,10,10])
service['bad'] = fuzz.trimf(quality.universe,[0,0,5])
service['decent'] = fuzz.trimf(quality.universe,[0,5,10])
service['great'] = fuzz.trimf(quality.universe,[5,10,10])
#Custom membership functions can be built interactivity with a
familiar,
#Pythonic API
tip['low'] = fuzz.trimf(tip.universe,[0,0,13])
tip['medium'] = fuzz.trimf(tip.universe,[0,13,25])
tip['high'] = fuzz.trimf(tip.universe,[13,13,25])
#You can see how this look with .view
quality['poor'].view()
service['great'].view()
tip['high'].view()
rule1 = ctrl.Rule(quality['poor'] | service['bad'],tip['low'])
rule2 = ctrl.Rule(service['decent'],tip['medium'])
rule3 = ctrl.Rule(service['great'] | quality['amazing'],tip['high'])
#rule1.view()
#rule2.view()
tipping_ctrl = ctrl.ControlSystem([rule1,rule2,rule3])
tipping = ctrl.ControlSystemSimulation(tipping_ctrl)
tipping.input['quality'] = 6.5
tipping.input['service'] = 9.8
#Crunch the number
tipping.compute()
print(tipping.output['tip'])
tip.view(sim=tipping)
15.950841071496813
import numpy as np
import skfuzzy as fuzz
from skfuzzy import control as ctrl
import matplotlib.pyplot as plt
# Define fuzzy variables
quality = ctrl.Antecedent(np.arange(0, 11, 1), 'quality')
service = ctrl.Antecedent(np.arange(0, 11, 1), 'service')
tip = ctrl.Consequent(np.arange(0, 26, 1), 'tip')
# Membership functions
quality['very poor'] = fuzz.trimf(quality.universe, [0, 0, 1])
quality['poor'] = fuzz.trimf(quality.universe, [0, 0, 5])
quality['acceptable'] = fuzz.trimf(quality.universe, [0, 5, 10])
quality['amazing'] = fuzz.trimf(quality.universe, [5, 10, 10])
quality['very amazing'] = fuzz.trimf(quality.universe, [10, 10, 10])
service['very bad'] = fuzz.trimf(service.universe, [0, 0, 1])
service['bad'] = fuzz.trimf(quality.universe,[0,0,5])
service['decent'] = fuzz.trimf(quality.universe,[0,5,10])
service['great'] = fuzz.trimf(quality.universe,[5,10,10])
service['very great'] = fuzz.trimf(service.universe, [10, 10, 10])
tip['low'] = fuzz.trimf(tip.universe, [0, 0, 13])
tip['medium'] = fuzz.trimf(tip.universe, [0, 13, 25])
tip['high'] = fuzz.trimf(tip.universe, [13, 25, 25])
#You can see how this look with .view
quality['acceptable'].view()
service['decent'].view()
tip['medium'].view()
# Rules (5 rules now)
rule1 = ctrl.Rule(quality['very poor'] | service['very bad'],
tip['low'])
rule2 = ctrl.Rule(quality['poor'] | service['bad'], tip['low'])
rule3 = ctrl.Rule(service['decent'], tip['medium'])
rule4 = ctrl.Rule(service['great'] | quality['amazing'], tip['high'])
rule5 = ctrl.Rule(service['very great'] | quality['very amazing'],
tip['high'])
# Control system
tipping_ctrl = ctrl.ControlSystem([rule1, rule2, rule3, rule4, rule5])
tipping = ctrl.ControlSystemSimulation(tipping_ctrl)
tipping.input['quality'] = 5.5
tipping.input['service'] = 9.9
#Crunch the number
tipping.compute()
print(tipping.output['tip'])
tip.view(sim=tipping)
20.3931843575419
import numpy as np
import skfuzzy as fuzz
from skfuzzy import control as ctrl
# Define the antecedent and consequent variables
quality = ctrl.Antecedent(np.arange(0, 11, 1), 'quality')
service = ctrl.Antecedent(np.arange(0, 11, 1), 'service')
tip = ctrl.Consequent(np.arange(0, 26, 1), 'tip')
# Create five fuzzy sets for quality and service using trimf
quality['very_poor'] = fuzz.trimf(quality.universe, [0, 0, 2])
quality['poor'] = fuzz.trimf(quality.universe, [0, 2, 4])
quality['acceptable'] = fuzz.trimf(quality.universe, [2, 5, 8])
quality['good'] = fuzz.trimf(quality.universe, [5, 8, 10])
quality['excellent'] = fuzz.trimf(quality.universe, [8, 10, 10])
service['very_bad'] = fuzz.trimf(service.universe, [0, 0, 2])
service['bad'] = fuzz.trimf(service.universe, [0, 2, 4])
service['average'] = fuzz.trimf(service.universe, [2, 5, 8])
service['good'] = fuzz.trimf(service.universe, [5, 8, 10])
service['excellent'] = fuzz.trimf(service.universe, [8, 10, 10])
# Create five fuzzy sets for tip (low, medium, high, very high, and
excellent)
tip['very_low'] = fuzz.trimf(tip.universe, [0, 0, 5])
tip['low'] = fuzz.trimf(tip.universe, [0, 5, 10])
tip['medium'] = fuzz.trimf(tip.universe, [5, 10, 15])
tip['high'] = fuzz.trimf(tip.universe, [10, 15, 20])
tip['excellent'] = fuzz.trimf(tip.universe, [15, 20, 25])
# Visualize the membership functions
quality['very_poor'].view()
quality['poor'].view()
quality['acceptable'].view()
quality['good'].view()
quality['excellent'].view()
service['very_bad'].view()
service['bad'].view()
service['average'].view()
service['good'].view()
service['excellent'].view()
tip['very_low'].view()
tip['low'].view()
tip['medium'].view()
tip['high'].view()
tip['excellent'].view()
# Define the fuzzy rules
rule1 = ctrl.Rule(quality['very_poor'] | service['very_bad'],
tip['very_low'])
rule2 = ctrl.Rule(quality['poor'] | service['bad'], tip['low'])
rule3 = ctrl.Rule(quality['acceptable'] | service['average'],
tip['medium'])
rule4 = ctrl.Rule(quality['good'] | service['good'], tip['high'])
rule5 = ctrl.Rule(quality['excellent'] | service['excellent'],
tip['excellent'])
# Create the control system and simulation
tipping_ctrl = ctrl.ControlSystem([rule1, rule2, rule3, rule4, rule5])
tipping = ctrl.ControlSystemSimulation(tipping_ctrl)
# Provide input values
tipping.input['quality'] = 6.5
tipping.input['service'] = 9.8
# Compute the tip value
tipping.compute()
# Output the result
print("Suggested Tip: ", tipping.output['tip'])
tip.view(sim=tipping)
Suggested Tip: 15.603015075376883