Georgia Tech OMSCS Planning

Course Planner

Built to turn a messy course-selection process into a constrained optimization problem with explainable tradeoffs and a usable result.

active personal tool 2025

Project links

About

optimization operations-research education

Built with

python pulp javascript

Problem

Choosing an OMSCS path took more time than I wanted to admit. I kept reading course reviews, comparing workloads, and debating which specialization made the most sense, but the process still felt loose and subjective.

Course Planner started as a way to turn that decision into something more structured. Instead of juggling bookmarked reviews and half-formed preferences, I wanted a model that could encode the same tradeoffs I was making by hand and search for a valid plan more systematically.

Approach

The project is built as a small end-to-end pipeline. A browser-side script scrapes OMSCentral review data into a local JSON dataset, then a Python script uses PuLP to solve a mixed-integer optimization problem over that course set.

The model chooses exactly ten courses, enforces one specialization, and applies separate constraint sets for Interactive Intelligence and Computing Systems. On top of those rules, it scores each course using a weighted combination of rating, difficulty, workload, review volume, and a manual interest score:

maxc(wrRc+wd(5Dc)wwWc5+wnlog(1+Nc)+wiIc)xc\max \sum_{c} \left( w_r R_c + w_d(5 - D_c) - w_w \frac{W_c}{5} + w_n \log(1 + N_c) + w_i I_c \right) x_c

That last term matters. I did not want a planner that blindly optimized for public averages, because the whole point was to guide my own decisions. The interest score keeps the model personal, while the rest of the inputs give it enough structure to stay grounded in real course data and program constraints.

Outcome

This is still a personal tool, but it is one I continue to use every semester when I want to revisit tradeoffs or compare how my priorities have changed. The current version is CLI-first, which is fine for the stage it is in. The useful part is the model itself: I can adjust weights, rerun the solver, and get a defensible plan instead of relying on intuition alone.

It also captures the kind of project I like building. I start with a real decision problem, reduce it to a workable model, and turn it into something practical enough to keep using after the first prototype.

Planning Pipeline

The project pulls course review data into a local dataset, applies specialization constraints and preference weights, and solves for the best valid plan.

Rendering diagram...