← All projects

Manufacturing Optimisation

Material optimisation tool built on a colleague's linear-programming model in PuLP, further developed with model extensions, a Streamlit and Flask interface, and a CI pipeline that checks reference cases before every release.

  • Python
  • PuLP
  • Streamlit
  • Flask
  • pandas
  • NumPy
  • Plotly
  • Altair
  • PyInstaller
  • pytest

Overview

A manufacturing decision problem needed a consistent way to evaluate constrained alternatives, rather than relying on judgement applied case by case. A colleague built the first version and its linear-programming core. I took it over and developed it further. Before I left, a beta group of selected users worked with it productively and reported problems back to me.

Approach

Optimisation core

The problem is a linear program solved with PuLP, encoding the available inputs, the required outputs, and the constraints that make some combinations infeasible. The solver produces a deterministic plan against an explicit objective, so the same inputs always yield the same recommendation. I extended the model my colleague had built.

Interface and packaging

A Streamlit application, later joined by a Flask interface, made the tool usable without any Python knowledge: the plan with its key figures and an overview by material group, plus a history of those figures kept for evaluation. It ships as a desktop application, with the optimisation logic covered by pytest.

Release gate

A CI pipeline runs reference cases with known expected results, and the desktop build is only produced when every one of them passes. A change to the model cannot reach users without proving it still gives the answers it should.

What it built

Experience in taking over someone else’s model and developing it to production readiness: extending it, testing it against known answers, and designing for the people who use it.

Limitations

The model assumes deterministic inputs. Stochastic demand or supplier variability would require a reformulation.