2022-12-17 16:47:45 +01:00
from simpful import *
FS = FuzzySystem ( )
# Define fuzzy sets for the variable # Define fuzzy sets for the variable
# RELEASE_YEAR
2023-01-03 13:45:59 +01:00
release_year_newer = TriangleFuzzySet ( - 68 , - 68 , 0 , term = " newer " )
release_year_similar = TriangleFuzzySet ( - 68 , 0 , 68 , term = " similar " )
release_year_older = TriangleFuzzySet ( 0 , 68 , 68 , term = " older " )
FS . add_linguistic_variable ( " RELEASE_YEAR " , LinguisticVariable ( [ release_year_newer , release_year_similar , release_year_older ] , universe_of_discourse = [ - 136 , 136 ] ) )
2022-12-17 16:47:45 +01:00
# RUNTIME
2023-01-03 13:45:59 +01:00
runtime_shorter = TriangleFuzzySet ( - 238 , - 238 , 0 , term = " shorter " )
runtime_similar = TriangleFuzzySet ( - 238 , 0 , 238 , term = " similar " )
runtime_longer = TriangleFuzzySet ( 0 , 238 , 238 , term = " longer " )
FS . add_linguistic_variable ( " RUNTIME " , LinguisticVariable ( [ runtime_shorter , runtime_similar , runtime_longer ] , universe_of_discourse = [ - 476 , 476 ] ) )
2022-12-17 16:47:45 +01:00
# SEASONS
2023-01-03 13:45:59 +01:00
seasons_less = TriangleFuzzySet ( - 42 , - 42 , 0 , term = " less " )
seasons_similar = TriangleFuzzySet ( - 42 , 0 , 42 , term = " similar " )
seasons_more = TriangleFuzzySet ( 0 , 42 , 42 , term = " more " )
FS . add_linguistic_variable ( " SEASONS " , LinguisticVariable ( [ seasons_less , seasons_similar , seasons_more ] , universe_of_discourse = [ - 84 , 84 ] ) )
2022-12-17 16:47:45 +01:00
# GENRES
2023-01-03 13:45:59 +01:00
genres_different = TriangleFuzzySet ( - 100 , - 100 , 0 , term = " different " )
genres_similar = TriangleFuzzySet ( - 100 , 0 , 100 , term = " similar " )
genres_same = TriangleFuzzySet ( 0 , 100 , 100 , term = " same " )
FS . add_linguistic_variable ( " GENRES " , LinguisticVariable ( [ genres_different , genres_similar , genres_same ] , universe_of_discourse = [ - 200 , 200 ] ) )
2022-12-17 16:47:45 +01:00
# EMOTIONS
2023-01-03 13:45:59 +01:00
emotions_different = TriangleFuzzySet ( - 4 , - 4 , 0 , term = " different " )
emotions_similar = TriangleFuzzySet ( - 4 , 0 , 4 , term = " similar " )
emotions_same = TriangleFuzzySet ( 0 , 4 , 4 , term = " same " )
FS . add_linguistic_variable ( " EMOTIONS " , LinguisticVariable ( [ emotions_different , emotions_similar , emotions_same ] , universe_of_discourse = [ - 8 , 8 ] ) )
2022-12-17 16:47:45 +01:00
2023-01-04 17:23:30 +01:00
# RECOMENDATION
low_recomendation = TriangleFuzzySet ( 0 , 0 , 50 , term = " low_recomendation " )
medium_recomendation = TriangleFuzzySet ( 0 , 50 , 100 , term = " medium_recomendation " )
high_recomendation = TriangleFuzzySet ( 0 , 100 , 100 , term = " high_recomendation " )
FS . add_linguistic_variable ( " RECOMENDATION " , LinguisticVariable ( [ low_recomendation , medium_recomendation , high_recomendation ] , universe_of_discourse = [ 0 , 200 ] ) )
2022-12-17 16:47:45 +01:00
2023-01-04 17:23:30 +01:00
# RULES
2022-12-17 16:47:45 +01:00
RULE1 = " IF (RELEASE_YEAR IS older) AND (RUNTIME IS longer) AND (SEASONS IS more) THEN (RECOMENDATION IS low_recomendation) "
RULE2 = " IF (EMOTIONS IS different) AND (GENRES IS different) THEN (RECOMENDATION IS low_recomendation) "
RULE3 = " IF (RELEASE_YEAR IS newer) AND (RUNTIME IS similar) AND (SEASONS IS less) THEN (RECOMENDATION IS medium_recomendation) "
RULE4 = " IF (EMOTIONS IS similar) AND (GENRES IS similar) THEN (RECOMENDATION IS medium_recomendation) "
RULE5 = " IF (RELEASE_YEAR IS similar) AND (RUNTIME IS similar) AND (SEASONS IS similar) AND (EMOTIONS IS same) AND (GENRES IS same) THEN (RECOMENDATION IS high_recomendation) "
2023-01-04 14:09:37 +01:00
# Z regułami trzeba eksperymentować, można porównywać ze scorem dla sprawdzania skuteczności
2022-12-17 16:47:45 +01:00
FS . add_rules ( [ RULE1 , RULE2 , RULE3 , RULE4 , RULE5 ] )
FS . set_variable ( " RELEASE_YEAR " , - 12.0 )
FS . set_variable ( " RUNTIME " , - 10.0 )
FS . set_variable ( " SEASONS " , - 2.0 )
FS . set_variable ( " GENRES " , 50.0 )
FS . set_variable ( " EMOTIONS " , 1.0 )
2023-01-04 14:09:37 +01:00
print ( FS . inference ( [ " RECOMENDATION " ] ) )
2023-01-04 17:23:30 +01:00
FS . produce_figure ( outputfile = ' visualize_terms.pdf ' )