FindYourLeague/main.py

437 lines
25 KiB
Python
Raw Normal View History

2021-12-08 19:43:46 +01:00
import numpy as np
import skfuzzy as fuzz
from skfuzzy import control as ctrl
2021-12-08 19:43:46 +01:00
import matplotlib.pyplot as plt
2021-12-08 21:18:20 +01:00
from read_data import get_leagues_data
import pandas as pd
2021-12-08 19:43:46 +01:00
# https://pythonhosted.org/scikit-fuzzy/auto_examples/plot_tipping_problem.html
# Variables for universes
2021-12-27 16:01:23 +01:00
unv_clubs = unv_goals = unv_avgValue = unv_players = unv_teamsChL = unv_teamsEuL = unv_teamsCfL = unv_score = None
2021-12-08 19:43:46 +01:00
# Variables for fuzzy membership functions
2021-12-27 16:01:23 +01:00
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
2021-12-08 19:43:46 +01:00
# Activations of fuzzy membership functions
2021-12-27 16:01:23 +01:00
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
2021-12-08 19:43:46 +01:00
def initFuzzyMembershipFunctions():
2021-12-27 16:01:23 +01:00
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
2021-12-08 19:43:46 +01:00
# Universes for variables
unv_clubs = np.arange(2, 31, 1)
2021-12-27 16:01:23 +01:00
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)
2021-12-08 19:43:46 +01:00
# Result score universum
2021-12-27 16:01:23 +01:00
unv_score = np.arange(0, 101, 1)
2021-12-08 19:43:46 +01:00
# Generate fuzzy membership functions
# trimf - triangular function
# trapmf - trapezoidal function
2021-12-27 16:01:23 +01:00
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])
2021-12-08 19:43:46 +01:00
teamsCfL_mid = fuzz.trimf(unv_teamsCfL, [1, 2, 3])
2021-12-27 16:01:23 +01:00
teamsCfL_max = fuzz.trapmf(unv_teamsCfL, [2, 3, 5, 5])
2021-12-08 19:43:46 +01:00
2021-12-27 16:01:23 +01:00
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])
2021-12-08 19:43:46 +01:00
def activateFuzzyMembershipFunctions(values):
2021-12-27 16:01:23 +01:00
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
2021-12-08 19:43:46 +01:00
# Activation of fuzzy membership functions at given values.
2021-12-27 16:01:23 +01:00
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'])
2021-12-08 21:18:20 +01:00
teamsChL_mid_level = fuzz.interp_membership(unv_teamsChL, teamsChL_mid, values['teamsInChampionsLeague'])
2021-12-27 16:01:23 +01:00
teamsChL_max_level = fuzz.interp_membership(unv_teamsChL, teamsChL_max, values['teamsInChampionsLeague'])
2021-12-08 19:43:46 +01:00
2021-12-27 16:01:23 +01:00
teamsEuL_min_level = fuzz.interp_membership(unv_teamsEuL, teamsEuL_min, values['teamsInEuropaLeague'])
2021-12-08 21:18:20 +01:00
teamsEuL_mid_level = fuzz.interp_membership(unv_teamsEuL, teamsEuL_mid, values['teamsInEuropaLeague'])
2021-12-27 16:01:23 +01:00
teamsEuL_max_level = fuzz.interp_membership(unv_teamsEuL, teamsEuL_max, values['teamsInEuropaLeague'])
2021-12-08 19:43:46 +01:00
2021-12-27 16:01:23 +01:00
teamsCfL_min_level = fuzz.interp_membership(unv_teamsCfL, teamsCfL_min, values['teamsInConferenceLeague'])
2021-12-08 21:18:20 +01:00
teamsCfL_mid_level = fuzz.interp_membership(unv_teamsCfL, teamsCfL_mid, values['teamsInConferenceLeague'])
2021-12-27 16:01:23 +01:00
teamsCfL_max_level = fuzz.interp_membership(unv_teamsCfL, teamsCfL_max, values['teamsInConferenceLeague'])
2021-12-08 19:43:46 +01:00
def defineRules():
2021-12-27 16:01:23 +01:00
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
2021-12-08 19:43:46 +01:00
# OR zmienić na AND (bo Or wybija wysokie wartości)
2021-12-27 16:01:23 +01:00
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))))
2021-12-08 19:43:46 +01:00
# 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
avgValue = None
players = None
teamsChL = None
teamsEuL = None
teamsCfL = None
score = None
rule1 = None
rule2 = None
rule3 = None
rule4 = None
rule5 = None
league_ctrl = None
league_system = None
def __init__(self):
# Universes for variables
self.clubs = ctrl.Antecedent(np.arange(2, 31, 1), 'clubs')
self.goals = ctrl.Antecedent(np.arange(0.99, 5.01, 0.01), 'goals')
self.avgValue = ctrl.Antecedent(np.arange(0.01, 500.01, 0.01), 'avgValue')
self.players = ctrl.Antecedent(np.arange(0, 101, 1), 'players')
self.teamsChL = ctrl.Antecedent(np.arange(0, 6, 1), 'teamsChL')
self.teamsEuL = ctrl.Antecedent(np.arange(0, 6, 1), 'teamsEuL')
self.teamsCfL = ctrl.Antecedent(np.arange(0, 6, 1), 'teamsCfL')
# Result score universum
self.score = ctrl.Consequent(np.arange(0, 101, 1), 'score')
# Membership Functions
# trimf - triangular function
# trapmf - trapezoidal function
self.clubs['few'] = fuzz.trapmf(self.clubs.universe, [2, 2, 5, 8])
self.clubs['some'] = fuzz.trapmf(self.clubs.universe, [3, 6, 9, 12])
self.clubs['several'] = fuzz.trapmf(self.clubs.universe, [8, 11, 15, 18])
self.clubs['many'] = fuzz.trapmf(self.clubs.universe, [15, 18, 30, 30])
self.goals['few'] = fuzz.trapmf(self.goals.universe, [1.0, 1.0, 2.0, 3.0])
self.goals['moderate'] = fuzz.trimf(self.goals.universe, [2.5, 3.0, 3.5])
self.goals['many'] = fuzz.trapmf(self.goals.universe, [3.0, 3.5, 5.0, 5.0])
self.avgValue['vpoor'] = fuzz.trapmf(self.avgValue.universe, [0.01, 0.01, 1.0, 2.0])
self.avgValue['poor'] = fuzz.trimf(self.avgValue.universe, [1.0, 5.0, 15.0])
self.avgValue['mpoor'] = fuzz.trimf(self.avgValue.universe, [7.5, 20.0, 50.0])
self.avgValue['moderate'] = fuzz.trimf(self.avgValue.universe, [20.0, 50.0, 100.0])
self.avgValue['mrich'] = fuzz.trimf(self.avgValue.universe, [50.0, 100.0, 175.0])
self.avgValue['rich'] = fuzz.trimf(self.avgValue.universe, [150.0, 200.0, 275.0])
self.avgValue['vrich'] = fuzz.trapmf(self.avgValue.universe, [200.0, 300.0, 500.0, 500.0])
self.players['none'] = fuzz.trimf(self.players.universe, [0, 0, 1])
self.players['few'] = fuzz.trapmf(self.players.universe, [1, 5, 10, 15])
self.players['moderate'] = fuzz.trapmf(self.players.universe, [10, 15, 20, 25])
self.players['many'] = fuzz.trapmf(self.players.universe, [20, 25, 100, 100])
self.teamsChL['min'] = fuzz.trapmf(self.teamsChL.universe, [0, 0, 1, 2])
self.teamsChL['mid'] = fuzz.trapmf(self.teamsChL.universe, [1, 2, 3, 4])
self.teamsChL['max'] = fuzz.trapmf(self.teamsChL.universe, [3, 4, 5, 5])
self.teamsEuL['min'] = fuzz.trimf(self.teamsEuL.universe, [0, 0, 1])
self.teamsEuL['mid'] = fuzz.trimf(self.teamsEuL.universe, [0, 1, 2])
self.teamsEuL['max'] = fuzz.trapmf(self.teamsEuL.universe, [1, 2, 5, 5])
self.teamsCfL['min'] = fuzz.trapmf(self.teamsCfL.universe, [0, 0, 1, 2])
self.teamsCfL['mid'] = fuzz.trimf(self.teamsCfL.universe, [1, 2, 3])
self.teamsCfL['max'] = fuzz.trapmf(self.teamsCfL.universe, [2, 3, 5, 5])
self.score['tragic'] = fuzz.trapmf(self.score.universe, [0, 0, 15, 25])
self.score['bad'] = fuzz.trapmf(self.score.universe, [15, 25, 35, 45])
self.score['moderate'] = fuzz.trapmf(self.score.universe, [35, 45, 55, 65])
self.score['good'] = fuzz.trapmf(self.score.universe, [55, 65, 75, 85])
self.score['best'] = fuzz.trapmf(self.score.universe, [75, 85, 100, 100])
# FuzzyRules
self.rule1 = ctrl.Rule(self.clubs['some'] | self.clubs['few'] | self.goals['few'] | self.avgValue['mpoor'] | self.avgValue['poor'] | self.avgValue['vpoor'] | self.players['none'] | self.teamsChL['min'] | self.teamsEuL['min'] | self.teamsCfL['max'] | self.teamsCfL['mid'], self.score['tragic'])
self.rule2 = ctrl.Rule(self.clubs['several'] | self.clubs['some'] | self.clubs['few'] | self.goals['moderate'] | self.goals['few'] | self.avgValue['moderate'] | self.avgValue['mpoor'] | self.avgValue['poor'] | self.players['few'] | self.players['none'] | self.teamsChL['min'] | self.teamsEuL['min'] | self.teamsCfL['max'] | self.teamsCfL['mid'], self.score['bad'])
self.rule3 = ctrl.Rule(self.clubs['several'] | self.clubs['some'] | self.goals['moderate'] | self.avgValue['mrich'] | self.avgValue['moderate'] | self.avgValue['mpoor'] | self.players['moderate'] | self.players['few'] | self.teamsChL['mid'] | self.teamsChL['min'] | self.teamsEuL['mid'] | self.teamsEuL['min'] | self.teamsCfL['max'] | self.teamsCfL['mid'], self.score['moderate'])
self.rule4 = ctrl.Rule(self.clubs['many'] | self.clubs['several'] | self.goals['many'] | self.goals['moderate'] | self.avgValue['vrich'] | self.avgValue['rich'] | self.avgValue['mrich'] | self.players['many'] | self.players['moderate'] | self.teamsChL['mid'] | self.teamsEuL['mid'] | self.teamsCfL['mid'], self.score['good'])
self.rule5 = ctrl.Rule(self.clubs['many'] | self.goals['many'] | self.avgValue['vrich'] | self.players['many'] | self.teamsChL['max'] | self.teamsEuL['max'] | self.teamsCfL['min'], self.score['best'])
self.league_ctrl = ctrl.ControlSystem([self.rule1, self.rule2, self.rule3, self.rule4, self.rule5])
self.league_system = ctrl.ControlSystemSimulation(self.league_ctrl)
def getScore(self, values):
self.league_system.input['clubs'] = values['clubs']
self.league_system.input['goals'] = values['goalsPerMatch']
self.league_system.input['avgValue'] = values['avgMarketValueInMln']
self.league_system.input['players'] = values['famousPlayers']
self.league_system.input['teamsChL'] = values['teamsInChampionsLeague']
self.league_system.input['teamsEuL'] = values['teamsInEuropaLeague']
self.league_system.input['teamsCfL'] = values['teamsInConferenceLeague']
self.league_system.compute()
return self.league_system.output['score']
#score.view(sim=league_system)
def displayMembershipFunctionPlot(self, function_id):
if function_id == 0:
self.score.view()
elif function_id == 1:
self.clubs.view()
elif function_id == 2:
self.goals.view()
elif function_id == 3:
self.avgValue.view()
elif function_id == 4:
self.players.view()
elif function_id == 5:
self.teamsChL.view()
elif function_id == 6:
self.teamsEuL.view()
elif function_id == 7:
self.teamsCfL.view()
def displayRulePlot(self, rule_id):
if rule_id == 1:
self.rule1.view()
elif rule_id == 2:
self.rule2.view()
elif rule_id == 3:
self.rule3.view()
elif rule_id == 4:
self.rule4.view()
elif rule_id == 5:
self.rule5.view()
def displayControllerResultPlot(self):
self.score.view(sim=self.league_system)
2021-12-08 19:43:46 +01:00
if __name__ == "__main__":
league_name_col = []
league_score_col = []
# initFuzzyMembershipFunctions()
controller = LeagueController()
2021-12-20 10:51:28 +01:00
data_source = None
function_rule_result = None
function_id = None
rule_id = None
view_plot = None
data_save = None
2021-12-20 10:51:28 +01:00
while not(data_source == '1' or data_source == '2'):
data_source = input('Wpisz 1 by wczytać dane z pliku lub 2 by wpisać dane z konsoli:\n')
if data_source == '1':
leagues_data = get_leagues_data('leagues.csv')
for league in leagues_data:
#activateFuzzyMembershipFunctions(league)
#result = defineRules()
result = controller.getScore(league)
2021-12-20 10:51:28 +01:00
print(f"{league['leagueName']} score is: {result}")
league_name_col.append(league['leagueName'])
league_score_col.append(result)
data_save = input('Wpisz 1 by zapisać dane do pliku lub dowolny klawisz żeby kontynuować:\n')
if data_save == '1':
file_name = input('Podaj nazwę pliku:\n')
file_name += ".csv"
d = {'League':league_name_col,'Score':league_score_col}
df = pd.DataFrame(d)
df.to_csv(file_name, index=False)
print('Wyniki zostały zapisane w pliku csv w folderze programu')
2021-12-20 10:51:28 +01:00
else:
league = {'leagueName': input('Podaj nazwę ligi:\n'), 'country': input('Podaj kraj ligi:\n'),
'clubs': input('Podaj liczbę klubów grających w lidze:\n'),
'goalsPerMatch': input('Podaj średnią liczbę goli na mecz:\n'),
'avgMarketValueInMln': input('Podaj średnią wartośc klubu w lidze (w milionach):\n'),
'teamsInChampionsLeague': input('Podaj liczbę klubów grających w Lidze Mistrzów:\n'),
'teamsInEuropaLeague': input('Podaj liczbę klubów grających w Lidze Europy:\n'),
'teamsInConferenceLeague': input('Podaj liczbę klubów grających w Lidze Konferencji:\n'),
'famousPlayers': input('Podaj liczbę sławnych piłkarzy:\n')}
# activateFuzzyMembershipFunctions(league)
# result = defineRules()
result = controller.getScore(league)
2021-12-08 21:18:20 +01:00
print(f"{league['leagueName']} score is: {result}")
view_plot = input('Wpisz 1 jeżeli chcesz obejrzeć wykresy funkcji i reguł dla ostatnio sprawdzanej ligi lub dowolny klawisz żeby kontynuować:\n')
if view_plot == '1':
while (function_rule_result != '0'):
function_rule_result = input('Wybierz rodzaj wykresu:\n1 - wykresy funkcji przynależności\n2 - wykresy reguł\n3 - wykres wyniku kontrolera\n0 - skończ wizualizację\n')
if function_rule_result == "1":
while (function_id != '8'):
function_id = input('Wybierz funkcje przynależności:\n0 - funkcje punktów atrakcyjności ligi\n1 - funkcje klubów w lidze\n2 - funkcje średniej ilości golów\n3 - funkcje średniej wartości rynkowej\n4 - funkcje ilości słynnych zawodników\n5 - funkcje drużyn w lidze mistrzów\n6 - funkcję drużyn w lidze europy\n7 - funkcję drużyn w lidze konfederacji\n8 - powrót do poprzedniego menu\n')
if function_id == "0" or function_id == "1" or function_id == "2" or function_id == "3" or function_id == "4" or function_id == "5" or function_id == "6" or function_id == "7":
controller.displayMembershipFunctionPlot(int(function_id))
elif function_rule_result == "2":
while (rule_id != '6'):
rule_id = input('Wybierz regułę:\n1 - reguła dla tragicznych lig\n2 - reguła dla słabych lig\n3 - reguła dla przeciętnych lig\n4 - reguła dla dobrych lig\n5 - reguła dla najlepszych lig\n6 - powrót do poprzedniego menu\n')
if rule_id == "1" or rule_id == "2" or rule_id == "3" or rule_id == "4" or rule_id == "5":
controller.displayRulePlot(int(rule_id))
elif function_rule_result == "3":
controller.displayControllerResultPlot()
2021-12-08 19:43:46 +01:00
#plt.show()