73 lines
4.4 KiB
Python
73 lines
4.4 KiB
Python
from simpful import *
|
|
|
|
|
|
def create_fuzzy_system():
|
|
FS = FuzzySystem(show_banner=False)
|
|
|
|
# ADVANTAGE_STANDINGS
|
|
adv_standings_negative = TriangleFuzzySet(5, 5, 50, term="negative")
|
|
adv_standings_neutral = TriangleFuzzySet(10, 50, 90, term="neutral")
|
|
adv_standings_positive = TriangleFuzzySet(50, 95, 95, term="positive")
|
|
FS.add_linguistic_variable("ADVANTAGE_STANDINGS",
|
|
LinguisticVariable([adv_standings_negative,
|
|
adv_standings_neutral,
|
|
adv_standings_positive],
|
|
universe_of_discourse=[0, 100]))
|
|
|
|
# ADVANTAGE_FORM
|
|
adv_form_negative = TriangleFuzzySet(5, 5, 50, term="negative")
|
|
adv_form_neutral = TriangleFuzzySet(10, 50, 90, term="neutral")
|
|
adv_form_positive = TriangleFuzzySet(50, 95, 95, term="positive")
|
|
FS.add_linguistic_variable("ADVANTAGE_FORM",
|
|
LinguisticVariable([adv_form_negative,
|
|
adv_form_neutral,
|
|
adv_form_positive],
|
|
universe_of_discourse=[0, 100]))
|
|
|
|
# ADVANTAGE_PERFORMANCE
|
|
adv_performance_negative = TriangleFuzzySet(5, 5, 50, term="negative")
|
|
adv_performance_neutral = TriangleFuzzySet(10, 50, 90, term="neutral")
|
|
adv_performance_positive = TriangleFuzzySet(50, 95, 95, term="positive")
|
|
FS.add_linguistic_variable("ADVANTAGE_PERFORMANCE",
|
|
LinguisticVariable([adv_performance_negative,
|
|
adv_performance_neutral,
|
|
adv_performance_positive],
|
|
universe_of_discourse=[0, 100]))
|
|
|
|
# RESULT
|
|
team_b_surely_wins = TriangleFuzzySet(10, 10, 25, term="team_b_surely_wins")
|
|
team_b_most_likely_wins = TrapezoidFuzzySet(17, 27, 37, 47, term="team_b_most_likely_wins")
|
|
draw = TrapezoidFuzzySet(37, 47, 53, 63, term="draw")
|
|
team_a_most_likely_wins = TrapezoidFuzzySet(53, 63, 73, 83, term="team_a_most_likely_wins")
|
|
team_a_surely_wins = TriangleFuzzySet(75, 90, 90, term="team_a_surely_wins")
|
|
FS.add_linguistic_variable("RESULT",
|
|
LinguisticVariable([team_b_surely_wins,
|
|
team_b_most_likely_wins,
|
|
draw,
|
|
team_a_most_likely_wins,
|
|
team_a_surely_wins],
|
|
universe_of_discourse=[0, 100]))
|
|
|
|
|
|
RULE1 = "IF (ADVANTAGE_STANDINGS IS positive) AND (ADVANTAGE_FORM IS positive) THEN (RESULT IS team_a_surely_wins)"
|
|
RULE2 = "IF (ADVANTAGE_STANDINGS IS negative) AND (ADVANTAGE_FORM IS negative) THEN (RESULT IS team_b_surely_wins)"
|
|
RULE3 = "IF (ADVANTAGE_STANDINGS IS neutral) AND (ADVANTAGE_FORM IS positive) THEN (RESULT IS team_a_most_likely_wins)"
|
|
RULE4 = "IF (ADVANTAGE_STANDINGS IS neutral) AND (ADVANTAGE_FORM IS negative) THEN (RESULT IS team_b_most_likely_wins)"
|
|
RULE5 = "IF (ADVANTAGE_STANDINGS IS positive) AND (ADVANTAGE_FORM IS negative) AND (ADVANTAGE_PERFORMANCE IS positive) THEN (RESULT IS team_a_most_likely_wins)"
|
|
RULE6 = "IF (ADVANTAGE_STANDINGS IS negative) AND (ADVANTAGE_FORM IS positive) AND (ADVANTAGE_PERFORMANCE IS negative) THEN (RESULT IS team_b_most_likely_wins)"
|
|
RULE7 = "IF (ADVANTAGE_STANDINGS IS positive) AND (ADVANTAGE_FORM IS neutral) AND (ADVANTAGE_PERFORMANCE IS neutral) THEN (RESULT IS team_a_most_likely_wins)"
|
|
RULE8 = "IF (ADVANTAGE_STANDINGS IS negative) AND (ADVANTAGE_FORM IS neutral) AND (ADVANTAGE_PERFORMANCE IS neutral) THEN (RESULT IS team_b_most_likely_wins)"
|
|
RULE9 = "IF (ADVANTAGE_STANDINGS IS neutral) AND (ADVANTAGE_FORM IS neutral) AND (ADVANTAGE_PERFORMANCE IS neutral) THEN (RESULT IS draw)"
|
|
|
|
rules = [RULE1, RULE2, RULE3, RULE4, RULE5, RULE6, RULE7, RULE8, RULE9]
|
|
FS.add_rules(rules)
|
|
return FS
|
|
|
|
|
|
def make_inference(FS, standings, form, performance):
|
|
FS.set_variable("ADVANTAGE_STANDINGS", standings)
|
|
FS.set_variable("ADVANTAGE_FORM", form)
|
|
FS.set_variable("ADVANTAGE_PERFORMANCE", performance)
|
|
|
|
return FS.inference(["RESULT"], ignore_warnings=True)
|