def test_teams_exposure_correctness_with_stacking(self): self.optimizer.add_stack(TeamStack(3, max_exposure_per_team={self.test_team: 0.5})) lineups = self.optimizer.optimize(2) first_lineup = next(lineups) second_lineup = next(lineups) self.assertEqual(len([p for p in first_lineup if p in self.high_fppg_players]), len(self.high_fppg_players)) self.assertNotEqual(len([p for p in second_lineup if p in self.high_fppg_players]), len(self.high_fppg_players))
def test_stacks_correctness(self): stacks = [4, 2] for stack in stacks: self.optimizer.add_stack(TeamStack(stack)) lineup = next(self.optimizer.optimize(n=1)) teams = Counter([player.team for player in lineup]) self.assertListEqual(stacks, [stack[1] for stack in Counter(teams).most_common(len(stacks))])
def test_max_hitters_from_one_team_with_stacking(self): self.optimizer.add_stack(TeamStack(6)) lineup = next(self.optimizer.optimize(1)) hou_players_positions = [ player.lineup_position for player in lineup if player.team == 'HOU'] self.assertEqual(len(hou_players_positions), 6) self.assertIn('P', hou_players_positions)
def test_stacks_with_spacing(self, spacing, expected): self.optimizer.add_stack(TeamStack(2, spacing=spacing)) lineup = next(self.optimizer.optimize(n=1)) spacings = [ player.roster_order for player in lineup if player in self.spacing_players] spacings.sort() self.assertEqual(spacings, expected)
def test_stacks_for_positions(self): position = 'PG' self.optimizer.add_stack(TeamStack(4, for_positions=[position])) lineup = next(self.optimizer.optimize(n=1)) all_position_players_teams = [ player.team for player in lineup if position in player.positions] self.assertEqual(len(set(all_position_players_teams)), 1)
def set_team_stacking(self, stacks: Optional[List[int]], for_positions: Optional[List[str]] = None): warnings.simplefilter('always', DeprecationWarning) warnings.warn( 'set_team_stacking method will be removed in 3.3, use add_stack instead', DeprecationWarning) if stacks: team_stacks = [ TeamStack(stack, for_positions=for_positions, max_exposure_per_team=self.teams_exposures) for stack in stacks ] for stack in team_stacks: self.add_stack(stack)
def test_stack_greater_than_max_from_one_team(self): with self.assertRaises(LineupOptimizerException): self.optimizer.add_stack(TeamStack(5))
def test_minimum_teams_with_stacking(self): self.optimizer.add_stack(TeamStack(5)) self.optimizer.add_stack(TeamStack(4)) with self.assertRaises(LineupOptimizerException): next(self.optimizer.optimize(1))
from pydfs_lineup_optimizer import Site, Sport, get_optimizer, CSVLineupExporter from pydfs_lineup_optimizer.stacks import TeamStack, PositionsStack, PlayersGroup, Stack LINES = 40 #WR_TIER_1 = {'Kahlil Lewis', 'Rashad Ross', 'Mekale McKay', 'Jeff Badet', 'Flynn Nagel'} optimizer = get_optimizer(Site.DRAFTKINGS, Sport.CANADIAN_FOOTBALL) optimizer.load_players_from_csv("DKSalaries.csv") #lineups = optimizer.load_lineups_from_csv("DKSalaries.csv") optimizer.add_stack(TeamStack(3)) #optimizer.add_stack(TeamStack(3, for_positions=['QB', 'WR'])) #optimizer.add_stack(PositionsStack(['QB', 'WR'])) #optimizer.force_positions_for_opposing_team(('QB', 'WR')) #optimizer.add_stack(PositionsStack(['QB', 'WR'])) optimizer.restrict_positions_for_same_team(('RB', 'RB')) optimizer.force_positions_for_opposing_team(('QB', 'WR')) #optimizer.force_positions_for_opposing_team(('QB', 'WR')) #optimizer.add_stack(TeamStack(2, for_positions=['QB', 'WR'], for_teams=['DAL', 'HOU', 'DC'])) optimizer.restrict_positions_for_opposing_team(['QB'], ['DST']) optimizer.set_deviation(0.02, 0.35) optimizer.set_max_repeating_players(5) for player in optimizer.players: if player.fppg < 1: optimizer.remove_player(player) elif 'WR' in player.positions: player.min_deviation = 0.25 player.max_deviation = 0.55 elif 'QB' in player.positions: player.min_deviation = 0.15
from pydfs_lineup_optimizer import Site, Sport, get_optimizer, CSVLineupExporter from pydfs_lineup_optimizer.stacks import TeamStack, PositionsStack LINES = 60 optimizer = get_optimizer(Site.DRAFTKINGS_CAPTAIN_MODE, Sport.LEAGUE_OF_LEGENDS) optimizer.load_players_from_csv("DKSalaries.csv") optimizer.set_deviation(0.01, 0.08) optimizer.add_stack(TeamStack(3)) optimizer.add_stack(TeamStack(4, for_positions=['TOP', 'JNG', 'MID', 'ADC', 'SUP', 'TEAM'])) optimizer.restrict_positions_for_opposing_team(['TOP'], ['JNG', 'MID', 'ADC', 'SUP', 'TEAM']) optimizer.restrict_positions_for_same_team(('CPT', 'TEAM')) optimizer.set_max_repeating_players(5) for player in optimizer.players: if player.fppg < 1: optimizer.remove_player(player) elif 'CPT' in player.positions: player.min_deviation = 0.25 player.max_deviation = 0.55 exporter = CSVLineupExporter(optimizer.optimize(LINES, randomness=True, generate_exposures=True)) exporter.export('result.csv') optimizer.player_exposures.write_exposures_csv(total_lineups=LINES)