pydfs-lineup-optimizer icon indicating copy to clipboard operation
pydfs-lineup-optimizer copied to clipboard

Position Stack opposing team (either position)

Open wizardous23 opened this issue 3 years ago • 25 comments

I can force a stack for a player on an opposing team for my QB as follows:

optimizer.force_positions_for_opposing_team(('QB', 'WR'))

But how can I say that I want the opposing position to be EITHER a WR or TE

Ideally I'm looking for something like this:

optimizer.force_positions_for_opposing_team(('QB', ['WR', 'TE']))

wizardous23 avatar Sep 19 '22 02:09 wizardous23

optimizer.add_stack(PositionsStack(['QB', ('WR', 'TE', 'DST')])) I think this is what you are looking for. It will stack a QB with any of the 3 positions...WR,TE, or DST

chrisbach1 avatar Sep 20 '22 15:09 chrisbach1

optimizer.add_stack(PositionsStack(['QB', ('WR', 'TE', 'DST')])) I think this is what you are looking for. It will stack a QB with any of the 3 positions...WR,TE, or DST

i think hes wanting a wr or te from the OPPOSING team, not the qbs team.

lightninglarry avatar Sep 20 '22 15:09 lightninglarry

I see. Not sure why you would stack a QB with his opposing teams pass receivers. Seems counter productive. Maybe the shoot out between MIA and BAL would have been good for that.

I put it in my optimizer twice and it worked. Sometimes it was a TE and sometimes it was a WR

optimizer.force_positions_for_opposing_team(('QB', 'WR')) optimizer.force_positions_for_opposing_team(('QB', 'TE'))

chrisbach1 avatar Sep 20 '22 15:09 chrisbach1

getting a "bringback" is good lineup building philosophy. Roughly a 1/3 of the time something like qb + wr + opp wr or opp Te, or qb + te + opp wr + opp te is in the optimal lineup.

With your example does it put only 1 opposing wr or Te with a QB?

lightninglarry avatar Sep 20 '22 15:09 lightninglarry

That's good to know, maybe incorporate that now! I added both lines and ran 150 lineups. Sometimes it was a TE and sometimes it was a WR. Sometimes both.

Note I had a max_exposure setting on all lineups to 0.25

chrisbach1 avatar Sep 20 '22 16:09 chrisbach1

@chrisbach1 @lightninglarry

optimizer.force_positions_for_opposing_team(('QB', 'WR')) optimizer.force_positions_for_opposing_team(('QB', 'TE'))

That doesn't seem to work. I'm trying to figure out something similar as well, and tried the above recommended but it still seems to stick with 1 vs either/or. Breaking my head over this!

tlabropoulos avatar Sep 26 '22 11:09 tlabropoulos

If you change your TE's projection to something higher, will it work? It's still going to optimize the lineup, so if your wide receivers projection is a lot higher, it will probably include him vs a TE

chrisbach1 avatar Sep 26 '22 19:09 chrisbach1

I am having the same issue. The optimizer will select whichever statement you use last. I will follow this thread incase this is resolved.

PochynokB avatar Oct 13 '22 17:10 PochynokB

This code allows you to have a bringback into your lineups, as this was something I have been trying to figure out as well and finally did:

bringback_options = [('QB', 'RB'), ('QB', 'WR'), ('QB', 'TE')] selected_bringback = random.choice(bringback_options)

optimizer.add_stack(PositionsStack(['QB', 'WR', ('WR', 'TE')], stack_teams)) optimizer.force_positions_for_opposing_team(selected_bringback)

The stack is a QB with a WR and a WR or TE from one of my stack teams. Then force the positions from the opposing to be the random selection of RB, WR, or TE in the bringback options. This has worked for me to get a double stack and bringback in each lineup.

cdioriodfs avatar Jun 06 '23 01:06 cdioriodfs

@cdioriodfs where is 'stack_teams' coming from? its saying not defined

chrisbach1 avatar Nov 06 '23 20:11 chrisbach1

from pydfs_lineup_optimizer.stacks import TeamStack, PositionsStack, PlayersGroup, Stack, GameStack

Denwen12 avatar Nov 06 '23 20:11 Denwen12

stack_teams is not a function is "Stacks.py"

chrisbach1 avatar Nov 06 '23 20:11 chrisbach1

@chrisbach1 stack_teams is a just a variable I created that stores the teams that I want to stack. Would looks something like this:

stack_teams = [“PHI”, “KC”, “JAX”, “LAC”]

This was just so I didn’t get stacks/qbs in my lineups that I didn’t want to stack that week.

cdioriodfs avatar Nov 06 '23 20:11 cdioriodfs

Try stack_teams = ['PHI', 'KC', 'JAX', 'LAC']

On Mon, Nov 6, 2023, 3:49 PM cdioriodfs @.***> wrote:

@chrisbach1 https://github.com/chrisbach1 stack_teams is a just a variable I created that stores the teams that I want to stack. Would looks something like this:

stack_teams = [“PHI”, “KC”, “JAX”, “LAC”]

This was just so I didn’t get stacks/qbs in my lineups that I didn’t want to stack that week.

— Reply to this email directly, view it on GitHub https://github.com/DimaKudosh/pydfs-lineup-optimizer/issues/378#issuecomment-1796411064, or unsubscribe https://github.com/notifications/unsubscribe-auth/ANBWO7V56YKBF5P5GVHWRGLYDFENFAVCNFSM6AAAAAAQPWWAVCVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTOOJWGQYTCMBWGQ . You are receiving this because you commented.Message ID: @.***>

Denwen12 avatar Nov 06 '23 20:11 Denwen12

The code I posted works to get a double stack and a bring back, but the same position is used on the bringback for each qb, For example, every Jalen Hurts lineup would have a double stack and a WR bringback for every one, no RB or TE. I cannot get the code to choose between RB, WR, or TE for each lineup, bit it chooses for each QB if that makes sense.

cdioriodfs avatar Nov 06 '23 20:11 cdioriodfs

Can i see all the code

On Mon, Nov 6, 2023, 3:54 PM cdioriodfs @.***> wrote:

The code I posted works to get a double stack and a bring back, but the same position is used on the bringback for each qb, For example, every Jalen Hurts lineup would have a double stack and a WR bringback for every one, no RB or TE. I cannot get the code to choose between RB, WR, or TE for each lineup, bit it chooses for each QB if that makes sense.

— Reply to this email directly, view it on GitHub https://github.com/DimaKudosh/pydfs-lineup-optimizer/issues/378#issuecomment-1796417301, or unsubscribe https://github.com/notifications/unsubscribe-auth/ANBWO7S5EMH4HSXRCTBHWFDYDFE6XAVCNFSM6AAAAAAQPWWAVCVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTOOJWGQYTOMZQGE . You are receiving this because you commented.Message ID: @.***>

Denwen12 avatar Nov 06 '23 20:11 Denwen12

Doesnt work for me. Only tight ends work

chrisbach1 avatar Nov 06 '23 22:11 chrisbach1

Use randomness

On Mon, Nov 6, 2023, 5:12 PM Chris Bachmann @.***> wrote:

Doesnt work for me. Only tight ends work

— Reply to this email directly, view it on GitHub https://github.com/DimaKudosh/pydfs-lineup-optimizer/issues/378#issuecomment-1796843543, or unsubscribe https://github.com/notifications/unsubscribe-auth/ANBWO7UYKUJKVRXZFION3ITYDFODDAVCNFSM6AAAAAAQPWWAVCVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTOOJWHA2DGNJUGM . You are receiving this because you commented.Message ID: @.***>

Denwen12 avatar Nov 06 '23 22:11 Denwen12

I did

chrisbach1 avatar Nov 06 '23 22:11 chrisbach1

Its fine. Im not too worried about it. Thanks for the help!

chrisbach1 avatar Nov 06 '23 22:11 chrisbach1

Post your code

On Mon, Nov 6, 2023, 5:17 PM Chris Bachmann @.***> wrote:

I did

— Reply to this email directly, view it on GitHub https://github.com/DimaKudosh/pydfs-lineup-optimizer/issues/378#issuecomment-1796855945, or unsubscribe https://github.com/notifications/unsubscribe-auth/ANBWO7UUBW33HK6HCUFJ5MTYDFOWXAVCNFSM6AAAAAAQPWWAVCVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTOOJWHA2TKOJUGU . You are receiving this because you commented.Message ID: @.***>

Denwen12 avatar Nov 06 '23 22:11 Denwen12

@Denwen12

import pydfs_lineup_optimizer from pydfs_lineup_optimizer import get_optimizer, Site, Sport, LineupOptimizer from pydfs_lineup_optimizer.stacks import GameStack, Stack, NestedPlayersGroup, OptimizerStack, TeamStack, PositionsStack from pydfs_lineup_optimizer import PlayersGroup, PlayerFilter, Player from pydfs_lineup_optimizer.utils import get_players_grouped_by_teams import random

Initialize the optimizer and load players from the CSV file

optimizer = get_optimizer(Site.DRAFTKINGS, Sport.FOOTBALL) optimizer.load_players_from_csv("#####")

optimizer.set_min_salary_cap(49700)

stack_teams = ['PHI', 'LAC', 'CIN', 'JAX', 'BAL']

qb_filter = PlayerFilter(positions=['QB'], from_value=15, filter_by='fppg') rb_filter = PlayerFilter(positions=['RB'], from_value=6, filter_by='fppg') wr_filter = PlayerFilter(positions=['WR'], from_value=6, filter_by='fppg') te_filter = PlayerFilter(positions=['TE'], from_value=4, filter_by='fppg') dst_filter = PlayerFilter(positions=['DST'], from_value=2, filter_by='fppg')

optimizer.player_pool.add_filters(qb_filter, rb_filter, wr_filter, te_filter, dst_filter)

qbs = optimizer.player_pool.get_players(qb_filter) rbs = optimizer.player_pool.get_players(rb_filter) wrs = optimizer.player_pool.get_players(wr_filter) tes = optimizer.player_pool.get_players(te_filter) dsts = optimizer.player_pool.get_players(dst_filter)

players_by_team = get_players_grouped_by_teams(optimizer.player_pool.filtered_players)

dataGames = [a for a in optimizer.player_pool.games]

games = [f'{a.home_team}, {a.away_team}, game {list(optimizer.player_pool.games).index(a)}' for a in optimizer.player_pool.games]

qb_exposure = 0.20 rb_exposure = 0.35 wr_exposure = 0.60 te_exposure = 0.25 dst_exposure = 0.40

for qb in qbs: qb.max_exposure = qb_exposure

for rb in rbs: rb.max_exposure = rb_exposure

for wr in wrs: wr.max_exposure = wr_exposure

for te in tes: te.max_exposure = te_exposure

for dst in dsts: dst.max_exposure = dst_exposure

all_teams = list({player.team for player in optimizer.player_pool.filtered_players})

optimizer.restrict_positions_for_same_team(('RB', 'RB'),('QB', 'DST'),('QB', 'RB'), ('WR', 'RB')) optimizer.restrict_positions_for_opposing_team(('QB','RB','WR','TE'), 'DST')

optimizer.set_max_repeating_players(3)

te_group = PlayersGroup(tes, max_from_group=1) rb_group = PlayersGroup(rbs, max_from_group=2) optimizer.add_players_group(te_group) optimizer.add_players_group(rb_group)

bringback_options = [('QB', 'WR'), ('QB', 'RB'), ('QB', 'TE')] selected_bringback = random.choice(bringback_options)

optimizer.add_stack(PositionsStack(['QB', 'WR', ('WR', 'TE')], for_teams=stack_teams)) optimizer.force_positions_for_opposing_team(selected_bringback) optimizer.force_positions_for_opposing_team optimizer.add_stack(GameStack(2, min_from_team=1))

Generate lineups

lineups = list(optimizer.optimize(n=20))

Export lineups to CSV file

optimizer.export("#####")

cdioriodfs avatar Nov 06 '23 22:11 cdioriodfs