# Week 4 - Principles of Mathematical Programming

In this session we will introduce the principles of Mathematical Programming, the science (and art) of mathematically representing decision problems.

Mathematical Programming is used across a range of disciplines to determine optimal solutions to a vast range of decision problems. In principle, it focuses on determining the optimal allocation of limited resources, given a specific quantifiable goal and a set of operational constraints.

The word *programming*, in this case, does not refer to computer programming, but is rather borrowed from military parlance. Many of the decision problems that were initially studied by mathematical programming pioneers (such as George Dantzig, John Von Neumann, Richard Bellman) were focused on military logistics and training operations.

We could spend a full year studying the various aspects of Mathematical Programming and Optimization, and we would only have managed to scratch the surface. The focus of today’s session, however, is to outline its principles and teach you the basics of expressing decision problems mathematically.

This week’s seminar introduces Python’s PuLP package - a mathematical programming modeling framework, which we will use in order to develop code-based implementations of our mathematical models, and obtain solutions to problem instances.

### Lecture materials

##### Notebooks

Jupyter Notebooks that contain interactive demonstrations of the algorithms that were covered in this week’s lecture.

##### Seminar 3

This seminar provides an introduction to mathematical programming, and their formulation and solution in Python.

##### Tutorial 4

Tutorial questions relating to the materials covered in this week’s lectures.