One Scratched Winger Was in 29% of My NHL DFS Lineups

On October 16 a single DFS late scratch sat in 29.1% of the NHL lineups I had built for a two-game slate. Egor Chinakhov, a $4,100 Penguins winger, was ruled out about 25 minutes before puck drop, and my Frozen Tools set had him in 134 of its 461 lineups. In the real DraftKings contests, 1.6% of entries had him. I have since rebuilt the night without him, checked four other nights, and added a “Check late news” button to my NHL lineup optimizer and the other three sports. The surprise is how little removing him changed.

Continue reading “One Scratched Winger Was in 29% of My NHL DFS Lineups”

Vegas Lines and Injury Reports in My Lineup Optimizers

My free lineup optimizers for MLB, NFL and NHL now pull two things you used to have to look up in another tab: the league’s injury report and the Vegas lines. The part I care about most is how the Vegas lines get used, because the first version of that rule quietly did the opposite of what I built it for. Implied team totals are the most useful number on a DFS slate that isn’t in the salary file, so this is the post about how the tool gets them, what it does with them, and the one rule I had to throw away.

Strip chart: QB game totals under three rule settings; the first Vegas rule put 0 of 10 stacks in 50+ games, the shipped rule put 9 of 10 in 47+ games
Ten NFL lineups per row, built on a FanDuel slate with test Vegas lines. My first rule made the solver dodge high-total quarterbacks; the one I shipped does the opposite.
Continue reading “Vegas Lines and Injury Reports in My Lineup Optimizers”

The MLB Lineup Optimizer Now Pulls Live Batting Orders

The MLB lineup optimizer just got an upgrade that matters more than any of the lineup rules it already enforced: it now knows who’s actually playing. Confirmed batting orders and probable starting pitchers load automatically from Major League Baseball’s own schedule data, and two new lineup filters use that information to keep bench bats and non-starting arms out of your build by default.

Until now, the tool would happily stack a hitter who wasn’t in that day’s starting nine, or a pitcher who was penciled in for Thursday, not today. That’s on the player to catch by cross-checking DraftKings against a lineup site. Not anymore — the optimizer pulls the day’s confirmed lineups itself and marks every player accordingly, the same way the NHL version of this tool already does with starting goalies.

Bar chart: 201 pitchers in the DK player pool versus 12 actually starting that day
On a real 6-game DK slate, 201 pitchers showed up in the player pool — only 12 were actually starting.
Continue reading “The MLB Lineup Optimizer Now Pulls Live Batting Orders”

CBC vs CP-SAT: My Lineup Optimizer Got 8x Faster

Two months ago I wrote about CBC vs HiGHS on my staff scheduler, where swapping solvers turned a model that took minutes into one that took seconds. So when my daily fantasy lineup optimizer started feeling slow, I reached for the same fix — and HiGHS came back three times slower. This is the story of CBC vs CP-SAT on that model, why my own previous result did not transfer, and the failure mode I found on the way that was worse than being slow.

Continue reading “CBC vs CP-SAT: My Lineup Optimizer Got 8x Faster”

The Bug That Ate a Day: It Only Hung in Production

This is the last post in my series on rebuilding my daily fantasy lineup optimizer (it all starts here). The math was the easy part. This post is about the day I lost to a bug that didn’t exist on my computer and only showed up once the tool was on a real server — the kind of problem that makes you question your sanity before you find it.

Worked on my laptop, hung in production: the same code behaving differently on a server
Continue reading “The Bug That Ate a Day: It Only Hung in Production”