A Free NHL Lineup Optimizer for DraftKings

The NHL lineup optimizer is live. Free, no account, no email, no cap on lineups. You upload one file — the player pool exactly as it downloads from DraftKings — and it hands back a CSV formatted for re-upload.

It is the hockey version of the football optimizer and the baseball one, same solver underneath, a different rulebook on top. Hockey turned out to be the easiest of the four sports I have tried, which was a pleasant surprise after basketball, where the stacking rules turned out to barely exist at all.

NHL DFS lineup optimizer rules screen showing line and power-play stacking, goalie rules and diversity caps
The rules screen. Tier 1 is DraftKings’ own rules, Tier 2 shapes a single lineup, Tier 3 is how the set differs from itself.

Continue reading “A Free NHL Lineup Optimizer for DraftKings”

NBA DFS Correlation: 3 Seasons, 500,000 Pairs

In the last post I argued that basketball gives an optimizer nothing to stack, because no rule of the sport links two players’ scores the way a batting order or a quarterback does. That was reasoning, not evidence. So I pulled three seasons of box scores and actually measured NBA DFS correlation — 62,681 player-games, 3,690 games, and 505,721 pairs of players who shared a floor.

The short version: the structural argument holds, the numbers are far smaller than most stacking advice implies, and the most interesting thing in the data is something I had predicted backwards.

Line chart of NBA teammate and opponent DraftKings score correlation crossing as the final margin widens
Continue reading “NBA DFS Correlation: 3 Seasons, 500,000 Pairs”

Roth Conversion Calculator With IRMAA and State Taxes

Somebody ran twelve impossible scenarios through my Roth conversion optimizer in seven minutes and then left with nothing. That’s the most useful thing I learned from finally sitting down and reading the tool’s usage log, and it’s why it’s now a Roth conversion calculator with IRMAA priced in, real state brackets for all fifty states, and the ability to tell you in plain English what your plan is actually doing.

The log covers roughly 190 solves across about 31 visitor sessions, which makes this the most-used of the five optimization tools I’ve put online. Almost everyone got a plan out of it. Two people got nothing at all, and the way they failed turned out to be the most interesting thing in the whole file — they weren’t defeated by a bug, they were defeated by an answer that was technically correct and completely useless.

Plain-English notes under a Roth conversion plan, including one reading “Your income is pinned at $109,000 for 13 years”
The optimizer explaining its own plan — fixed rules, not generated text.
Continue reading “Roth Conversion Calculator With IRMAA and State Taxes”

My Solver Said Optimal. Two Shifts Were Empty.

A solver status of optimal is a statement about a tolerance, not about your business rule.

A test suite told me my scheduler was broken. It wasn’t. What actually happened is stranger and more useful: on one of the shipped sample rosters my solver said optimal and handed back a schedule with two night posts nobody was assigned to. Not a crash, not an infeasibility, not a timeout. A clean optimal, with holes in it. Here is what I measured, what I had wrong in my own code comments, and the one dependency I had been describing to people as a speed optimization when it is really a correctness one.

Continue reading “My Solver Said Optimal. Two Shifts Were Empty.”

My Free Route Optimizer Now Tracks Three Capacities

The free vehicle routing optimizer at routing.kindoflost.com used to think about a vehicle’s capacity as a single number. Fine for a lot of routes, but real fleets rarely run out of just one thing. A cargo van can be full on volume with plenty of weight capacity left, or maxed out on weight while the cargo area still has room, or simply out of pallet slots. I added a fix: the tool now supports three independent vehicle capacity constraints per route, plus a route time limit you can set per vehicle instead of one setting for the whole fleet.

Vehicles sheet with capacity1, capacity2, capacity3, and route_time_limit columns
Continue reading “My Free Route Optimizer Now Tracks Three Capacities”