Find the statistically optimal schedule for YOU (if you're a Duke student)
This is how I got No 8:00 AM's, 2 days off, and all grad reqs filled while graduating a year early.
You can view my writeup here
Uses Binary Integer Programming + CPSAT to maximize of course quality metrics under time/ grad requirement constraints.
- Pipeline (
scripts/): Ingests catalog + evaluations, applies Bayesian-shrunk quality metrics - Solver (
scripts/solver/): BIP optimizer with configurable constraints - Backend (
backend/): FastAPI API serving the solver - Frontend (
frontend/): React + Zustand wizard UI
- Python 3.10+, Node.js 18+
- conda (recommended) or pip
conda env create -f environment.yml && conda activate solver
pip install -e . # install project packages for imports
cd backend && python -m uvicorn main:app --reload --port 8000cd frontend && npm install && npm run devpython scripts/run_pipeline.py --config config/pipeline_config.jsonPipeline stages:
- Ingest — Load raw JSON/CSV files
- Normalize — Parse times, days, course codes
- Merge — Match evaluations to catalog sections
- Aggregate — Bayesian shrinkage + z-scores
- Export — Generate solver-ready JSON
See DEPLOY.md for EC2/Docker deployment instructions.
MIT — see LICENSE.