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 = FuzzySet(points=[[-68.0, 0.0], [68.0, 1.0]], term="newer")
release_year_newer = TriangleFuzzySet ( - 68 , - 68 , 0 , term = " newer " )
# release_year_similar = FuzzySet(points=[[-68.0, 0.0], [0.0, 1.0], [68.0, 0.0]], term="similar")
release_year_similar = TriangleFuzzySet ( - 68 , 0 , 68 , term = " similar " )
# release_year_older = FuzzySet(points=[[-68.0, 1.0], [68.0, 0.0]], term="older")
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 = FuzzySet(points=[[-238.0, 0.0], [238.0, 1.0]], term="shorter")
runtime_shorter = TriangleFuzzySet ( - 238 , - 238 , 0 , term = " shorter " )
# runtime_similar = FuzzySet(points=[[-238.0, 0.0], [0.0, 1.0], [238.0, 0.0]], term="similar")
runtime_similar = TriangleFuzzySet ( - 238 , 0 , 238 , term = " similar " )
# runtime_longer = FuzzySet(points=[[-238.0, 1.0], [238.0, 0]], term="longer")
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 = FuzzySet(points=[[-42.0, 0.0], [42.0, 1.0]], term="less")
seasons_less = TriangleFuzzySet ( - 42 , - 42 , 0 , term = " less " )
# seasons_similar = FuzzySet(points=[[-42.0, 0.0], [0.0, 1.0], [42.0, 0.0]], term="similar")
seasons_similar = TriangleFuzzySet ( - 42 , 0 , 42 , term = " similar " )
# seasons_more = FuzzySet(points=[[-42.0, 1.0], [42.0, 0.0]], term="more")
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 = FuzzySet(points=[[-100.0, 0.0], [100.0, 1.0]], term="different")
genres_different = TriangleFuzzySet ( - 100 , - 100 , 0 , term = " different " )
# genres_similar = FuzzySet(points=[[-100.0, 0.0], [0.0, 1.0], [100.0, 0.0]], term="similar")
genres_similar = TriangleFuzzySet ( - 100 , 0 , 100 , term = " similar " )
# genres_same = FuzzySet(points=[[-100.0, 1.0], [100.0, 0.0]], term="same")
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 = FuzzySet(points=[[-4.0, 0.0], [4.0, 1.0]], term="different")
emotions_different = TriangleFuzzySet ( - 4 , - 4 , 0 , term = " different " )
# emotions_similar = FuzzySet(points=[[-4.0, 0.0], [0.0, 1.0], [4.0, 0.0]], term="similar")
emotions_similar = TriangleFuzzySet ( - 4 , 0 , 4 , term = " similar " )
# emotions_same = FuzzySet(points=[[-4.0, 1.0], [4.0, 0.0]], term="same")
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 14:09:37 +01:00
# Nie crisp tylko tak jak te powyżej zdefiniować
2022-12-17 16:47:45 +01:00
FS . set_crisp_output_value ( " low_recomendation " , 0 )
FS . set_crisp_output_value ( " medium_recomendation " , 50 )
FS . set_crisp_output_value ( " high_recomendation " , 100 )
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 " ] ) )
FS . produce_figure ( outputfile = ' file.pdf ' )