2022-12-17 16:47:45 +01:00
from simpful import *
FS = FuzzySystem ( )
2023-01-07 15:21:05 +01:00
# Define fuzzy sets for the variable
2022-12-17 16:47:45 +01:00
# 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 " )
2023-01-07 15:21:05 +01:00
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 " )
2023-01-07 15:21:05 +01:00
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 " )
2023-01-07 15:21:05 +01:00
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 " )
2023-01-07 15:21:05 +01:00
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 " )
2023-01-07 15:21:05 +01:00
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-07 15:21:05 +01:00
# RECOMMENDATION
low_recommendation = TriangleFuzzySet ( 0 , 0 , 50 , term = " low_recommendation " )
medium_recommendation = TriangleFuzzySet ( 0 , 50 , 100 , term = " medium_recommendation " )
high_recommendation = TriangleFuzzySet ( 0 , 100 , 100 , term = " high_recommendation " )
FS . add_linguistic_variable ( " RECOMMENDATION " ,
LinguisticVariable ( [ low_recommendation , medium_recommendation , high_recommendation ] ,
universe_of_discourse = [ 0 , 200 ] ) )
2022-12-17 16:47:45 +01:00
2023-01-04 17:23:30 +01:00
# RULES
2023-01-07 15:21:05 +01:00
RULE1 = " IF (RELEASE_YEAR IS older) AND (RUNTIME IS longer) AND (SEASONS IS more) THEN (RECOMMENDATION IS low_recommendation) "
RULE2 = " IF (EMOTIONS IS different) AND (GENRES IS different) THEN (RECOMMENDATION IS low_recommendation) "
RULE3 = " IF (RELEASE_YEAR IS newer) AND (RUNTIME IS similar) AND (SEASONS IS less) THEN (RECOMMENDATION IS medium_recommendation) "
RULE4 = " IF (EMOTIONS IS similar) AND (GENRES IS similar) THEN (RECOMMENDATION IS medium_recommendation) "
RULE5 = " IF (RELEASE_YEAR IS similar) AND (RUNTIME IS similar) AND (SEASONS IS similar) AND (EMOTIONS IS same) AND (GENRES IS same) THEN (RECOMMENDATION IS high_recommendation) "
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 ] )
2023-01-07 15:21:05 +01:00
# 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)
#
# print(FS.inference(["RECOMMENDATION"]))
2022-12-17 16:47:45 +01:00
2023-01-07 15:21:05 +01:00
# FS.produce_figure(outputfile='visualize_terms.pdf')