Skip to content

Commit a333092

Browse files
committed
Added stack argument to LineupGenerator class and different class options to Nba subclass. Added input for feb 3
1 parent f304023 commit a333092

File tree

5 files changed

+394
-9
lines changed

5 files changed

+394
-9
lines changed

LineupGenerator.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,13 @@
77
import os.path
88

99
class LineupGenerator:
10-
def __init__(self, sport, num_lineups, overlap, player_limit, teams_limit, solver, correlation_file, players_file, defenses_goalies_file, output_file):
10+
def __init__(self, sport, num_lineups, overlap, player_limit, teams_limit, stack, solver, correlation_file, players_file, defenses_goalies_file, output_file):
1111
self.sport = sport
1212
self.num_lineups = num_lineups
1313
self.overlap = overlap
1414
self.player_limit = player_limit
1515
self.teams_limit = teams_limit
16+
self.stack = stack
1617
self.solver = solver
1718
self.players = self.load(players_file)
1819
self.num_players = len(self.players.index)

Nba.py

+46-5
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
from LineupGenerator import LineupGenerator
33

44
class Nba(LineupGenerator):
5-
def __init__(self, sport, num_lineups, overlap, player_limit, teams_limit, solver, correlation_file, players_file, defenses_goalies_file, output_file):
6-
super().__init__(sport, num_lineups, overlap, player_limit, teams_limit, solver, correlation_file, players_file, defenses_goalies_file, output_file)
5+
def __init__(self, sport, num_lineups, overlap, player_limit, teams_limit, stack, solver, correlation_file, players_file, defenses_goalies_file, output_file):
6+
super().__init__(sport, num_lineups, overlap, player_limit, teams_limit, stack, solver, correlation_file, players_file, defenses_goalies_file, output_file)
77
self.salary_cap = 55000
88
self.header = ['PG', 'PG', 'SG', 'SG', 'SF', 'SF', 'PF', 'PF', 'C']
99

@@ -31,10 +31,51 @@ def generate(self, lineups):
3131
prob += (used_team[i] <= (pulp.lpSum(self.players_teams[k][i]*players_lineup[k] for k in range(self.num_players))))
3232

3333
# stacks SGs with another player from the same team
34-
prob += (pulp.lpSum(self.players_teams[k][i]*self.positions['PG'][k]*players_lineup[k] for k in range(self.num_players))
35-
<= pulp.lpSum(self.players_teams[k][i]*self.positions['SG'][k]*players_lineup[k] for k in range(self.num_players)))
34+
if self.stack == "PG-SG":
35+
prob += (pulp.lpSum(self.players_teams[k][i]*self.positions['PG'][k]*players_lineup[k] for k in range(self.num_players))
36+
<= pulp.lpSum(self.players_teams[k][i]*self.positions['SG'][k]*players_lineup[k] for k in range(self.num_players)))
37+
elif self.stack == "PG-(SG-SF-PF)":
38+
prob += (pulp.lpSum(self.players_teams[k][i]*self.positions['PG'][k]*players_lineup[k] for k in range(self.num_players))
39+
<= (pulp.lpSum(self.players_teams[k][i]*self.positions['SG'][k]*players_lineup[k] for k in range(self.num_players))
40+
+ pulp.lpSum(self.players_teams[k][i]*self.positions['SF'][k]*players_lineup[k] for k in range(self.num_players))
41+
+ pulp.lpSum(self.players_teams[k][i]*self.positions['PF'][k]*players_lineup[k] for k in range(self.num_players))))
42+
elif self.stack == "PG-(SG-SF-PF)-(SG-SF-PF)":
43+
prob += (2*pulp.lpSum(self.players_teams[k][i]*self.positions['PG'][k]*players_lineup[k] for k in range(self.num_players))
44+
<= (pulp.lpSum(self.players_teams[k][i]*self.positions['SG'][k]*players_lineup[k] for k in range(self.num_players))
45+
+ pulp.lpSum(self.players_teams[k][i]*self.positions['SF'][k]*players_lineup[k] for k in range(self.num_players))
46+
+ pulp.lpSum(self.players_teams[k][i]*self.positions['PF'][k]*players_lineup[k] for k in range(self.num_players))))
47+
elif self.stack == "PG-SG+PG-SG":
48+
for j in range(self.num_teams):
49+
if i != j:
50+
prob += (pulp.lpSum(self.players_teams[k][i]*self.positions['PG'][k]*players_lineup[k] for k in range(self.num_players))
51+
<= pulp.lpSum(self.players_teams[k][i]*self.positions['SG'][k]*players_lineup[k] for k in range(self.num_players)))
52+
prob += (pulp.lpSum(self.players_teams[k][j]*self.positions['PG'][k]*players_lineup[k] for k in range(self.num_players))
53+
<= pulp.lpSum(self.players_teams[k][j]*self.positions['SG'][k]*players_lineup[k] for k in range(self.num_players)))
54+
elif self.stack == "PG-(SG-SF-PF)+PG-(SG-SF-PF)":
55+
for j in range(self.num_teams):
56+
if i != j:
57+
prob += (pulp.lpSum(self.players_teams[k][i]*self.positions['PG'][k]*players_lineup[k] for k in range(self.num_players))
58+
<= (pulp.lpSum(self.players_teams[k][i]*self.positions['SG'][k]*players_lineup[k] for k in range(self.num_players))
59+
+ pulp.lpSum(self.players_teams[k][i]*self.positions['SF'][k]*players_lineup[k] for k in range(self.num_players))
60+
+ pulp.lpSum(self.players_teams[k][i]*self.positions['PF'][k]*players_lineup[k] for k in range(self.num_players))))
61+
prob += (pulp.lpSum(self.players_teams[k][j]*self.positions['PG'][k]*players_lineup[k] for k in range(self.num_players))
62+
<= (pulp.lpSum(self.players_teams[k][j]*self.positions['SG'][k]*players_lineup[k] for k in range(self.num_players))
63+
+ pulp.lpSum(self.players_teams[k][j]*self.positions['SF'][k]*players_lineup[k] for k in range(self.num_players))
64+
+ pulp.lpSum(self.players_teams[k][j]*self.positions['PF'][k]*players_lineup[k] for k in range(self.num_players))))
65+
elif self.stack == "PG-(SG-SF-PF)-(SG-SF-PF)+PG-(SG-SF-PF)-(SG-SF-PF)":
66+
for j in range(self.num_teams):
67+
if i != j:
68+
prob += (2*pulp.lpSum(self.players_teams[k][i]*self.positions['PG'][k]*players_lineup[k] for k in range(self.num_players))
69+
<= (pulp.lpSum(self.players_teams[k][i]*self.positions['SG'][k]*players_lineup[k] for k in range(self.num_players))
70+
+ pulp.lpSum(self.players_teams[k][i]*self.positions['SF'][k]*players_lineup[k] for k in range(self.num_players))
71+
+ pulp.lpSum(self.players_teams[k][i]*self.positions['PF'][k]*players_lineup[k] for k in range(self.num_players))))
72+
prob += (2*pulp.lpSum(self.players_teams[k][j]*self.positions['PG'][k]*players_lineup[k] for k in range(self.num_players))
73+
<= (pulp.lpSum(self.players_teams[k][j]*self.positions['SG'][k]*players_lineup[k] for k in range(self.num_players))
74+
+ pulp.lpSum(self.players_teams[k][j]*self.positions['SF'][k]*players_lineup[k] for k in range(self.num_players))
75+
+ pulp.lpSum(self.players_teams[k][j]*self.positions['PF'][k]*players_lineup[k] for k in range(self.num_players))))
76+
3677
prob += (pulp.lpSum(self.players_teams[k][i]*players_lineup[k] for k in range(self.num_players)) <= 4*used_team[i])
37-
# # ensures that the lineup contains less than X unique teams
78+
# ensures that the lineup contains less than X unique teams
3879
prob += (pulp.lpSum(used_team[i] for i in range(self.num_teams)) == 5)
3980

4081
# each new lineup can't have more than the overlap variable number of combinations of players in any previous lineups

main.py

+3
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
overlap = int(sys.argv[4]),
1414
player_limit = int(sys.argv[5]),
1515
teams_limit = int(sys.argv[6]),
16+
stack = sys.argv[7],
1617
solver = pulp.GLPK_CMD(msg=0),
1718
correlation_file = 'nfl/inputs/{}/correlation.csv'.format(sys.argv[2]),
1819
players_file = 'nfl/inputs/players.csv',
@@ -26,6 +27,7 @@
2627
overlap = int(sys.argv[4]),
2728
player_limit = int(sys.argv[5]),
2829
teams_limit = int(sys.argv[6]),
30+
stack = sys.argv[7],
2931
solver = pulp.GLPK_CMD(msg=0),
3032
correlation_file = 'nhl/inputs/{}/correlation.csv'.format(sys.argv[2]),
3133
players_file = 'nhl/inputs/players.csv',
@@ -39,6 +41,7 @@
3941
overlap = int(sys.argv[4]),
4042
player_limit = int(sys.argv[5]),
4143
teams_limit = int(sys.argv[6]),
44+
stack = sys.argv[7],
4245
solver = pulp.GLPK_CMD(msg=0),
4346
correlation_file = 'nba/inputs/{}/correlation.csv'.format(sys.argv[2]),
4447
players_file = 'nba/inputs/players.csv',

multiple.sh

+9-3
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
11
#!/bin/sh
2-
overlaps=(3 4 5)
3-
player_limits=(10 30 75)
2+
overlaps=(4 5 6)
3+
player_limits=(50 150)
44
team_limits=(3 4 5 6)
5+
stacks=("PG-SG" "PG-(SG-SF-PF)" "PG-(SG-SF-PF)-(SG-SF-PF)" "PG-SG+PG-SG" "PG-(SG-SF-PF)+PG-(SG-SF-PF)" "PG-(SG-SF-PF)-(SG-SF-PF)+PG-(SG-SF-PF)-(SG-SF-PF)")
56
for overlap in "${overlaps[@]}"
67
do
78
for player_limit in "${player_limits[@]}"
89
do
910
for team_limit in "${team_limits[@]}"
1011
do
11-
./run.sh $1 $2 $3 $overlap $player_limit $team_limit $4
12+
for stack in "${stacks[@]}"
13+
do
14+
if [ ! -e "$1"/outputs/"$2"/output_"$3"_overlap_"$overlap"_playerlimit_"$player_limit"_numteams_"$team_limit"_stack_"$stack"_proj.csv ]; then
15+
./run.sh $1 $2 $3 $overlap $player_limit $team_limit $stack
16+
fi
17+
done
1218
done
1319
done
1420
done

0 commit comments

Comments
 (0)