diff --git a/main.py b/main.py index 60dd364..d12d60b 100644 --- a/main.py +++ b/main.py @@ -5,242 +5,6 @@ import matplotlib.pyplot as plt from read_data import get_leagues_data import pandas as pd -# https://pythonhosted.org/scikit-fuzzy/auto_examples/plot_tipping_problem.html - -# Variables for universes -unv_clubs = unv_goals = unv_avgValue = unv_players = unv_teamsChL = unv_teamsEuL = unv_teamsCfL = unv_score = None - -# Variables for fuzzy membership functions -clubs_few = clubs_some = clubs_several = clubs_many = None -goals_few = goals_moderate = goals_many = None -avgValue_vpoor = avgValue_poor = avgValue_mpoor = avgValue_moderate = avgValue_mrich = avgValue_rich = avgValue_vrich = None -players_none = players_few = players_moderate = players_many = None -teamsChL_min = teamsChL_mid = teamsChL_max = None -teamsEuL_min = teamsEuL_mid = teamsEuL_max = None -teamsCfL_min = teamsCfL_mid = teamsCfL_max = None -score_tragic = score_bad = score_moderate = score_good = score_best = None - -# Activations of fuzzy membership functions -clubs_few_level = clubs_some_level = clubs_several_level = clubs_many_level = None -goals_few_level = goals_moderate_level = goals_many_level = None -avgValue_vpoor_level = avgValue_poor_level = avgValue_mpoor_level = avgValue_moderate_level = avgValue_mrich_level = avgValue_rich_level = avgValue_vrich_level = None -players_none_level = players_few_level = players_moderate_level = players_many_level = None -teamsChL_min_level = teamsChL_mid_level = teamsChL_max_level = None -teamsEuL_min_level = teamsEuL_mid_level = teamsEuL_max_level = None -teamsCfL_min_level = teamsCfL_mid_level = teamsCfL_max_level = None - - -def initFuzzyMembershipFunctions(): - global unv_clubs, unv_goals, unv_avgValue, unv_players, unv_teamsChL, unv_teamsEuL, unv_teamsCfL, unv_score - global clubs_few, clubs_some, clubs_several, clubs_many - global goals_few, goals_moderate, goals_many - global avgValue_vpoor, avgValue_poor, avgValue_mpoor, avgValue_moderate, avgValue_mrich, avgValue_rich, avgValue_vrich - global players_none, players_few, players_moderate, players_many - global teamsChL_min, teamsChL_mid, teamsChL_max - global teamsEuL_min, teamsEuL_mid, teamsEuL_max - global teamsCfL_min, teamsCfL_mid, teamsCfL_max - global score_tragic, score_bad, score_moderate, score_good, score_best - - # Universes for variables - unv_clubs = np.arange(2, 31, 1) - unv_goals = np.arange(0.99, 5.01, 0.01) - unv_avgValue = np.arange(0.01, 500.01, 0.01) - unv_players = np.arange(0, 101, 1) - unv_teamsChL = np.arange(0, 6, 1) - unv_teamsEuL = np.arange(0, 6, 1) - unv_teamsCfL = np.arange(0, 6, 1) - # Result score universum - unv_score = np.arange(0, 101, 1) - - # Generate fuzzy membership functions - # trimf - triangular function - # trapmf - trapezoidal function - clubs_few = fuzz.trapmf(unv_clubs, [2, 2, 5, 8]) - clubs_some = fuzz.trapmf(unv_clubs, [3, 6, 9, 12]) - clubs_several = fuzz.trapmf(unv_clubs, [8, 11, 15, 18]) - clubs_many = fuzz.trapmf(unv_clubs, [15, 18, 30, 30]) - - goals_few = fuzz.trapmf(unv_goals, [1.0, 1.0, 2.0, 3.0]) - goals_moderate = fuzz.trimf(unv_goals, [2.5, 3.0, 3.5]) - goals_many = fuzz.trapmf(unv_goals, [3.0, 3.5, 5.0, 5.0]) - - avgValue_vpoor = fuzz.trapmf(unv_avgValue, [0.01, 0.01, 1.0, 2.0]) - avgValue_poor = fuzz.trimf(unv_avgValue, [1.0, 5.0, 15.0]) - avgValue_mpoor = fuzz.trimf(unv_avgValue, [7.5, 20.0, 50.0]) - avgValue_moderate = fuzz.trimf(unv_avgValue, [20.0, 50.0, 100.0]) - avgValue_mrich = fuzz.trimf(unv_avgValue, [50.0, 100.0, 175.0]) - avgValue_rich = fuzz.trimf(unv_avgValue, [150.0, 200.0, 275.0]) - avgValue_vrich = fuzz.trapmf(unv_avgValue, [200.0, 300.0, 500.0, 500.0]) - - players_none = fuzz.trimf(unv_players, [0, 0, 1]) - players_few = fuzz.trapmf(unv_players, [1, 5, 10, 15]) - players_moderate = fuzz.trapmf(unv_players, [10, 15, 20, 25]) - players_many = fuzz.trapmf(unv_players, [20, 25, 100, 100]) - - teamsChL_min = fuzz.trapmf(unv_teamsChL, [0, 0, 1, 2]) - teamsChL_mid = fuzz.trapmf(unv_teamsChL, [1, 2, 3, 4]) - teamsChL_max = fuzz.trapmf(unv_teamsChL, [3, 4, 5, 5]) - - teamsEuL_min = fuzz.trimf(unv_teamsEuL, [0, 0, 1]) - teamsEuL_mid = fuzz.trimf(unv_teamsEuL, [0, 1, 2]) - teamsEuL_max = fuzz.trapmf(unv_teamsEuL, [1, 2, 5, 5]) - - teamsCfL_min = fuzz.trapmf(unv_teamsCfL, [0, 0, 1, 2]) - teamsCfL_mid = fuzz.trimf(unv_teamsCfL, [1, 2, 3]) - teamsCfL_max = fuzz.trapmf(unv_teamsCfL, [2, 3, 5, 5]) - - score_tragic = fuzz.trapmf(unv_score, [0, 0, 15, 25]) - score_bad = fuzz.trapmf(unv_score, [15, 25, 35, 45]) - score_moderate = fuzz.trapmf(unv_score, [35, 45, 55, 65]) - score_good = fuzz.trapmf(unv_score, [55, 65, 75, 85]) - score_best = fuzz.trapmf(unv_score, [75, 85, 100, 100]) - - -def activateFuzzyMembershipFunctions(values): - global unv_clubs, unv_goals, unv_avgValue, unv_players, unv_teamsChL, unv_teamsEuL, unv_teamsCfL - global clubs_few, clubs_some, clubs_several, clubs_many - global goals_few, goals_moderate, goals_many - global avgValue_vpoor, avgValue_poor, avgValue_mpoor, avgValue_moderate, avgValue_mrich, avgValue_rich, avgValue_vrich - global players_none, players_few, players_moderate, players_many - global teamsChL_min, teamsChL_mid, teamsChL_max - global teamsEuL_min, teamsEuL_mid, teamsEuL_max - global teamsCfL_min, teamsCfL_mid, teamsCfL_max - global clubs_few_level, clubs_some_level, clubs_several_level, clubs_many_level - global goals_few_level, goals_moderate_level, goals_many_level - global avgValue_vpoor_level, avgValue_poor_level, avgValue_mpoor_level, avgValue_moderate_level, avgValue_mrich_level, avgValue_rich_level, avgValue_vrich_level - global players_none_level, players_few_level, players_moderate_level, players_many_level - global teamsChL_min_level, teamsChL_mid_level, teamsChL_max_level - global teamsEuL_min_level, teamsEuL_mid_level, teamsEuL_max_level - global teamsCfL_min_level, teamsCfL_mid_level, teamsCfL_max_level - - # Activation of fuzzy membership functions at given values. - clubs_few_level = fuzz.interp_membership(unv_clubs, clubs_few, values['clubs']) - clubs_some_level = fuzz.interp_membership(unv_clubs, clubs_some, values['clubs']) - clubs_several_level = fuzz.interp_membership(unv_clubs, clubs_several, values['clubs']) - clubs_many_level = fuzz.interp_membership(unv_clubs, clubs_many, values['clubs']) - - goals_few_level = fuzz.interp_membership(unv_goals, goals_few, values['goalsPerMatch']) - goals_moderate_level = fuzz.interp_membership(unv_goals, goals_moderate, values['goalsPerMatch']) - goals_many_level = fuzz.interp_membership(unv_goals, goals_many, values['goalsPerMatch']) - - avgValue_vpoor_level = fuzz.interp_membership(unv_avgValue, avgValue_vpoor, values['avgMarketValueInMln']) - avgValue_poor_level = fuzz.interp_membership(unv_avgValue, avgValue_poor, values['avgMarketValueInMln']) - avgValue_mpoor_level = fuzz.interp_membership(unv_avgValue, avgValue_mpoor, values['avgMarketValueInMln']) - avgValue_moderate_level = fuzz.interp_membership(unv_avgValue, avgValue_moderate, values['avgMarketValueInMln']) - avgValue_mrich_level = fuzz.interp_membership(unv_avgValue, avgValue_mrich, values['avgMarketValueInMln']) - avgValue_rich_level = fuzz.interp_membership(unv_avgValue, avgValue_rich, values['avgMarketValueInMln']) - avgValue_vrich_level = fuzz.interp_membership(unv_avgValue, avgValue_vrich, values['avgMarketValueInMln']) - - players_none_level = fuzz.interp_membership(unv_players, players_none, values['famousPlayers']) - players_few_level = fuzz.interp_membership(unv_players, players_few, values['famousPlayers']) - players_moderate_level = fuzz.interp_membership(unv_players, players_moderate, values['famousPlayers']) - players_many_level = fuzz.interp_membership(unv_players, players_many, values['famousPlayers']) - - teamsChL_min_level = fuzz.interp_membership(unv_teamsChL, teamsChL_min, values['teamsInChampionsLeague']) - teamsChL_mid_level = fuzz.interp_membership(unv_teamsChL, teamsChL_mid, values['teamsInChampionsLeague']) - teamsChL_max_level = fuzz.interp_membership(unv_teamsChL, teamsChL_max, values['teamsInChampionsLeague']) - - teamsEuL_min_level = fuzz.interp_membership(unv_teamsEuL, teamsEuL_min, values['teamsInEuropaLeague']) - teamsEuL_mid_level = fuzz.interp_membership(unv_teamsEuL, teamsEuL_mid, values['teamsInEuropaLeague']) - teamsEuL_max_level = fuzz.interp_membership(unv_teamsEuL, teamsEuL_max, values['teamsInEuropaLeague']) - - teamsCfL_min_level = fuzz.interp_membership(unv_teamsCfL, teamsCfL_min, values['teamsInConferenceLeague']) - teamsCfL_mid_level = fuzz.interp_membership(unv_teamsCfL, teamsCfL_mid, values['teamsInConferenceLeague']) - teamsCfL_max_level = fuzz.interp_membership(unv_teamsCfL, teamsCfL_max, values['teamsInConferenceLeague']) - - -def defineRules(): - global clubs_few_level, clubs_some_level, clubs_several_level, clubs_many_level - global goals_few_level, goals_moderate_level, goals_many_level - global avgValue_vpoor_level, avgValue_poor_level, avgValue_mpoor_level, avgValue_moderate_level, avgValue_mrich_level, avgValue_rich_level, avgValue_vrich_level - global players_none_level, players_few_level, players_moderate_level, players_many_level - global teamsChL_min_level, teamsChL_mid_level, teamsChL_max_level - global teamsEuL_min_level, teamsEuL_mid_level, teamsEuL_max_level - global teamsCfL_min_level, teamsCfL_mid_level, teamsCfL_max_level - global score_tragic, score_bad, score_moderate, score_good, score_best, unv_score - - # OR zmienić na AND (bo Or wybija wysokie wartości) - active_rule1 = np.fmax(clubs_some_level, - np.fmax(clubs_few_level, - np.fmax(goals_few_level, - np.fmax(avgValue_mpoor_level, - np.fmax(avgValue_poor_level, - np.fmax(avgValue_vpoor_level, - np.fmax(players_none_level, - np.fmax(teamsChL_min_level, - np.fmax(teamsEuL_min_level, - np.fmax(teamsCfL_max_level, teamsCfL_mid_level)))))))))) - - active_rule2 = np.fmax(clubs_several_level, - np.fmax(clubs_some_level, - np.fmax(clubs_few_level, - np.fmax(goals_moderate_level, - np.fmax(goals_few_level, - np.fmax(avgValue_moderate_level, - np.fmax(avgValue_mpoor_level, - np.fmax(avgValue_poor_level, - np.fmax(players_few_level, - np.fmax(players_none_level, - np.fmax(teamsChL_min_level, - np.fmax(teamsEuL_min_level, - np.fmax(teamsCfL_max_level, teamsCfL_mid_level))))))))))))) - - active_rule3 = np.fmax(clubs_several_level, - np.fmax(clubs_some_level, - np.fmax(goals_moderate_level, - np.fmax(avgValue_mrich_level, - np.fmax(avgValue_moderate_level, - np.fmax(avgValue_mpoor_level, - np.fmax(players_moderate_level, - np.fmax(players_few_level, - np.fmax(teamsChL_mid_level, - np.fmax(teamsChL_min_level, - np.fmax(teamsEuL_mid_level, - np.fmax(teamsEuL_min_level, - np.fmax(teamsCfL_max_level, teamsCfL_mid_level))))))))))))) - - active_rule4 = np.fmax(clubs_many_level, - np.fmax(clubs_several_level, - np.fmax(goals_many_level, - np.fmax(goals_moderate_level, - np.fmax(avgValue_vrich_level, - np.fmax(avgValue_rich_level, - np.fmax(avgValue_mrich_level, - np.fmax(players_many_level, - np.fmax(players_moderate_level, - np.fmax(teamsChL_mid_level, - np.fmax(teamsEuL_mid_level, teamsCfL_mid_level))))))))))) - - active_rule5 = np.fmax(clubs_many_level, - np.fmax(goals_many_level, - np.fmax(avgValue_vrich_level, - np.fmax(players_many_level, - np.fmax(teamsChL_max_level, - np.fmax(teamsEuL_max_level, teamsCfL_min_level)))))) - - score_activation_tragic = np.fmin(active_rule1, score_tragic) - score_activation_bad = np.fmin(active_rule2, score_bad) - score_activation_moderate = np.fmin(active_rule3, score_moderate) - score_activation_good = np.fmin(active_rule4, score_good) - score_activation_best = np.fmin(active_rule5, score_best) - - aggregated_rules = np.fmax(score_activation_tragic, np.fmax(score_activation_bad, np.fmax(score_activation_moderate, np.fmax(score_activation_good, score_activation_best)))) - - # active_rule1 = np.fmax(qual_level_lo, serv_level_lo) - # tip_activation_lo = np.fmin(active_rule1, tip_lo) # removed entirely to 0 - # - # - # tip_activation_md = np.fmin(serv_level_md, tip_md) - # - # active_rule3 = np.fmax(qual_level_hi, serv_level_hi) - # tip_activation_hi = np.fmin(active_rule3, tip_hi) - # - # aggregated_rules = np.fmax(tip_activation_lo, np.fmax(tip_activation_md, tip_activation_hi)) - - score = fuzz.defuzz(unv_score, aggregated_rules, 'centroid') - score_activation = fuzz.interp_membership(unv_score, aggregated_rules, score) # for plot - return score_activation - class LeagueController: clubs = None goals = None diff --git a/res2.csv b/res2.csv new file mode 100644 index 0000000..e51537c --- /dev/null +++ b/res2.csv @@ -0,0 +1,55 @@ +League,Score +Premier League,89.79166666666667 +LaLiga,87.99305555555551 +Serie A,69.99999999999997 +Bundesliga,69.99999999999997 +Ligue 1,70.0 +Liga Bwin,50.0 +Eredivisie,50.0 +Bundesliga,50.0 +Premiership,50.0 +Premier Liga,50.0 +Premier Liga,50.0 +Super liga Srbije,16.06985926699488 +Jupiler Pro League,50.0 +Super League,16.720238095238116 +Protathlima Cyta,37.46376811594203 +1.HNL,19.502537932480898 +Fortuna Liga,50.0 +Super Lig,50.0 +Super League 1,16.72023809523811 +Superligaen,50.0 +Eliteserien,18.708853030574293 +Ligat ha'Al,18.452797318931577 +Allsvenskan,16.373584957387074 +efbet Liga,18.30879493889046 +Premyer Liqa,16.513252197430706 +Liga 1,16.563786394400363 +Ekstraklasa,17.799929815326582 +NB I.,16.607555033649284 +Fortuna Liga,17.47128703953887 +Premier Liga,17.017969510028376 +Prva Liga,18.027979553403277 +Vysheyshaya Liga,16.92098939265932 +Divizia Nationala,17.47128703953887 +A Lyga,16.945442256089507 +Premijer Liga,18.93687055144107 +Veikkausliiga,18.118481435127244 +BGL Ligue,13.732949223788575 +Virsliga,17.81954033134955 +BKT Superliga e Kosovës,40.104166666666664 +Premier Division,12.170932536120004 +Premiership,14.77821484228063 +Kategoria Superiore,17.47128703953886 +Bardzragujn khumb,18.027979553403277 +Betri-deildin,40.104166666666664 +Premium Liiga,40.104166666666664 +Premier League,17.576907528891994 +Crystalbet Erovnuli Liga,17.384648906569666 +Prva liga,16.993931364085164 +Cymru Premier,10.990792282448856 +Gibraltar National League,10.208333333333334 +Pepsi Max deild,13.976944727639466 +1. CFL,16.945442256089507 +Primera Divisió,40.104166666666664 +Camp. Sammarinese,40.104166666666664