Michael J O'Neill Assistant Professor

Overview

Optimization models and software are ubiquitous in industry and academia and arise in a plethora of applications such as engineering design, statistics, and economics. Optimization is used by most Fortune 500 companies, to manage their inventory and workforce, to optimize their cashflow and portfolios, to design efficient supply chains, to manage logistics and transportation, and to train machine learning models.

This course will teach students how to model optimization problems and solve them using modern software. It will teach the fundamentals of algorithms to solve optimization problems as well as the underlying theory and geometry.

Prerequisites

MATH 347 (previously MATH 547) or equivalent.

Course Outline

  1. Introduction to mathematical optimization
    • Mathematical optimization and fundamental concepts
    • Motivating examples and real-world applications
  2. A review on linear algebra: vectors, matrices, and linear systems
  3. Linear programming
    • Linear programming with two variables
    • Forms of linear programming problems, and preprocessing
    • Basic solutions and basic feasible solutions
  4. Introduction to solving optimization problems with Julia/JuMP
  5. Simplex methods for linear programming
    • Simplex method in matrix form
    • Simplex method with tableaux
    • Two-phase simplex method
  6. Duality and sensitivity analysis in linear programming
  7. Applications of linear programming
    • Classical problems
    • Engineering applications
    • Blending and inventory problems
    • Transportation problems
    • Minimum cost network flow problems
  8. Introduction to nonlinear programming (if time permits)
    • Quadratic programming and its applications
    • Convex programming
  9. Introduction to integer programming (if time permits)
    • Set covering and assignment problems
    • Logical modeling tricks
    • Solving integer programs

Coding

We will use Julia (http://julialang.org/ with JuMP (http://www.juliaopt.org/JuMP.jl/0.18/) for implementing optimization models. IJulia notebooks (https://julialang.github.io/IJulia.jl/stable/) will also be used to organize and present our code and its output. A tutorial for installing and using Julia with JuMP will occur early in the semester.

Syllabus

You can find the syllabus here. Course material will be updated throughout the semester on Canvas.