Work

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.

Role
Data Scientist Intern
Fields
Data / Optimization
Stack
  • Python
  • Gurobi
  • OR-Tools
  • Gradio
  • Docker
  • Google Kubernetes Engine
Live demo: the task-assignment model solved, with results per objective and a box plot of skill scores

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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

Burrito game tab: a map of Burritoville with three placed trucks and the buildings they serve
Burrito game: three trucks serve all 14 buildings for a profit of 970.
Stock selection tab: allocation bar chart and a risk-versus-return scatter plot
Stock selection: the best split of USD 10,000 within a 15% risk limit.
Course selection tab: two tables listing the chosen courses with credits and cost
Course selection: the cheapest set of courses that still completes the degree.
Chart comparing goal programming with the three single-objective task-assignment models
Full dataset: goal programming compared with each goal optimised on its own.

Faris Znafis

Loading portfolio