# %% 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 numpy as np import xpress as xp xp.controls.outputlog = 0 scenario = Scenario.objects.get(id=59) # %% 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 drawpositions = range(1,10) positions = range(8) nOpponents = {} nConflicts = {} for t in teams: for p in positions: for d in drawpositions: nOpponents[(t.id,p,d)] = [] nConflicts[(t.id,p,d)] = [] with open('draw_options_HA_2country.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 = int(row[1]) drawpos = ((int(row[2])-1) % 9) + 1 pos = 0 for p in row[4].split(";"): if p != "None": nOpponents[(team,pos,drawpos)].append(int(p)) else: nOpponents[(team,pos,drawpos)].append(0) pos += 1 pos = 0 for p in row[5].split(";"): if p != "None" and len(nOpponents[(team,pos,drawpos)]) > 0: nConflicts[(team,pos,drawpos)].append(int(p)) else: nConflicts[(team,pos,drawpos)].append(0) pos += 1 for key in nOpponents.keys(): nOpponents[key] = round(np.mean(nOpponents[key]),2) if nOpponents[key] else "---" for key in nConflicts.keys(): if nOpponents[key] == "---": nConflicts[key] = "---" else: nConflicts[key] = round(np.mean(nConflicts[key])*100) if nConflicts[key] else 0 # %% 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 += "

Number of draw options

" sol += "\n" sol += "\n" sol += "" sol += f"\n" sol += "" sol += "" sol += "" sol += "" sol += "" sol += "\n" sol += f"\n" # for o in order: for t in teams: sol += f"\n" sol += "\n" sol += "\n" for t in teams: sol += f"\n" sol += f"\n" sol += "\n" sol += "\n" sol += "\n" # for o1 in order: potMap = { 0: 'A', 2: 'B', 4: 'C', 6: 'D' } for pot in [0,2,4,6]: sol += "\n" sol += f"" for drawpos in drawpositions: # t1 = getTeamByName[o1] sol += f"" # for o2 in order: for t in teams: for r in range(2): color = 'white' sol += f"" # 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 += "\n" sol += "\n" sol += "
Pot#{t.shortname}
{potMap[pot]}{drawpos}{nOpponents[(t.id,pot+r,drawpos)]}{val}
\n" sol += "
\n" sol += "
\n" sol += "
\n" sol += "

Probability of combinatorial clashes

" sol += "\n" sol += "\n" sol += "" sol += f"\n" sol += "" sol += "" sol += "" sol += "" sol += "" sol += "\n" sol += f"\n" # for o in order: for t in teams: sol += f"\n" sol += "\n" sol += "\n" for t in teams: sol += f"\n" sol += f"\n" sol += "\n" sol += "\n" sol += "\n" # for o1 in order: potMap = { 0: 'A', 2: 'B', 4: 'C', 6: 'D' } for pot in [0,2,4,6]: sol += "\n" sol += f"" for drawpos in drawpositions: # t1 = getTeamByName[o1] sol += f"" # for o2 in order: for t in teams: for r in range(2): color = 'white' if nConflicts[(t.id,pot+r,drawpos)] != "---": sol += f"" else: sol += f"" # 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 += "\n" sol += "\n" sol += "
Pot#{t.shortname}
{potMap[pot]}{drawpos}{nConflicts[(t.id,pot+r,drawpos)]}%{nConflicts[(t.id,pot+r,drawpos)]}{val}
\n" with open(f'opponents_HA_2country.html', 'w') as f: f.write(sol) # %%