0% found this document useful (0 votes)
3 views

vertopal.com_AI Lab 4

The document outlines the installation and usage of the scikit-fuzzy library for fuzzy logic control systems in Python. It demonstrates how to define fuzzy variables, create membership functions, and establish rules for tipping based on quality and service inputs. The document includes code snippets that compute and visualize the suggested tip based on user-defined quality and service ratings.

Uploaded by

shakibtuhin8
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views

vertopal.com_AI Lab 4

The document outlines the installation and usage of the scikit-fuzzy library for fuzzy logic control systems in Python. It demonstrates how to define fuzzy variables, create membership functions, and establish rules for tipping based on quality and service inputs. The document includes code snippets that compute and visualize the suggested tip based on user-defined quality and service ratings.

Uploaded by

shakibtuhin8
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 18

!

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

You might also like