# %% PROJECT_PATH = '/home/md/Work/ligalytics/leagues_stable/' import os, sys sys.path.insert(0, PROJECT_PATH) os.environ.setdefault("DJANGO_SETTINGS_MODULE", "leagues.settings") os.environ["DJANGO_ALLOW_ASYNC_UNSAFE"] = "true" import random import time # XPRESS ENVIRONMENT os.environ['XPRESSDIR'] = "/opt/xpressmp_8.4" os.environ['XPRESS'] = "/opt/xpressmp_8.4/bin" os.environ['LD_LIBRARY_PATH'] = os.environ['XPRESSDIR']+"/lib:"+os.environ['LD_LIBRARY_PATH'] os.environ['DYLD_LIBRARY_PATH'] = os.environ['XPRESSDIR']+"/lib:" os.environ['SHLIB_PATH'] = os.environ['XPRESSDIR']+"/lib:" os.environ['LIBPATH'] = os.environ['XPRESSDIR']+"/lib:" # os.environ['PYTHONPATH'] =os.environ['XPRESSDIR']+"/lib:"+os.environ['PYTHONPATH'] os.environ['PYTHONPATH'] =os.environ['XPRESSDIR']+"/lib:" os.environ['CLASSPATH'] =os.environ['XPRESSDIR']+"/lib/xprs.jar:" os.environ['CLASSPATH'] =os.environ['XPRESSDIR']+"/lib/xprb.jar:"+os.environ['CLASSPATH'] os.environ['CLASSPATH'] =os.environ['XPRESSDIR']+"/lib/xprm.jar:"+os.environ['CLASSPATH'] os.environ['PATH'] =os.environ['XPRESSDIR']+"/bin:"+os.environ['PATH'] from leagues import settings settings.DATABASES['default']['NAME'] = PROJECT_PATH+'/db.sqlite3' import django django.setup() from scheduler.models import * from pulp import * import csv import xpress as xp xp.controls.outputlog = 0 scenario = Scenario.objects.get(id=32) # %% order = {} order['FC Bayern München'] = 1 order['Manchester City FC'] = 2 order['Liverpool FC'] = 3 order['Real Madrid CF'] = 4 order['Chelsea FC'] = 5 order['FC Barcelona'] = 6 order['Paris Saint-Germain'] = 7 order['Juventus'] = 8 order['Club Atlético de Madrid'] = 9 order['Sevilla FC'] = 10 order['RB Leipzig'] = 11 order['Tottenham Hotspur'] = 12 order['AFC Ajax'] = 13 order['FC Porto'] = 14 order['Arsenal FC'] = 15 order['Borussia Dortmund'] = 16 order['FC Salzburg'] = 17 order['FC Shakhtar Donetsk'] = 18 order['FC Internazionale Milano'] = 19 order['SSC Napoli'] = 20 order['Eintracht Frankfurt'] = 21 order['SL Benfica'] = 22 order['Sporting Clube de Portugal'] = 23 order['Bayer 04 Leverkusen'] = 24 order['Rangers FC'] = 25 order['GNK Dinamo'] = 26 order['FK Crvena zvezda'] = 27 order['Olympique de Marseille'] = 28 order['F.C. Copenhagen'] = 29 order['Club Brugge'] = 30 order['AC Milan'] = 31 order['PSV Eindhoven'] = 32 order['Celtic FC'] = 33 order['FC Viktoria Plzeň'] = 34 order['AS Monaco'] = 35 order['Maccabi Haifa FC'] = 36 # %% teams = Team.objects.filter(season=scenario.season,active=True).order_by('pot','country') countries = list(set(list(teams.values_list('country', flat=True)))) # print(countries) # %% getTeamByID = { t.id:t for t in teams } getPotByID = { t.id:t.pot for t in teams } getTeamByName = { t.name:t for t in teams } getCountryByTeamID = { t.id:t.country for t in teams } played_countries = { (t1, c):0 for c in countries for t1 in teams } stats = { (t1,t2):0 for t1 in teams for t2 in teams } random_stats = { (t1,t2):0 for t1 in teams for t2 in teams } pots = { t1:{ p:0 for p in range(1,5) } for t1 in teams } simulations = 0 maxVal = 1 minVal = 99999999 maxCVal = 1 minCVal = 9999999 with open('verteilung_draw2.csv', newline='') as csvfile: # with open('verteilung_random.csv', newline='') as csvfile: reader = csv.reader(csvfile) next(reader, None) for row in reader: simulations = int(row[0]) team = getTeamByID[int(row[1])] Aopps = [getTeamByID[int(t)] for t in row[2].split(";")] for o in Aopps: stats[team,o] += 1 pots[team][getPotByID[o.id]] += 1 played_countries[team,o.country] += 1 Bopps = [getTeamByID[int(t)] for t in row[3].split(";")] for o in Bopps: stats[team,o] += 1 pots[team][getPotByID[o.id]] += 1 played_countries[team,o.country] += 1 Copps = [getTeamByID[int(t)] for t in row[4].split(";")] for o in Copps: stats[team,o] += 1 pots[team][getPotByID[o.id]] += 1 played_countries[team,o.country] += 1 Dopps = [getTeamByID[int(t)] for t in row[5].split(";")] for o in Dopps: stats[team,o] += 1 pots[team][getPotByID[o.id]] += 1 played_countries[team,o.country] += 1 if stats[team,o] > maxVal: maxVal = stats[team,o] if played_countries[team,o.country] > maxCVal: maxCVal = played_countries[team,o.country] # with open('verteilung_draw.csv', newline='') as csvfile: with open('verteilung_random.csv', newline='') as csvfile: reader = csv.reader(csvfile) next(reader, None) for row in reader: # simulations = int(row[0]) team = getTeamByID[int(row[1])] Aopps = [getTeamByID[int(t)] for t in row[2].split(";")] for o in Aopps: random_stats[team,o] += 1 # pots[team][getPotByID[o.id]] += 1 # played_countries[team,o.country] += 1 Bopps = [getTeamByID[int(t)] for t in row[3].split(";")] for o in Bopps: random_stats[team,o] += 1 # pots[team][getPotByID[o.id]] += 1 # played_countries[team,o.country] += 1 Copps = [getTeamByID[int(t)] for t in row[4].split(";")] for o in Copps: random_stats[team,o] += 1 # pots[team][getPotByID[o.id]] += 1 # played_countries[team,o.country] += 1 Dopps = [getTeamByID[int(t)] for t in row[5].split(";")] for o in Dopps: random_stats[team,o] += 1 # pots[team][getPotByID[o.id]] += 1 # played_countries[team,o.country] += 1 diff = {} mindval = 999999 maxdval = 0 for key in random_stats.keys(): diff[key] = stats[key]/simulations - random_stats[key]/simulations if diff[key] > maxdval: maxdval = diff[key] if diff[key] > 0 and diff[key] < mindval: mindval = diff[key] for key, val in stats.items(): if val > 0 and val < minVal: minVal = val print(minVal) for key, val in played_countries.items(): if val > 0 and val < minCVal: minCVal = val # for t in pots: # print(t,pots[t]) def heatmap_color_for(value): if value <= 0.5: g = 256 r = 2 * max(0,value) * 256 if value > 0.5: g = 2*(1-min(1,value))*256 r = 256 return f"rgb({r},{g},{0})" sol = " \ \ " sol += "

Probabilities of games

" sol += "\n" sol += "\n" sol += "" sol += "" sol += "" sol += "" sol += "" sol += "" sol += "" sol += "\n" sol += f"\n" # for o in order: for t in teams: # t = getTeamByName[o] sol += f"\n" sol += "\n" sol += "\n" sol += "\n" # for o1 in order: for t1 in teams: # t1 = getTeamByName[o1] sol += "\n" sol += f"" # for o2 in order: for t2 in teams: # t2 = getTeamByName[o2] color = heatmap_color_for((stats[t1,t2]-minVal)/(maxVal-minVal)) if stats[t1,t2] == 0: color = 'grey' val = f"{round(round(stats[t1,t2]/simulations,2)*100)}%" # val = stats[t1,t2] sol += f"" sol += "\n" sol += "\n" sol += "
Pot APot BPot CPot D
n = {simulations+1}{t.shortname}
{t1.shortname}{val}
\n" sol += "
" sol += "
" sol += "
" sol += "

Average number of Games against other countries

" sol += "\n" sol += "\n" sol += "" sol += "\n" sol += f"\n" for c in countries: sol += f"\n" sol += "\n" sol += "\n" sol += "\n" # for o1 in order: for t1 in teams: # t1 = getTeamByName[o1] sol += "\n" sol += f"" for c in countries: # color = heatmap_color_for((played_countries[t1,c]-minCVal)/(maxCVal-minCVal)) color = 'lightsteelblue' if played_countries[t1,c] == 0: color = 'grey' # val = f"{round(round(played_played_countries[t1][c]/simulations,2)*100)}%" val = f"{round(played_countries[t1,c]/(simulations+1),2)}" # val = stats[t1,t2] sol += f"" sol += "\n" sol += "\n" sol += "
n = {simulations+1}{c}
{t1.shortname}{val}
\n" sol += "
" sol += "
" sol += "
" sol += "

Draw procedure compared to evenly distributed encounters

" sol += "\n" sol += "\n" sol += "\n" sol += f"\n" # for o in order: for t in teams: # t = getTeamByName[o] sol += f"\n" sol += "\n" sol += "\n" sol += "\n" # for o1 in order: for t1 in teams: # t1 = getTeamByName[o1] sol += "\n" sol += f"" # for o2 in order: for t2 in teams: # t2 = getTeamByName[o2] color = heatmap_color_for((abs(diff[t1,t2])-mindval)/(maxdval-mindval)) if stats[t1,t2] == 0: color = 'grey' val = f"{diff[t1,t2]}%" # val = stats[t1,t2] sol += f"" sol += "\n" sol += "\n" sol += "
n = {simulations+1}{t.shortname}
{t1.shortname}{round(round(diff[t1,t2],2)*100)}%
\n" with open(f'stats.html', 'w') as f: f.write(sol) # %%