Project Overview
For our final Computing II project, our team developed NBA Lineup Lab, a decision-support web application designed to help users construct optimal five-player basketball lineups while balancing performance and salary constraints. Using historical NBA player performance data, the system allows users to select, filter, and optimize player lineups under a fixed salary cap.
The purpose of this project was to demonstrate how optimization modeling and interactive software tools can support real-world sports decision-making. Instead of relying on manual trial-and-error when selecting lineups, the system applies mathematical optimization to recommend the strongest possible team given financial limitations.
Industrial Engineering Context
This project is grounded in Industrial Engineering and Operations Research optimization principles, specifically resource allocation under constraints and integer programming. The lineup selection process is formulated as a mixed-integer optimization problem, where each player is either selected or not selected.
In addition, the project includes an organizational budget optimization model that applies linear programming to allocate a fixed budget across stadium operations, staff, and team performance. Together, these models demonstrate how IE techniques can be applied to both personnel selection and strategic budgeting.
Skills Used & Developed
Throughout this project, I developed and strengthened skills in:
Object-oriented programming in Java
Data loading and file input/output
CSV parsing using OpenCSV
Mixed-integer and linear optimization using Google OR-Tools
Optimization model formulation and solver integration
Interactive web application development using Vaadin
UI filtering, routing, and layout design
Translating mathematical optimization models into working software systems
Project Development Process Original Idea & Goal
Our original goal was to create an interactive basketball lineup optimizer that could automatically select the best possible five-player team under a salary cap. We wanted a project that directly connected optimization modeling to a real-world application, and professional sports provided a perfect testbed for constrained decision-making.
A secondary goal was to demonstrate how the same optimization principles could be extended beyond player selection into organizational budgeting and strategic planning.
Data Collection & Preparation
We used a CSV dataset of top NBA players from 2007–2015, which included player names, scaled salaries, performance scores, positions, and star tiers. This dataset was loaded into the system using OpenCSV, where each row was mapped into a structured Java object (PlayerCSV) and then converted into a domain-level Player object.
All processed player data was stored in Java collections and passed directly into both the optimization solver and the Vaadin user interface.
Base Model Design (Lineup Optimization)
The lineup optimizer was formulated as a mixed-integer programming model with the following structure:
Decision Variable
𝑥 𝑖 = 1 x i
=1 if player 𝑖 i is selected
𝑥 𝑖 = 0 x i
=0 otherwise
Objective
Maximize total team performance based on player performance scores
Constraints
Exactly five players must be selected
Total salary of selected players must be less than or equal to the salary cap
No fractional player selections (binary decision variables)
This base model successfully produced optimal five-player lineups under varying salary caps.
Model Evolution & Improvements Interactive Filtering & Human-in-the-Loop Optimization
To improve usability, we added interactive filtering within the Vaadin UI. Users can filter players by:
Position
Star tier
Minimum performance level
Salary range
This allowed users to explore the dataset visually before running the optimizer, creating a human-in-the-loop optimization process.
Performance Simulation
To move beyond pure deterministic optimization, we added a Monte Carlo–style performance simulation. After selecting a lineup, each player’s performance is randomly varied within a range to simulate game-to-game variability. The total projected lineup performance is then calculated and displayed to the user.
This helped demonstrate how stochastic variation affects optimized solutions.
Roadblocks & Challenges
Several technical challenges occurred during development, including:
File path and CSV loading issues across machines
Native library loading errors when integrating Google OR-Tools
Synchronizing data fields (position, star tier) across CSV, Java classes, and UI filters
Preventing frontend assets from interfering with UI interactions
Each issue required systematic debugging, refinement of project structure, and careful testing to ensure the system remained stable.
Final Results & Performance Testing
The final system consistently produced optimal five-player lineups in milliseconds using the OR-Tools SCIP solver. Users could visually verify results using salary totals and simulated performance scores.
The addition of the organizational budget optimizer allowed users to allocate a $30 million internal budget across multiple departments and observe how spending changes affected overall organizational success. Together, both models demonstrated fast, reliable performance under different scenarios.
Did the Final Project Match Our Expectations?
While the original goal focused solely on lineup optimization, the final project evolved into a full decision-support system. The integration of interactive UI tools, simulation, and organizational budgeting extended the scope far beyond our initial expectations.
The final system became not only an optimizer, but a complete analytical application demonstrating how Industrial Engineering methods can drive data-based decision-making in professional sports.