What is Fuzzy Set ?
Fuzzy refers to something that is unclear or vague . Hence, Fuzzy Set is a Set where every key is associated with value, which is between 0 to 1 based on the certainty .This value is often called as degree of membership. Fuzzy Set is denoted with a Tilde Sign on top of the normal Set notation.
Operations on Fuzzy Set with Code :
1. Union :
Consider 2 Fuzzy Sets denoted by A and B, then let’s consider Y be the Union of them, then for every member of A and B, Y will be:
degree_of_membership(Y)= max(degree_of_membership(A), degree_of_membership(B))
EXAMPLE :
# Example to Demonstrate the # Union of Two Fuzzy Sets A = dict ()
B = dict ()
Y = dict ()
A = { "a" : 0.2 , "b" : 0.3 , "c" : 0.6 , "d" : 0.6 }
B = { "a" : 0.9 , "b" : 0.9 , "c" : 0.4 , "d" : 0.5 }
print ( 'The First Fuzzy Set is :' , A)
print ( 'The Second Fuzzy Set is :' , B)
for A_key, B_key in zip (A, B):
A_value = A[A_key]
B_value = B[B_key]
if A_value > B_value:
Y[A_key] = A_value
else :
Y[B_key] = B_value
print ( 'Fuzzy Set Union is :' , Y)
|
The First Fuzzy Set is : {'a': 0.2, 'b': 0.3, 'c': 0.6, 'd': 0.6} The Second Fuzzy Set is : {'a': 0.9, 'b': 0.9, 'c': 0.4, 'd': 0.5} Fuzzy Set Union is : {'a': 0.9, 'b': 0.9, 'c': 0.6, 'd': 0.6}
2. Intersection :
Consider 2 Fuzzy Sets denoted by A and B, then let’s consider Y be the Intersection of them, then for every member of A and B, Y will be:
degree_of_membership(Y)= min(degree_of_membership(A), degree_of_membership(B))
EXAMPLE :
# Example to Demonstrate # Intersection of Two Fuzzy Sets A = dict ()
B = dict ()
Y = dict ()
A = { "a" : 0.2 , "b" : 0.3 , "c" : 0.6 , "d" : 0.6 }
B = { "a" : 0.9 , "b" : 0.9 , "c" : 0.4 , "d" : 0.5 }
print ( 'The First Fuzzy Set is :' , A)
print ( 'The Second Fuzzy Set is :' , B)
for A_key, B_key in zip (A, B):
A_value = A[A_key]
B_value = B[B_key]
if A_value < B_value:
Y[A_key] = A_value
else :
Y[B_key] = B_value
print ( 'Fuzzy Set Intersection is :' , Y)
|
The First Fuzzy Set is : {'a': 0.2, 'b': 0.3, 'c': 0.6, 'd': 0.6} The Second Fuzzy Set is : {'a': 0.9, 'b': 0.9, 'c': 0.4, 'd': 0.5} Fuzzy Set Intersection is : {'a': 0.2, 'b': 0.3, 'c': 0.4, 'd': 0.5}
3. Complement :
Consider a Fuzzy Sets denoted by A , then let’s consider Y be the Complement of it, then for every member of A , Y will be:
degree_of_membership(Y)= 1 - degree_of_membership(A)
EXAMPLE :
# Example to Demonstrate the # Difference Between Two Fuzzy Sets A = dict ()
Y = dict ()
A = { "a" : 0.2 , "b" : 0.3 , "c" : 0.6 , "d" : 0.6 }
print ( 'The Fuzzy Set is :' , A)
for A_key in A:
Y[A_key] = 1 - A[A_key]
print ( 'Fuzzy Set Complement is :' , Y)
|
The Fuzzy Set is : {'a': 0.2, 'b': 0.3, 'c': 0.6, 'd': 0.6} Fuzzy Set Complement is : {'a': 0.8, 'b': 0.7, 'c': 0.4, 'd': 0.4}
4. Difference :
Consider 2 Fuzzy Sets denoted by A and B, then let’s consider Y be the Intersection of them, then for every member of A and B, Y will be:
degree_of_membership(Y)= min(degree_of_membership(A), 1- degree_of_membership(B))
EXAMPLE :
# Example to Demonstrate the # Difference Between Two Fuzzy Sets A = dict ()
B = dict ()
Y = dict ()
A = { "a" : 0.2 , "b" : 0.3 , "c" : 0.6 , "d" : 0.6 }
B = { "a" : 0.9 , "b" : 0.9 , "c" : 0.4 , "d" : 0.5 }
print ( 'The First Fuzzy Set is :' , A)
print ( 'The Second Fuzzy Set is :' , B)
for A_key, B_key in zip (A, B):
A_value = A[A_key]
B_value = B[B_key]
B_value = 1 - B_value
if A_value < B_value:
Y[A_key] = A_value
else :
Y[B_key] = B_value
print ( 'Fuzzy Set Difference is :' , Y)
|
Output
The First Fuzzy Set is : {"a": 0.2, "b": 0.3, "c": 0.6, "d": 0.6} The Second Fuzzy Set is : {"a": 0.9, "b": 0.9, "c": 0.4, "d": 0.5} Fuzzy Set Difference is : {"a": 0.1, "b": 0.1, "c": 0.6, "d": 0.5}
Class Fuzzy Sets
class FzSets:
def __init__( self ):
self .A = dict ()
self .B = dict ()
self .complement_A = dict ()
self .complement_B = dict ()
self .union_AB = dict ()
self .intersection_AB = dict ()
self .differenceAB = dict ()
self .differenceBA = dict ()
self .change_union = False
self .change_intersection = False
self .change_complement = False
def __init__( self ,A,nA,B,nB):
self .A = A
self .B = B
self .Aname = nA
self .Bname = nB
self .complement_A = dict ()
self .complement_B = dict ()
self .union_AB = dict ()
self .intersection_AB = dict ()
self .differenceAB = dict ()
self .differenceBA = dict ()
self .change_union = False
self .change_intersection = False
self .change_complement = False
def unionOp( self ):
if self .change_union:
print ( 'Result of UNION operation :' , self .union_AB)
else :
#unionSet = set(self.A.keys()).union(self.B.keys())
sa = set ( self .A.keys())
sb = set ( self .B.keys())
intersectionSet = set ( self .A.keys()).intersection( self .B.keys())
for i in intersectionSet:
self .union_AB[i] = max ( self .A[i], self .B[i])
for i in sa - intersectionSet:
self .union_AB[i] = self .A[i]
for i in sb - intersectionSet:
self .union_AB[i] = self .B[i]
print ( 'Result of UNION operation :' , self .union_AB)
def intersectionOp( self ):
if self .change_intersection:
print ( 'Result of INTERSECTION operation :\n\t\t' , self .intersection_AB)
else :
#unionSet = set(self.A.keys()).union(self.B.keys())
sa = set ( self .A.keys())
sb = set ( self .B.keys())
intersectionSet = set ( self .A.keys()).intersection( self .B.keys())
for i in intersectionSet:
self .intersection_AB[i] = min ( self .A[i], self .B[i])
for i in sa - intersectionSet:
self .intersection_AB[i] = 0.0
for i in sb - intersectionSet:
self .intersection_AB[i] = 0.0
print ( 'Result of INTERSECTION operation :\n\t\t' , self .intersection_AB)
self .change_intersection = True
def complementOp( self ):
if self .change_complement:
print ( 'Result of COMPLEMENT on ' , self .Aname, ' operation :' , self .complement_A)
print ( 'Result of COMPLEMENT on ' , self .Bname, ' operation :' , self .complement_B)
else :
for i in self .A:
self .complement_A[i] = 1 - A[i]
for i in self .B:
self .complement_B[i] = 1 - B[i]
print ( 'Result of COMPLEMENT on ' , self .Aname, ' operation :' , self .complement_A)
print ( 'Result of COMPLEMENT on ' , self .Aname, ' operation :' , self .complement_B)
self .change_complement = True
def __oneMinustwo( self ,L,R):
minus_d = dict ()
Rcomp = dict ()
for i in R:
Rcomp[i] = 1 - R[i]
sa = set (L.keys())
sb = set (R.keys())
intersectionSet = sa.intersection(sb) # min( A , complement(B) )
# l - r OR a - b
for i in intersectionSet:
minus_d[i] = min (L[i],Rcomp[i])
for i in sa - intersectionSet:
minus_d[i] = 0.0
for i in sb - intersectionSet:
minus_d[i] = 0.0
return minus_d
def AminusB( self ):
self .differenceAB = self .__oneMinustwo( self .A, self .B)
print ( 'Result of DIFFERENCE ' , self .Aname, ' | ' , self .Bname, ' operation :\n\t\t' , self .differenceAB)
def BminusA( self ):
self .differenceBA = self .__oneMinustwo( self .B, self .A)
print ( 'Result of DIFFERENCE ' , self .Bname, ' | ' , self .Aname, ' operation :\n\t\t' , self .differenceBA)
def change_Setz( self ,A,B):
self .A = A
self .B = B
print ( '\nSet ' , self .Aname, ' :' , self .A)
print ( 'Set ' , self .Bname, ' :' , self .B,end = '')
self .change_union = True
self .change_intersection = True
self .change_complement = True
print ( '\t\t\t Cache Reset' )
def displaySets( self ):
print ( '\nSet ' , self .Aname, ' :' , self .A)
print ( 'Set ' , self .Bname, ' :' , self .B)
|