from simpful import * def fuzzy_system(release_year_param, runtime_param, seasons_param, genres_param, emotions_param): FS = FuzzySystem(show_banner=False) # Define fuzzy sets for the variable # RELEASE_YEAR release_year_newer = TriangleFuzzySet(-20, -20, 0, term="newer") release_year_similar = TriangleFuzzySet(-20, 0, 20, term="similar") release_year_older = TriangleFuzzySet(0, 20, 20, term="older") FS.add_linguistic_variable("RELEASE_YEAR", LinguisticVariable([release_year_newer, release_year_similar, release_year_older], universe_of_discourse=[-136, 136])) # RUNTIME runtime_shorter = TriangleFuzzySet(-90, -90, 0, term="shorter") runtime_similar = TriangleFuzzySet(-90, 0, 90, term="similar") runtime_longer = TriangleFuzzySet(0, 90, 90, term="longer") FS.add_linguistic_variable("RUNTIME", LinguisticVariable([runtime_shorter, runtime_similar, runtime_longer], universe_of_discourse=[-476, 476])) # SEASONS seasons_less = TriangleFuzzySet(-5, -5, 0, term="less") seasons_similar = TriangleFuzzySet(-5, 0, 5, term="similar") seasons_more = TriangleFuzzySet(0, 5, 5, term="more") FS.add_linguistic_variable("SEASONS", LinguisticVariable([seasons_less, seasons_similar, seasons_more], universe_of_discourse=[-84, 84])) # GENRES genres_different = TriangleFuzzySet(0, 0, 0.5, term="different") genres_similar = TriangleFuzzySet(0, 0.5, 1, term="similar") genres_same = TriangleFuzzySet(0.5, 1, 1, term="same") FS.add_linguistic_variable("GENRES", LinguisticVariable([genres_different, genres_similar, genres_same], universe_of_discourse=[0, 1])) # EMOTIONS emotions_different = TriangleFuzzySet(0, 0, 0.5, term="different") emotions_similar = TriangleFuzzySet(0, 0.5, 1, term="similar") emotions_same = TriangleFuzzySet(0.5, 1, 1, term="same") FS.add_linguistic_variable("EMOTIONS", LinguisticVariable([emotions_different, emotions_similar, emotions_same], universe_of_discourse=[0, 1])) # 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, 100])) # # RULES # 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)" # # Z regułami trzeba eksperymentować, można porównywać ze scorem dla sprawdzania skuteczności # RULES RULE1 = f"IF (NOT (RELEASE_YEAR IS {release_year_param}) AND (RUNTIME IS {runtime_param}) AND (SEASONS IS {seasons_param})) THEN (RECOMMENDATION IS low_recommendation)" RULE2 = f"IF (NOT (EMOTIONS IS {emotions_param}) AND (GENRES IS {genres_param})) THEN (RECOMMENDATION IS low_recommendation)" RULE3 = f"IF (NOT (RELEASE_YEAR IS {release_year_param}) AND (SEASONS IS {seasons_param})) THEN (RECOMMENDATION IS medium_recommendation)" RULE4 = f"IF (EMOTIONS IS {emotions_param}) AND (GENRES IS {genres_param}) THEN (RECOMMENDATION IS medium_recommendation)" RULE5 = f"IF (RELEASE_YEAR IS {release_year_param}) AND (RUNTIME IS {runtime_param}) AND (SEASONS IS {seasons_param}) AND (EMOTIONS IS {emotions_param}) AND (GENRES IS {genres_param}) THEN (RECOMMENDATION IS high_recommendation)" FS.add_rules([RULE1, RULE2, RULE3, RULE4, RULE5]) return FS