DJ's Lineup Lab NBA lineup optimizer Public beta

Inspired by the original R + lpSolve course project

Build the lineup. See every tradeoff.

Choose a game plan, set real constraints, lock your must-play players, and let an exact optimizer compare every eligible combination.

Open the optimizer
  • Choose a team-season
  • Set your game plan
  • Build and explain the best group

Basketball Reference historical database

Choose a historical team and season

Select any imported NBA team-season from 1980 forward. If a player was traded, only that player's games with the selected team count. The roster is cached on this device.

Preparing the imported NBA team-season data...

Current roster data Loading player data... Preparing verified team and player media...
Season
-
Team
-
Players
-
1

Set the game plan

What should this group do best?

Adjust strategy weights

Weights do not need to add to 100. Only their proportions matter. Each stat is converted to a pool-relative percentile before the weights are combined.

Analytics and reporting assumptions

These options explain the result; they do not weaken the exact constraints. Per 36 puts counting stats on an equal playing-time scale. The per-100 view is labelled an estimate because historical team possessions are reconstructed from available team totals.

Per game, per 36, and per-100 estimates all describe the selected team stint. Era-relative index compares a player's per-36 rate with the same NBA season and phase; 100 is the minute-weighted league baseline.

In rotation mode, the recommended per-36 basis decides which rate profiles earn minutes. Exact projected totals always use each player's historical per-minute production times the proposed minutes.

Experimental matchup emphasis

Historical Style Counter

Compare two teams from the same season and phase. This transparent heuristic highlights historical statistical gaps and previews an optional weight adjustment; it does not simulate a game or predict a winner.

Load a database team-season above to compare an opponent.

2

Define the rules

Choose who qualifies and what the plan must include

Position coverage

Players can cover every source-listed role. For example, a PF-C may fill a forward or center requirement, but each selected player fills only one required roster slot.

Player eligibility

Only players meeting both requirements can be selected. Recommended defaults are 20 regular-season games and 3 playoff games.

Combined player profiles (optional requirements)

In lineup mode, these rules add each selected player's historical per-game line. They describe the five-player profile; they do not forecast one team box score.

3

Choose your players

Lock, exclude, compare, or watch players

Search changes only the visible rows. Eligibility filters apply when optimizing.
Player Pos MPG PTS REB AST STL BLK TOV Lock Exclude Compare Watch
Loading player data...
Loading eligibility...
Best 5-player group

Your result will appear here

Pick a strategy, set any must-have rules, and run the optimizer. You will get a best group, alternatives, and a constraint check.