This book provides a comprehensive introduction to optimization with a focus on practical algorithms. The book approaches optimization from an engineering perspective, where the objective is to design a system that optimizes a set of metrics subject to constraints. Readers will learn about computational approaches for a range of challenges, including searching high-dimensional spaces, handling problems where there are multiple competing objectives, and accommodating uncertainty in the metrics. Figures, examples, and exercises convey the intuition behind the mathematical approaches. The text provides concrete implementations in the Julia programming language. Topics covered include derivatives and their generalization to multiple dimensions; local descent and first- and second-order methods that inform local descent; stochastic methods, which introduce randomness into the optimization process; linear constrained optimization, when both the objective function and the constraints are linear; surrogate models, probabilistic surrogate models, and using probabilistic surrogate models to guide optimization; optimization under uncertainty; uncertainty propagation; expression optimization; and multidisciplinary design optimization. Appendixes offer an introduction to the Julia language, test functions for evaluating algorithm performance, and mathematical concepts used in the derivation and analysis of the optimization methods discussed in the text. The book can be used by advanced undergraduates and graduate students in mathematics, statistics, computer science, any engineering field, (including electrical engineering and aerospace engineering), and operations research, and as a reference for professionals.


The full book is available as a PDF. You can also download individual chapters. The PDF is shared under a under a Creative Commons CC-BY-NC-ND license.

The copyright of this book has been licensed exclusively to The MIT Press. All inquiries regarding rights should be addressed to The MIT Press, Rights and Permissions Department. A print version is available for purchase.

The code blocks are available on GitHub.


  1. Introduction
  2. Derivatives and Gradients
  3. Bracketing
  4. Local Descent
  5. First-Order Methods
  6. Second Order Methods
  7. Direct Methods
  8. Stochastic Methods
  9. Population Methods
  10. Constraints
  11. Linear Constrained Optimization
  12. Multiobjective Optimization
  13. Sampling Plans
  14. Surrogate Models
  15. Probabilistic Surrogate Models
  16. Surrogate Optimization
  17. Optimization under Uncertainty
  18. Uncertainty Propagation
  19. Discrete Optimization
  20. Expression Optimization
  21. Multidisciplinary Optimization


  1. A: Julia
  2. B: Test Functions
  3. C: Mathematical Concepts
  4. D: Solutions


Please file issues on GitHub or email the address listed at the bottom of the pages of the PDF. The PDF is kept up to date with any corrections.