# Textbooks about optimization

Several optimization modelling textbooks are available online. Some are digital versions of hard-copy textbooks, while others are solely in web format. Content varies from focussing on theoretical aspects of optimization mathematics, through to practical applications, and developing models in specific programming languages.

This is a book on linear optimization, used for graduate-level courses at the University of Michigan. The examples are written using Python/Gurobi.

Topics include:

- Modeling.
- Algebra versus geometry.
- The simplex algorithm.
- Duality.
- Sensitivity analysis.
- Large-scale linear optimization.
- Integer-linear optimization.

Textbook: A first course in linear optimization.

This book provides a broad introduction to optimization with a focus on practical algorithms for the design of engineering systems. The text is intended for advanced undergraduates and graduate students as well as professionals. The examples are implemented in the Julia programming language.

Topics include:

- Derivatives and gradients.
- Stochastic methods.
- Constrained optimization.
- Sampling plans.
- Optimization under uncertainty.
- Multidisciplinary design optimization.

Textbook: Algorithms for optimization.

This online textbook, written by Stephen Boyd and Lieven Vandenberghe, covers many aspects of convex optimization.

According to the authors:

This book is about convex optimization, a special class of mathematical optimization problems, which includes least-squares and linear programming problems. It is well known that least-squares and linear programming problems have a fairly complete theory, arise in a variety of applications, and can be solved numerically very efficiently. The basic point of this book is that the same can be said for the larger class of convex optimization problems.

Boyd & Vandenberghe, preface of "Convex optimization"

This textbook includes many examples, along with Python, Julia, and Matlab data for additional exercises available on GitHub.

Textbook: Convex optimization.

GitHub: Data for additional exercises.

This is an online repository of companion notebooks for a project called "Data-Driven Mathematical Optimization in Python". It isn't exactly a textbook, but it is a great resource for learning about optimization modelling using the Pyomo library.

According to the authors, the goals of the notebooks are to:

- Provide a foundation for learning mathematical optimization hands-on.
- Demonstrate the tools and concepts of optimization with practical examples.
- Help others get started with building models and solving problems using a state-of-the-art modeling language and solvers.

The website is organized into chapters, with plenty of explanation and examples. There are around 50 notebooks, plus numerous supporting files, in the GitHub repository.

Textbook: Data-driven mathematical optimization in Python.

GitHub: Jupyter notebooks.

This e-book was written as a text for the topic "Decision Modeling" taught as a Business Management Course by David M. Tulett. There are numerous examples implemented using Excel Solver and LINGO.

Topics include:

- Applications of linear models.
- Sensitivity analysis.
- Network models.
- Integer models.
- Goal programming and nonlinear models.
- Decision analysis.

Textbook: Decision modeling.

This is a graduate-level textbook covering a range of fundamental to advanced optimization theory and algorithms with practical tips, numerous illustrations, and engineering examples.

Table of contents:

- Introduction.
- A short history of optimization.
- Numerical models and solvers.
- Unconstrained gradient-based optimization.
- Constrained gradient-based optimization.
- Computing derivatives.
- Gradient-free optimization.
- Discrete optimization.
- Multiobjective optimization.
- Surrogate-based optimization.
- Convex optimization.
- Optimization under uncertainty.
- Multidisciplinary design optimization.

Textbook: Engineering design optimization.

This online textbook, written by Changhyun Kwon, covers many aspects of optimization modelling in the Julia programming language using the JuMP (Julia for Mathematical Programming) package.

According to the author:

This book is

Changhyun Kwon, preface of "Julia programming for Operations Research"neithera textbook in numerical methods, a comprehensive introductory book to Julia programming, a textbook on numerical optimization, a complete manual of optimization solvers, nor an introductory book to computational science and engineering—it is a little bit of all.

This textbook includes many examples, which have source code available on GitHub.

Textbook: Julia programming for Operations Research.

GitHub: Code repository for textbook.

This is an open textbook in modeling, algorithms, and complexity. The many examples are written in Excel and Python (primarily the PuLP library).

The textbook is a work in progress.

Topics include:

- Linear programming.
- Integer programming.
- Discrete algorithms.
- Nonlinear programming.

This downloadable textbook, written by Richard Lusby & Thomas Stidsen, primarily teaches mathematical programming modelling and how to use Julia/JuMP for the implementation.

According to the authors:

In this book, we focus on how to create LP and MIP models. The models are first formulated in terms of mathematical equations, which are then implemented in the programming language Julia, using the JuMP package.

The implementation of a mathematical model using the JuMP package closely resembles how the mathematical model would be written. This makes the translation from the formulation to the implementation very intuitive.

Lusby & Stidsen, introduction of "Mathematical Programming with Julia"

This textbook includes many worked examples with Julia source code.

Textbook and source code: Mathematical Programming with Julia.

This online book is written by Eric Fraga at University College London. It is primarily intended to demonstrate that simple optimization methods, inspired by nature, are able to solve complex problems in process engineering. The book has examples written in the Julia programming language, with the source code available on GitHub.

According to the author:

The focus of this book is on solving problems that arise in process systems engineering (PSE). Optimization plays a crucial part in many PSE activities, including process design and operation. The problems that arise may have one or more of these challenges, in no particular order:

Fraga, introduction of "Nature inspired methods for optimization"

- Nonlinear models.
- Multi-modal objective function.
- Nonsmooth and discontinuous.
- Distributed quantities.
- Differential equations.
- Small feasible regions.
- Multiple objectives.

Book: Nature inspired methods for optimization.

GitHub: Code repository for textbook.

This online textbook, written by Fabio Schoen, is based on an advanced optimization modeling course for students in Management Engineering at Università degli Studi di Firenze.

The textbook's emphasis is on understanding how to model a variety of situations. According to the author:

I feel there is still a wide gap which separates academic research from day to day adoption. And, in my opinion, part of this is due to the lack of sufficient modeling skills. If we cannot model a problem, no matter how sophisticated our optimization algorithm are, we will not be able to solve it nor suggest any decision. We need to communicate our problem to a solver. And to do this we need a deep knowledge of models.

Fabio Schoen, preface of "Optimization models"

Consequently, the textbook describes many optimization model examples, with code written mostly in AMPL. Some examples also have Julia and Pyomo code, with the author welcoming contributions of new or existing models from readers.

Textbook: Optimization models.

This is a two-part textbook about Column Generation: advanced Branch-Cut-and-Price algorithms.

Column generation is a method to solve linear programming problems with a very large number of variables. It dynamically generates variables (and the corresponding matrix columns, hence the name) by solving auxiliary optimization problems known as pricing subproblems. Column generation can also be very effective in integer programming, forming the backbone of algorithms like Branch-and-Price and Branch-Cut-and-Price.

Part I, Column generation basics:

- The revised simplex algorithm
- Dantzig-Wolfe decomposition and column generation for linear programming.
- Integer programming review.
- Dantzig-Wolfe decomposition and column generation for integer programming.
- Lagrangian relaxation and column generation.

Part II, Topics in column generation:

- Column generation based heuristics.
- Column generation convergence.
- Advanced branching.
- The dynamic programming labeling algorithm for the RCSP.
- Non-robust cuts.
- Reduced cost fixing and related techniques.
- Additional case studies.
- Software for column generation.

Website: Optimizing with column generation.

Optimization 101 is an online textbook written by Distinguished Research Professor Emeritus John W. Chinneck.

Topics include:

- Linear programming.
- Networks.
- Integer programming.
- Heuristics.
- Dynamic programming.
- Non-linear programming.