def test_lineup_building(self): def create_players(positions_list): players = [] for i, positions in enumerate(positions_list): players.append( Player(player_id=i, first_name=i, last_name=i, positions=positions.split('/'), team=str(i), salary=10, fppg=10) ) return players optimizer = get_optimizer(Site.DRAFTKINGS, Sport.BASKETBALL) optimizer._build_lineup(create_players(['PG', 'SG', 'SF', 'PF', 'C', 'SG', 'SF', 'SF'])) optimizer._build_lineup(create_players(['PG/SG', 'SG/SF', 'SF/PF', 'PF/C', 'C/PG', 'SG/SF', 'SF/PF', 'SF/PF'])) optimizer._build_lineup(create_players(['PG', 'PG', 'C', 'C', 'SG/SF', 'SF/PF', 'SF/PF', 'PG/SG'])) optimizer._build_lineup(create_players(['C', 'SG/SF', 'PG/SG', 'SG/SF', 'SG/SF', 'C', 'SF/PF', 'PG'])) optimizer._build_lineup(create_players(['SG', 'PF', 'C', 'C', 'PF', 'PG/SF', 'PG/SG', 'PG/SG'])) optimizer._build_lineup(create_players(['PG', 'PG/SG', 'PG/SG/SF', 'PG/SF/PF', 'PG/PF/C', 'PG', 'PG/SF/PF', 'PG/SG'])) with self.assertRaises(LineupOptimizerException): optimizer._build_lineup(create_players(['PG', 'SG', 'SF', 'PF', 'C', 'SG', 'C', 'C'])) optimizer = get_optimizer(Site.DRAFTKINGS, Sport.FOOTBALL) optimizer._build_lineup(create_players(['QB', 'WR', 'WR', 'WR', 'WR', 'RB', 'RB', 'TE', 'DST'])) with self.assertRaises(LineupOptimizerException): optimizer._build_lineup(create_players(['QB', 'WR', 'WR', 'WR', 'WR', 'WR', 'RB', 'RB', 'TE'])) optimizer = get_optimizer(Site.DRAFTKINGS, Sport.HOCKEY) optimizer._build_lineup(create_players(['LW', 'RW', 'LW', 'RW', 'C', 'C', 'D', 'D', 'G'])) with self.assertRaises(LineupOptimizerException): optimizer._build_lineup(create_players(['LW', 'RW', 'LW', 'RW', 'LW', 'C', 'D', 'D', 'G'])) optimizer = get_optimizer(Site.DRAFTKINGS, Sport.BASEBALL) optimizer._build_lineup(create_players(['P', 'P', 'C', '1B', '2B', '3B', 'SS', 'OF', 'OF', 'OF'])) with self.assertRaises(LineupOptimizerException): optimizer._build_lineup(create_players(['P', 'C', 'C', '1B', '2B', '3B', 'SS', 'OF', 'OF', 'OF'])) optimizer = get_optimizer(Site.FANTASY_DRAFT, Sport.BASKETBALL) optimizer._build_lineup(create_players(['PG', 'PG', 'PG', 'SF', 'SF', 'SF', 'SF', 'SF'])) with self.assertRaises(LineupOptimizerException): optimizer._build_lineup(create_players(['PG', 'PG', 'SF', 'SF', 'SF', 'SF', 'SF', 'SF']))
def test_lineup_building(self): optimizer = get_optimizer(Site.DRAFTKINGS, Sport.BASKETBALL) optimizer._build_lineup( create_players(['PG', 'SG', 'SF', 'PF', 'C', 'SG', 'SF', 'SF'])) optimizer._build_lineup( create_players([ 'PG/SG', 'SG/SF', 'SF/PF', 'PF/C', 'C/PG', 'SG/SF', 'SF/PF', 'SF/PF' ])) optimizer._build_lineup( create_players( ['PG', 'PG', 'C', 'C', 'SG/SF', 'SF/PF', 'SF/PF', 'PG/SG'])) optimizer._build_lineup( create_players( ['C', 'SG/SF', 'PG/SG', 'SG/SF', 'SG/SF', 'C', 'SF/PF', 'PG'])) optimizer._build_lineup( create_players( ['SG', 'PF', 'C', 'C', 'PF', 'PG/SF', 'PG/SG', 'PG/SG'])) optimizer._build_lineup( create_players([ 'PG', 'PG/SG', 'PG/SG/SF', 'PG/SF/PF', 'PG/PF/C', 'PG', 'PG/SF/PF', 'PG/SG' ])) with self.assertRaises(LineupOptimizerException): optimizer._build_lineup( create_players(['PG', 'SG', 'SF', 'PF', 'C', 'SG', 'C', 'C'])) optimizer = get_optimizer(Site.DRAFTKINGS, Sport.FOOTBALL) optimizer._build_lineup( create_players( ['QB', 'WR', 'WR', 'WR', 'WR', 'RB', 'RB', 'TE', 'DST'])) with self.assertRaises(LineupOptimizerException): optimizer._build_lineup( create_players( ['QB', 'WR', 'WR', 'WR', 'WR', 'WR', 'RB', 'RB', 'TE'])) optimizer = get_optimizer(Site.DRAFTKINGS, Sport.HOCKEY) optimizer._build_lineup( create_players(['LW', 'RW', 'LW', 'RW', 'C', 'C', 'D', 'D', 'G'])) with self.assertRaises(LineupOptimizerException): optimizer._build_lineup( create_players( ['LW', 'RW', 'LW', 'RW', 'LW', 'C', 'D', 'D', 'G'])) optimizer = get_optimizer(Site.DRAFTKINGS, Sport.BASEBALL) optimizer._build_lineup( create_players( ['SP', 'SP', 'C', '1B', '2B', '3B', 'SS', 'OF', 'OF', 'OF'])) with self.assertRaises(LineupOptimizerException): optimizer._build_lineup( create_players( ['P', 'C', 'C', '1B', '2B', '3B', 'SS', 'OF', 'OF', 'OF'])) optimizer = get_optimizer(Site.FANTASY_DRAFT, Sport.BASKETBALL) optimizer._build_lineup( create_players(['PG', 'PG', 'PG', 'SF', 'SF', 'SF', 'SF', 'SF'])) with self.assertRaises(LineupOptimizerException): optimizer._build_lineup( create_players( ['PG', 'PG', 'SF', 'SF', 'SF', 'SF', 'SF', 'SF']))
def LoadOptimizer(filename): global optimizer if (selected_sport.get() == 1): optimizer = get_optimizer(Site.DRAFTKINGS, Sport.FOOTBALL) elif (selected_sport.get() == 2): optimizer = get_optimizer(Site.DRAFTKINGS, Sport.HOCKEY) try: optimizer.load_players_from_csv(filename) except: sys.exit('Invalid csv file format')
def optimize_lineup(df, good_list, alright_list, meh_list): optimizer = get_optimizer(Site.FANDUEL, Sport.BASKETBALL) optimizer.load_players_from_csv("fanduel.csv") df['name'] = df.apply(lambda row: (str.split(row['name'], ' Jr.')[0]), axis=1) for player in optimizer.players: if player.full_name in df['name'].unique(): projected_score = df.loc[ (df['name'] == player.full_name) & (df['team'] == NBA_TEAMS.find_NBA_abrev(player.team))][ 'Projected Score'].tolist() if len(projected_score) > 0: player.fppg = projected_score[0] else: player.fppg = 0 # print(f"{player.full_name:}{projected_score}") else: player.fppg = 0 optimizer.set_min_salary_cap(60000) optimizer.set_max_repeating_players(2) optimizer.add_stack(TeamStack(2, for_teams=good_list)) optimizer.add_stack(TeamStack(2, for_teams=alright_list)) optimizer.add_stack(TeamStack(1, for_teams=meh_list)) # for lineup in optimizer.optimize(n=50): # print(lineup) # print(lineup.players) # list of players # print(lineup.fantasy_points_projection) # print(lineup.salary_costs) exporter = CSVLineupExporter(optimizer.optimize(n=50)) exporter.export('lineups.csv') print("Lineups optimized and exported!")
def setUp(self): self.small_salary_player = Player('1', 'p1', 'p1', ['PG'], 'team1', 1, 200) self.players = load_players() self.players.append(self.small_salary_player) self.lineup_optimizer = get_optimizer(Site.DRAFTKINGS, Sport.BASKETBALL) self.lineup_optimizer.load_players(self.players) self.min_salary_cap = self.lineup_optimizer.settings.budget
def setUp(self): first_game_info = GameInfo('HOU', 'BOS', datetime.now(), False) second_game_info = GameInfo('CHI', 'NY', datetime.now(), False) self.players = [ Player('1', '1', '1', ['SP', 'RP'], 'HOU', 3000, 15, game_info=first_game_info), Player('2', '2', '2', ['SP', 'RP'], 'BOS', 3000, 15, game_info=first_game_info), Player('3', '3', '3', ['C'], 'HOU', 3000, 15, game_info=first_game_info), Player('4', '4', '4', ['1B'], 'BOS', 3000, 15, game_info=first_game_info), Player('5', '5', '5', ['2B'], 'HOU', 3000, 15, game_info=first_game_info), Player('6', '6', '6', ['3B'], 'BOS', 3000, 15, game_info=first_game_info), Player('7', '7', '7', ['SS'], 'HOU', 3000, 15, game_info=first_game_info), Player('8', '8', '8', ['OF'], 'BOS', 3000, 15, game_info=first_game_info), Player('9', '9', '9', ['OF'], 'HOU', 3000, 15, game_info=first_game_info), Player('10', '10', '10', ['OF'], 'BOS', 3000, 15, game_info=first_game_info), Player('11', '11', '11', ['SP', 'RP'], 'CHI', 3000, 5, game_info=second_game_info), Player('12', '12', '12', ['SP', 'RP'], 'NY', 3000, 5, game_info=second_game_info), ] self.optimizer = get_optimizer(Site.DRAFTKINGS, Sport.BASEBALL) self.optimizer.load_players(self.players)
def setUp(self): self.players = [ Player('1', 'Golf Player 1', '', [ 'G'], '', 5000, 200, projected_ownership=0.95), Player('2', 'Golf Player 2', '', [ 'G'], '', 5000, 20, projected_ownership=0.7), Player('3', 'Golf Player 3', '', [ 'G'], '', 5000, 20, projected_ownership=0.7), Player('4', 'Golf Player 4', '', [ 'G'], '', 5000, 20, projected_ownership=0.7), Player('5', 'Golf Player 5', '', [ 'G'], '', 5000, 5, projected_ownership=0.5), Player('6', 'Golf Player 6', '', [ 'G'], '', 5000, 5, projected_ownership=0.5), Player('7', 'Golf Player 7', '', [ 'G'], '', 5000, 5, projected_ownership=0.5), Player('8', 'Golf Player 8', '', [ 'G'], '', 5000, 5, projected_ownership=0.5), Player('9', 'Golf Player 9', '', [ 'G'], '', 5000, 5, projected_ownership=0.5), Player('10', 'Golf Player 10', '', [ 'G'], '', 5000, 5, projected_ownership=0.5), ] self.optimizer = get_optimizer(Site.DRAFTKINGS, Sport.GOLF) self.optimizer.load_players(self.players)
def setUp(self): self.players = load_players() self.player_with_max_exposure = [ Player('1', 'p1', 'p1', ['PG', 'SG'], 'DEN', 10, 200, max_exposure=0.3), Player('2', 'p2', 'p2', ['PF', 'SF'], 'DEN', 10, 200), Player('3', 'p3', 'p3', ['C'], 'DEN', 100, 2, max_exposure=0.35), Player('4', 'p4', 'p4', ['PG'], 'DEN', 100, 2), Player('5', 'p5', 'p5', ['PF'], 'DEN', 100, 2, max_exposure=0), Player('6', 'p6', 'p6', ['SF'], 'DEN', 1, 2001, max_exposure=0), ] self.players_with_min_exposure = [ Player('7', 'p7', 'p7', ['PG', 'SG'], 'SAS', 1000, 0, min_exposure=0.3), Player('8', 'p8', 'p8', ['C'], 'SAS', 1000, 0, min_exposure=0.35), Player('9', 'p9', 'p9', ['C'], 'SAS', 1000, 0, min_exposure=1), ] self.lineup_optimizer = get_optimizer(Site.DRAFTKINGS, Sport.BASKETBALL) self.lineup_optimizer.load_players(self.players)
def setUp(self): self.players = load_players() self.optimizer = get_optimizer(Site.DRAFTKINGS, Sport.BASKETBALL) self.optimizer.settings.max_from_one_team = 4 self.test_team = 'TEST' self.spacing_players = [ Player('1', '1', '1', ['PG'], self.test_team, 100, 40, roster_order=1), Player('2', '2', '2', ['SG'], self.test_team, 100, 30, roster_order=2), Player('3', '3', '3', ['SF'], self.test_team, 100, 50, roster_order=3), ] self.optimizer.load_players(self.players + self.spacing_players)
def test_positions_from_same_team(self): optimizer = get_optimizer(Site.YAHOO, Sport.BASKETBALL) players = [ Player(1, 'p1', 'p1', ['PG'], 'team1', 10, 200), Player(2, 'p2', 'p2', ['SG'], 'team2', 10, 200), Player(3, 'p3', 'p3', ['SF'], 'team3', 10, 200), Player(4, 'p4', 'p4', ['PF'], 'team4', 10, 200), Player(5, 'p5', 'p5', ['C'], 'team5', 10, 200), Player(6, 'p6', 'p6', ['PG', 'SG'], 'team6', 10, 200), Player(7, 'p7', 'p7', ['SF', 'PF'], 'team7', 10, 200), Player(8, 'p8', 'p8', ['PG', 'SG', 'SF'], 'team8', 10, 200), Player(9, 'p9', 'p9', ['C'], 'team1', 10, 5), Player(10, 'p10', 'p10', ['SF'], 'team1', 10, 2), Player(11, 'p11', 'p11', ['PF', 'C'], 'team1', 10, 2), ] optimizer.load_players(players) lineup = next(optimizer.optimize(1)) self.assertEqual(len(set([p.team for p in lineup.lineup])), 8) optimizer.set_positions_for_same_team(['PG', 'C']) lineup = next(optimizer.optimize(1)) self.assertEqual(len(set([p.team for p in lineup.lineup])), 7) self.assertTrue(all(players[i] in lineup.lineup for i in [0, 8])) optimizer.set_positions_for_same_team(['PG', 'SF', 'C']) lineup = next(optimizer.optimize(1)) self.assertEqual(len(set([p.team for p in lineup.lineup])), 6) self.assertTrue(all(players[i] in lineup.lineup for i in [0, 8, 9])) optimizer.set_positions_for_same_team(['PG', 'SF', 'C', 'C']) lineup = next(optimizer.optimize(1)) self.assertEqual(len(set([p.team for p in lineup.lineup])), 5) self.assertTrue(all(players[i] in lineup.lineup for i in [0, 8, 9, 10])) # Test reset optimizer.set_positions_for_same_team(None) lineup = next(optimizer.optimize(1)) self.assertEqual(len(set([p.team for p in lineup.lineup])), 8)
def setUp(self): self.future_game_info = GameInfo( home_team='H', away_team='A', game_started=False, starts_at=datetime.now(timezone('EST')) + timedelta(days=1)) self.finished_game_info = GameInfo( home_team='H', away_team='A', game_started=False, starts_at=datetime.now(timezone('EST')) - timedelta(days=1)) self.lineup_optimizer = get_optimizer(Site.DRAFTKINGS, Sport.BASKETBALL) positions = ['PG', 'SG', 'SF', 'PF', 'C', 'PG/SG', 'SF/PF', 'C'] self.active_players = create_players(positions, game_info=self.future_game_info, salary=5000, fppg=20) self.inactive_players = create_players( positions, game_info=self.finished_game_info, salary=4500, fppg=10) self.lineup_optimizer.load_players(self.active_players + self.inactive_players) self.lineup = Lineup([ LineupPlayer(self.active_players[0], 'PG'), LineupPlayer(self.inactive_players[1], 'SG'), LineupPlayer(self.active_players[2], 'SF'), LineupPlayer(self.inactive_players[3], 'PF'), LineupPlayer(self.active_players[4], 'C'), LineupPlayer(self.inactive_players[5], 'G'), LineupPlayer(self.active_players[6], 'F'), LineupPlayer(self.inactive_players[7], 'UTIL'), ])
def setUp(self): self.players = load_players() self.starters = [ Player('1', '1', '1', ['PG', 'SG'], '1', 1000, 0, is_confirmed_starter=True), Player('2', '2', '2', ['SF', 'PF'], '2', 1000, 0, is_confirmed_starter=True), ] self.lineup_optimizer = get_optimizer(Site.DRAFTKINGS, Sport.BASKETBALL) self.lineup_optimizer.player_pool.load_players(self.players + self.starters)
def setUp(self): self.max_from_one_team = 1 self.test_team = 'TEST' self.players = load_players() self.effective_players = create_players(['PG/SG', 'SF/PF', 'C'], salary=10, fppg=200, team=self.test_team) self.lineup_optimizer = get_optimizer(Site.DRAFTKINGS, Sport.BASKETBALL) self.lineup_optimizer.settings.max_from_one_team = self.max_from_one_team self.lineup_optimizer.load_players(self.players + self.effective_players)
def test_unique_player_rule(self): optimizer = get_optimizer(Site.DRAFTKINGS, Sport.GOLF) players = create_players(['G'] * 10) high_fppg_player = Player('1', 'High FPPG', 'Player', ['G'], '', 50, 200) players.extend([high_fppg_player] * 2) optimizer.load_players(players) lineup = next(optimizer.optimize(1)) self.assertEqual(len([p for p in lineup if p == high_fppg_player]), 1)
def setUp(self): self.players = load_players() self.high_fppg_players = create_players( ['PG', 'SG', 'SF', 'PF', 'C', 'PG', 'SF'], fppg=1000) self.lineup_optimizer = get_optimizer(Site.DRAFTKINGS, Sport.BASKETBALL) self.lineup_optimizer.load_players(self.players + self.high_fppg_players)
def test_exact_number_of_players_for_position(self): optimizer = get_optimizer(Site.DRAFTKINGS, Sport.BASEBALL) positions = ['OF', 'OF', '2B', '3B', 'SP', 'OF/SS', 'SP', '1B/OF', 'C', 'RP'] optimizer.player_pool.load_players(create_players(positions)) with self.assertRaises(GenerateLineupException): next(optimizer.optimize(1)) positions.append('1B') optimizer.player_pool.load_players(create_players(positions)) next(optimizer.optimize(1))
def test_projected_ownership_constraint_for_user_without_ownership(self): optimizer = get_optimizer(Site.DRAFTKINGS, Sport.GOLF) players = deepcopy(self.players) for player in players[1:]: player.projected_ownership = None optimizer.load_players(players) optimizer.set_projected_ownership(max_projected_ownership=0.9) lineup = next(optimizer.optimize(n=1)) self.assertTrue(self.players[0] not in lineup.players)
def dk_lineup(request): import requests # check if most recent lineups were already created. from pydfs_lineup_optimizer import get_optimizer, Site, Sport, CSVLineupExporter project = os.environ["PROJECT_ID"] bucket = os.environ["BUCKET"] dataset_base = os.environ["DATASET_BASE"] dataset_dfs = os.environ["DATASET_DFS"] today = (datetime.now() - timedelta(hours=4)).strftime('%Y-%m-%d') request_json = request.get_json(silent=True) starting_lineups = "https://us-central1-{}.cloudfunctions.net/starting_lineups" r = requests.post(starting_lineups.format(project)) if request_json and "n_lineups" in request_json: n_lineups = int(request_json.get("n_lineups")) if n_lineups > 100: n_lineups = 100 else: n_lineups = 100 df = get_draftkings_predictions(project=project, dataset_base=dataset_base, dataset_dfs=dataset_dfs, dt=today.replace("-", "")) df.to_csv("/tmp/mlb_dk.csv", index=False) optimizer = get_optimizer(Site.DRAFTKINGS, Sport.BASEBALL) optimizer.load_players_from_csv("/tmp/mlb_dk.csv") exporter = CSVLineupExporter(optimizer.optimize(n_lineups)) exporter.export("/tmp/lineups.csv") # lineups = pd.DataFrame() # cols = ["pos", "first", "last", "position", "team", "opp", "fppg", "salary"] # i=1 # for lineup in optimizer.optimize(n=n_lineups): # lineup_list = lineup.printer.print_lineup(lineup).split("\n")[0:10] # lineup_df = pd.concat([pd.DataFrame(dict(zip(cols,re.split("\s{1,}",x.strip())[1:9])),index=[0]) # for x in lineup_list], axis=0, ignore_index=True) # lineup_df["lineup_number"] = i # i+=1 # lineups = pd.concat([lineups, lineup_df], ignore_index=True) # # # lineups.columns = ["pos", "first", "last", "position", "team", "opp", "projection", "salary", "lineup_number"] # lineups.to_csv("/tmp/lineups.csv", index=False) upload_blob(bucket_name=bucket, source_file_name="/tmp/lineups.csv", destination_blob_name="lineups/daily_dk_lineups.csv") upload_blob(bucket_name=bucket, source_file_name="/tmp/lineups.csv", destination_blob_name="lineups/mlb/dk_lineups_{}.csv".format( today.replace("-", ""))) lineup_link = "https://storage.cloud.google.com/{bucket}/lineups/daily_dk_lineups.csv" return lineup_link.format(bucket=bucket, dt=today.replace("-", ""))
def setUp(self): self.players = load_players() self.players_with_min_exposure = [ Player('1', '1', '1', ['PG', 'SG'], '1', 1000, 0, min_exposure=0.3), Player('2', '2', '2', ['SF', 'PF'], '2', 1000, 0, min_exposure=0.35), Player('3', '3', '3', ['C'], '3', 1000, 0, min_exposure=0.95), Player('4', '4', '4', ['C'], '4', 1000, 0, min_exposure=0.93), ] self.lineup_optimizer = get_optimizer(Site.DRAFTKINGS, Sport.BASKETBALL) self.lineup_optimizer.player_pool.load_players(self.players + self.players_with_min_exposure)
def setUp(self): self.players = load_players() self.test_team = 'TEST' self.high_fppg_players = [ Player('1', '1', '1', ['PG'], self.test_team, 3000, 100), Player('2', '2', '2', ['SG'], self.test_team, 3000, 100), Player('3', '3', '3', ['SF'], self.test_team, 3000, 100), ] self.high_fppg_players_positions = ['PG', 'SG', 'SF'] self.optimizer = get_optimizer(Site.DRAFTKINGS, Sport.BASKETBALL) self.optimizer.load_players(self.players + self.high_fppg_players)
def process(self): data = self._import_data("AFLDFSUniverses.csv") lineup_list = list() for i in [100, 800, 1500, 2200, 2900, 3600, 4300, 5000, 5700, 6400, 7100, 7800, 8500, 9200, 9900]: print("Processing lineup " + str(i)) optimizer = get_optimizer(Site.DRAFTSTARS, Sport.AFL) players = self._create_player_list(data, i) optimizer.load_players(players) lineup = optimizer.optimize(n=1) lineup_list.append(lineup) return lineup_list
def setUp(self): self.players = [ Player('1', '1', '1', ['T1'], 'HOU', 0, 30), Player('2', '2', '2', ['T1'], 'BOS', 0, 30), Player('3', '3', '3', ['T2'], 'BOS', 0, 30), Player('4', '4', '4', ['T2'], 'HOU', 0, 30), Player('5', '5', '5', ['T3'], 'HOU', 0, 30), Player('6', '6', '6', ['T3'], 'HOU', 0, 30), ] self.optimizer = get_optimizer(Site.DRAFTKINGS_TIERS, Sport.BASEBALL) self.optimizer.player_pool.load_players(self.players)
def process(self): data = self._import_data("UNIVERSES.csv") lineup_list = list() for i in range(201): print("Processing lineup " + str(i)) optimizer = get_optimizer(Site.DRAFTSTARS, Sport.BASKETBALL) players = self._create_player_list(data, i) optimizer.load_players(players) lineup = optimizer.optimize(n=1) lineup_list.append(lineup) return lineup_list
def test_with_injured_optimize(self): optimizer = get_optimizer(Site.DRAFTKINGS, Sport.BASKETBALL) cool_player = Player(1, 'P1', 'P1', ['PG'], 'team1', 1, 200) optimizer.load_players(self.players) optimizer.extend_players([cool_player]) lineup = next(optimizer.optimize(1)) self.assertIn(cool_player, lineup) cool_player.is_injured = True lineup = next(optimizer.optimize(1)) self.assertNotIn(cool_player, lineup) lineup = next(optimizer.optimize(1, with_injured=True)) self.assertIn(cool_player, lineup)
def setUp(self): self.players = load_players() self.first_team = 'TEST 1' self.second_team = 'TEST 2' self.high_fppg_players = [ Player('1', '1', '1', ['PG'], self.first_team, 3000, 100), Player('2', '2', '2', ['SG'], self.first_team, 3000, 100), Player('3', '3', '3', ['SF'], self.second_team, 3000, 100), Player('3', '3', '3', ['PF'], self.second_team, 3000, 100), ] self.optimizer = get_optimizer(Site.DRAFTKINGS, Sport.BASKETBALL) self.optimizer.load_players(self.players + self.high_fppg_players)
def setUp(self): self.players = load_players() self.group = [ Player('1', '1', '1', ['PG'], '1', 3000, 1), Player('2', '2', '2', ['SG'], '2', 3000, 1), ] self.high_fppg_group = [ Player('3', '3', '3', ['SF'], '3', 30, 100), Player('4', '4', '4', ['PF'], '4', 30, 100), ] self.optimizer = get_optimizer(Site.DRAFTKINGS, Sport.BASKETBALL) self.optimizer.load_players(self.players + self.group + self.high_fppg_group)
def test_lineup_with_players_from_same_positions(self): optimizer = get_optimizer(Site.DRAFTKINGS, Sport.BASKETBALL) optimizer.load_players( create_players(['PG', 'SG', 'SF', 'PF', 'C', 'PG', 'SF', 'PF'])) optimizer.extend_players([ Player(1, 'p1', 'p1', ['C'], 'DEN', 1000, 2), Player(2, 'p2', 'p2', ['C'], 'DEN', 1000, 2), ]) optimizer.set_players_with_same_position({'C': 1}) lineup = next(optimizer.optimize(1)) self.assertTrue( len(list(filter(lambda x: 'C' in x.positions, lineup.lineup))) >= 2 )
def setUp(self): self.players = load_players() self.first_team = 'TEST 1' self.second_team = 'TEST 2' self.game_info = GameInfo(self.first_team, self.second_team, datetime.now(), False) self.extra_players = [ Player('1', '1', '1', ['PG'], self.first_team, 3000, 100, game_info=self.game_info), Player('2', '2', '2', ['SG'], self.first_team, 3000, 100, game_info=self.game_info), Player('3', '3', '3', ['SF'], self.second_team, 3000, 1, game_info=self.game_info), Player('4', '4', '4', ['PF'], self.second_team, 3000, 1, game_info=self.game_info), ] self.optimizer = get_optimizer(Site.DRAFTKINGS, Sport.BASKETBALL) self.optimizer.load_players(self.players + self.extra_players)
def setUpClass(cls): optimizer = get_optimizer(Site.YAHOO, Sport.BASKETBALL) cls.players = [ Player('1', 'First Name 1', 'Last Name 1', ['PG'], 'Team1', 20, 20), Player('2', 'First Name 2', 'Last Name 2', ['SG'], 'Team2', 20, 20), Player('3', 'First Name 3', 'Last Name 3', ['SF'], 'Team3', 20, 20), Player('4', 'First Name 4', 'Last Name 4', ['PF'], 'Team4', 20, 20), Player('5', 'First Name 5', 'Last Name 5', ['C'], 'Team5', 20, 20), Player('6', 'First Name 6', 'Last Name 6', ['PG', 'SG'], 'Team6', 20, 20), Player('7', 'First Name 7', 'Last Name 7', ['SF', 'PF'], 'Team7', 20, 20), Player('8', 'First Name 8', 'Last Name 8', ['PG', 'SG', 'SF'], 'Team8', 20, 20), ] optimizer.load_players(cls.players) cls.lineups = list(optimizer.optimize(1))
def optimize_by_date( optimization_input='baseball_optimization_actual_performance.csv'): # Inputs: # 1. location of the .CSV to be optimized # Outputs: # 1. For now this function prints the result. May be able to enhance this later on optimizer = get_optimizer(Site.FANDUEL, Sport.BASEBALL) optimizer.load_players_from_csv(optimization_input) lineup_generator = optimizer.optimize(20) for lineup in lineup_generator: print(lineup)