Optimization Models & Web Applications
Every organisation makes the same kind of decision again and again: who does which job, where to put limited resources, how to spend a fixed budget. Optimization turns such a decision into a precise set of rules and goals, and a solver then searches every possible combination for the best one. During our internship we built four of these models, from a burrito-truck game to a tool that assigns sprint tasks to 109 people, and put them in a web app where anyone can change the inputs and watch the answer change.

What shipped
Scrum task-assignment model
Assigns 300 tasks across 5 projects to 109 talents, balancing three goals with goal programming.
Three warm-up challenges
Course selection, stock portfolio selection and Gurobi's Burrito Optimization Game.
Interactive web demo
A Gradio app on Hugging Face Spaces with one tab per model; every Solve runs the real model.
Reproducible packaging
An installable Python package and CLI, a Docker image, tests and CI that redeploys the demo on every push.
What changed
- Four optimization problems modelled and solved to optimality on their sample data.
- Task assignment balances idle time, skill fit and workload in a single plan instead of three competing ones.
- Anyone can run the models without installing anything, through the public web demo.
01 / In plain words
What is an optimization model?
Think of planning a road trip with a fixed budget: you want to see as many places as possible, but you cannot drive more than eight hours a day and the money has to last. You naturally juggle a goal (see more) against rules (time, money). An optimization model writes exactly that down in maths, so a computer can do the juggling for thousands of choices at once.
A solver then does not guess or learn from examples, as machine learning does. It searches the space of valid plans systematically and can prove that the plan it returns is the best possible one under the rules given.
Who does which task?
Like a team lead planning a sprint: give work to people whose skills fit, keep nobody idle, and keep nobody overloaded.
Where do the food trucks park?
Each truck costs money, but customers only walk so far. Pick the spots that earn the most after costs.
How do I split my savings?
Spread USD 10,000 over seven stocks for the highest expected return without taking on too much risk.
Which courses should I take?
Finish a degree's 180 credits at the lowest possible cost, with enough computer-science credits.
02 / Main project
Assigning Scrum tasks with goal programming
The main project assigns sprint tasks from several client projects to a pool of data talents. First, every talent gets a skill-matching score for every task. The default method, Competency Assessment, weights each competency by how much the task needs it and averages the gap between the talent's level and the required level into a Mean Skill Gap. A Weighted Euclidean Distance score is available as an alternative.
The model then assigns each task to exactly one person, keeps each person on at most one project and within a story-point limit, and pursues three goals: fewest idle talents, highest total skill score, and the lowest maximum workload. Each goal is solved on its own first; goal programming then finds one assignment that stays as close as possible to all three best values, weighted by priority.
- Full dataset
- 109 talents × 300 tasks, 5 projects
- Model type
- Mixed-integer program (MIP)
- Solver
- Gurobi
- Objectives
- Idle talents · skill score · max workload
- Default weights
- 0.03 · 0.90 · 0.07
- Workload limit
- 10 story points per talent (configurable)
03 / Warm-up challenges
Three smaller models, three techniques
Course selection · binary IP
Choose courses for exactly 180 credits with at least 120 from computer science, at minimum cost. A weighted multi-objective variant also penalises exam courses. Both reach a cost of 12,356. Solved with OR-Tools CP-SAT.
Stock selection · MIQCP
Maximise the annualised return of a seven-stock portfolio with at least three stocks, a minimum share per selected stock and a quadratic risk cap of 15%. Solved with Gurobi.
Burrito game · facility location
Gurobi's Burrito Optimization Game: decide where to park trucks so that revenue from nearby buildings outweighs the daily truck cost. Solved with OR-Tools CP-SAT.
04 / Engineering
From notebooks to a runnable product
The models started as Colab notebooks. They were refactored into one installable Python package with an `optim` command-line tool, so every model runs the same way locally, in Docker, or on any container job runner. A YAML config holds the workload limit, solver parameters, time limit and goal-programming weights.
The Gradio demo calls the same package, so its results are solved live rather than cached. CI runs the tests on the mini dataset and redeploys the demo to Hugging Face Spaces on every push to main.
Process details
Too many combinations to try by hand
Assigning 300 tasks to 109 people already has more possible plans than anyone could ever check, and every plan has to respect skills, workload limits and project boundaries at the same time.
The goals also pull against each other: keeping everyone busy, matching skills well and spreading work evenly cannot all be maximised at once. The work was to state each problem exactly, decide how to trade the goals off, and make the results easy to run and inspect.
From a business question to a solved model
Formulate
Write the decision as variables, rules and goals
Each yes/no choice becomes a binary variable, each business rule a constraint, and each goal an objective function.
Score
Measure how well a person fits a task
For task assignment, a skill-matching score compares each talent's competency levels with what each task requires.
Solve
Let Gurobi and OR-Tools search
Mixed-integer solvers find the provably best plan, or the best one found within a time limit for the largest dataset.
Ship
One CLI, one container, one web demo
All four models run from the same `optim` command, in Docker, and from a Gradio demo that re-solves them live.



