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))
Exemple #2
0
 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)
Exemple #6
0
 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)
Exemple #7
0
 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))
Exemple #9
0
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
Exemple #10
0
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)