### Optimization models

We've collated many interesting, publicly available optimization models in our GitHub repository. Our focus is on models that are built using Excel and/or Python. Each model includes a brief description along with source code.

The model links are organized into the following categories:

### Blending

Blending optimization problems involve combining several resources or materials to create products that meet specific requirements at lowest cost. The blending may include many different types of materials, such as: cement, wine, oil products, and feed stocks.

### Diet

The "Diet Problem" is one of the earliest applications of linear programming. The objective is to minimize the cost of food while complying with daily nutritional intake requirements. George Dantzig first solved the problem as a linear program, based on earlier work by Nobel Laureate George Stigler.

### Finance

There are many interesting optimization problems in finance, including: portfolio optimization, risk management, option pricing, and investment decision support.

### Job shop

We need to schedule some jobs on a set of machines. The jobs may have different characteristics, such as processing times, priorities, and precedents. The machines may have different characteristics, such as processing power and capabilities. The objective could be to minimize the makespan (total length of the schedule), meet deadlines, minimize cost, or some other requirement.

### Knapsack

The "Knapsack Problem" is a very common application of optimization modelling. That is, given a set of items, each with a weight and a value, determine the number of each item to include in a collection so that the total weight is less than or equal to a given limit and the total value is as large as possible. There are numerous variations of the knapsack problem.

### Non-linear

This category includes models specifically intended to demonstrate how to formulate and solve models with non-linear constraints and/or objective function. Some of the models include binary and integer variables. These models are mostly solved using the IPOPT, Bonmin, or Couenne solvers.

### Staff scheduling

The Staff Scheduling Problem involves finding an optimal way to assign people to meet work requirements, allowing for a variety of constraints. The modelled situations are often complex and difficult to solve. A special case, often used to represent the whole category, is called the Nurse Scheduling Problem or the Nurse Rostering Problem. Potential solution techniques include: mixed integer programming, constraint satisfaction, and genetic algorithms.