Blog

Your Fantasy Draft Is an NP-Hard Problem. Here's How We're Solving It.

Fantasy drafts are combinatorial optimization problems under uncertainty. FootballQuants attacks that live draft problem with projections, opponent modeling, rollout search, and parallel hardware.

Daniel Kennedy6/17/20266 min read
Diagram comparing fantasy football draft search space with the classic 0/1 knapsack optimization problem.

Every August, millions of people sit down to do something that, mathematically, they have no business doing well: optimize a combinatorial decision problem under uncertainty, in real time, against nine other people trying to do the same thing. We call it a fantasy draft. Computer scientists would call it intractable.

I built FootballQuants because I got tired of "draft help" that was really just a ranked list someone typed up in July. A cheat sheet doesn't know your league. It doesn't know that the guy two seats down always reaches for his favorite running back, that your uncle really values running quarterbacks, or that you already have three wideouts and the value on the board has quietly shifted to tight end. A static list answers "who's good?" The actual question you're trying to answer on the clock is much harder: given everything that's already happened and everything likely to happen next, which pick gives my final roster the most points?

That question is where the computer science starts.

Football players set at the line of scrimmage before a snap, used as a visual anchor for draft-room decision-making under constraints.

Football action photo source: U.S. Navy photo by Chief Photographer's Mate Johnny Bivera, public domain via Wikimedia Commons.

The Draft Is a Modified Knapsack Problem

If you've taken an algorithms class, you've met the 0/1 knapsack problem: you have a bag with a fixed capacity and a pile of items, each with a weight and a value, and you want to choose the subset that maximizes total value without overfilling the bag. It sounds simple. It is famously NP-hard — there's no known way to solve large instances quickly; the number of possible combinations explodes exponentially as you add items.

A fantasy draft is knapsack's meaner cousin. Your "bag" is your roster — a fixed set of starting slots (QB, RB, WR, TE, flex) plus a bench. The "items" are players, each with a projected value. You're trying to fill the bag to maximize points. So far, so knapsack. But the draft adds three twists that make it dramatically harder:

  1. The items disappear. Every pick your opponents make removes a player from the board. You're not choosing from a fixed pile; you're choosing from a shrinking, adversarial one.

  2. It's sequential and uncertain. You don't get to see the whole board and choose once. You pick, then wait a full round-trip, and you have to reason about who will still be there when it's your turn again.

  3. Value is non-linear. A roster isn't worth the sum of its players. Each week you start your best available lineup, injuries happen, and a high-ceiling bench player is worth something precisely because he might erupt. Your roster's true value is itself an optimization problem nested inside the draft.

Put those together and you get a stochastic, adversarial, multi-stage optimization problem. If you tried to brute-force it — branch every one of your choices, every round, against every way your opponents might react — the search tree branches into the billions almost immediately. You cannot enumerate it. Not on your laptop, not before the draft clock expires, not before the heat death of the universe.

Fantasy football draft search space diagram showing how plausible choices across draft rounds can grow to roughly 1.4 x 10 to the 20 draft states.

How We Actually Solve It

You don't solve NP-hard problems exactly at scale. You approximate them intelligently — the same way game-playing AI tackles chess and Go, where the move tree is also impossibly large. FootballQuants does this in three layers:

A projection-driven value model, scored for your league. We don't invent player rankings. We start from professional consensus projections and run them through your league's exact scoring rules, so a reception-heavy league and a standard league get genuinely different boards. We also backtested this: across real drafts, the projection is a meaningfully better predictor of how players actually finish than draft-day ADP — so we trust the projection over the crowd, and we can show you exactly where the two disagree.

A model of your opponents. We profile how the specific managers in your league draft — positional tendencies, how much they reach, who they target — calibrated on real draft history. That lets us estimate, for any player, the probability he survives to your next pick. This is the part a cheat sheet can never do.

A rollout search at every pick. When it's your turn, we take your most promising candidates and, for each one, simulate the entire rest of the draft hundreds of times — opponents sampling from their behavior model, our own future picks chosen by a fast greedy policy — and grade the finished roster each time. The grade is based on expected starter production plus the upside your bench provides. We then recommend the pick whose simulated futures end in the strongest roster, on average. It's Monte Carlo rollout plus beam search — a principled approximation to a problem we can't solve exactly, recomputed live from the real board as your draft unfolds.

Why This Is a Premium Service

This is expensive to compute. Billions of full-draft simulations per pick, each one re-optimizing a roster, is not something you run on a cheap web server — a single recommendation at full depth takes about thirteen minutes on an ordinary cloud instance. That's useless on a draft clock.

So we don't run it on an ordinary server. The heavy computation runs on a dedicated NVIDIA DGX — the class of massively parallel hardware normally reserved for training AI models. Because the simulations are independent, they fan out across the DGX's parallel processing and come back in less than a minute. That same thirteen-minute job finishes in the time allotted on the clock. The DGX is the difference between "interesting research project" and "a tool you can actually use while you're on the clock." It's also why this is a paid product: you're not renting a spreadsheet, you're renting time on serious parallel hardware.

What You Get Out of It

In the draft room: a live recommendation that understands your scoring, your roster needs, and your specific league-mates — and tells you not just who but why, including whether a player is a value or a reach relative to where the room will take him.

After the season: a full history layer — draft grades (what your roster projected to score the day you drafted it), a retrospective on how it actually played out, a manager "IQ" that blends drafting, lineup-setting, and the waiver wire across your league, and a luck score that separates good process from good fortune.

Come Break It With Me

We're running a free pilot this season. I'm looking for a small group of beta testers who draft on Sleeper, care about getting it right, and will tell me honestly where it's wrong. If that's you — and especially if you'd bring a few friends or a whole league — email me directly at daniel.dklogics@gmail.com. And if you just want to use the product and not worry about debugging and math, please sign up and let me know how it goes!

Share this post