from simpful import * FS = FuzzySystem() # Define fuzzy sets for the variable # Define fuzzy sets for the variable # RELEASE_YEAR release_year_newer = FuzzySet(points=[[-68.0, 0.0], [68.0, 1.0]], term="newer") release_year_similar = FuzzySet(points=[[-68.0, 0.0], [0.0, 1.0], [68.0, 0.0]], term="similar") release_year_older = FuzzySet(points=[[-68.0, 1.0], [68.0, 0.0]], term="older") FS.add_linguistic_variable("RELEASE_YEAR", LinguisticVariable( [release_year_newer, release_year_similar, release_year_older] )) # RUNTIME runtime_shorter = FuzzySet(points=[[-238.0, 0.0], [238.0, 1.0]], term="shorter") runtime_similar = FuzzySet(points=[[-238.0, 0.0], [0.0, 1.0], [238.0, 0.0]], term="similar") runtime_longer = FuzzySet(points=[[-238.0, 1.0], [238.0, 0]], term="longer") FS.add_linguistic_variable("RUNTIME", LinguisticVariable( [runtime_shorter, runtime_similar, runtime_longer] )) # SEASONS seasons_less = FuzzySet(points=[[-42.0, 0.0], [42.0, 1.0]], term="less") seasons_similar = FuzzySet(points=[[-42.0, 0.0], [0.0, 1.0], [42.0, 0.0]], term="similar") seasons_more = FuzzySet(points=[[-42.0, 1.0], [42.0, 0.0]], term="more") FS.add_linguistic_variable("SEASONS", LinguisticVariable( [seasons_less, seasons_similar, seasons_more] )) # GENRES genres_different = FuzzySet(points=[[-100.0, 0.0], [100.0, 1.0]], term="different") genres_similar = FuzzySet(points=[[-100.0, 0.0], [0.0, 1.0], [100.0, 0.0]], term="similar") genres_same = FuzzySet(points=[[-100.0, 1.0], [100.0, 0.0]], term="same") FS.add_linguistic_variable("GENRES", LinguisticVariable( [genres_different, genres_similar, genres_same] )) # EMOTIONS emotions_different = FuzzySet(points=[[-4.0, 0.0], [4.0, 1.0]], term="different") emotions_similar = FuzzySet(points=[[-4.0, 0.0], [0.0, 1.0], [4.0, 0.0]], term="similar") emotions_same = FuzzySet(points=[[-4.0, 1.0], [4.0, 0.0]], term="same") FS.add_linguistic_variable("EMOTIONS", LinguisticVariable( [emotions_different, emotions_similar, emotions_same] )) 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)" 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) print(FS.Sugeno_inference(["RECOMENDATION"]))