Hands-On Mathematical Optimization with Python

Hands-On Mathematical Optimization with Python#

Welcome to this repository of companion notebooks for the book Hands-On Mathematical Optimization with Python, which will be published by Cambridge University press in 2024. This book introduces the concepts and tools of mathematical optimization with examples from a range of disciplines. The goals of these companion notebooks are to:

  • Provide a foundation for hands-on learning of mathematical optimization,

  • Demonstrate the tools and concepts of optimization with practical examples,

  • Help readers to develop the practical skills needed to build models and solving problem using state-of-the-art modeling languages and solvers.

Getting started#

The notebooks in this repository make extensive use of Pyomo which is a complete and versatile mathematical optimization package for the Python ecosystem. Pyomo provides a means to build models for optimization using the concepts of decision variables, constraints, and objectives from mathematical optimization, then transform and generate solutions using open source or commercial solvers.

All notebooks in this repository can be opened and run in Google Colab. A launch icon appearing at the top of a page (look for the rocket) indicates the notebook can be opened as an executable document. Selecting Colab will reopen the notebook in Google Colab. Cells inside the notebooks will perform any necessary installations of Pyomo and solvers needed to execute the code within the notebook.

Start your journey with the first chapter!

Help us!#

We seek your feedback! If you encounter an issue or have suggestions on how to make these examples better, please open an issue using the link at the top of every page (look for the Github cat icon).

About Us#

We are a group of researchers and educators who came together with a common purpose of developing materials for use in our classroom teaching. Hopefully, these materials will find use in other classrooms and, most importantly, by those seeking entry into the world of building optimization models for data-rich applications.

  • Krzysztof Postek, Boston Consulting Group (formerly TU Delft)

  • Alessandro Zocca, VU Amsterdam

  • Joaquim Gromicho, ORTEC and the University of Amsterdam

  • Jeffrey Kantor, University of Notre Dame


If you wish to cite this work, please use

  author = {Postek, Krzysztof and Zocca, Alessandro and Gromicho, Joaquim and Kantor, Jeffrey},
  title = {{Hands-On Mathematical Optimization with Python}},
  year = {2024},
  publisher = {Cambridge University Press}


  author = {Postek, Krzysztof and Zocca, Alessandro and Gromicho, Joaquim and Kantor, Jeffrey},
  title = {Companion Jupyter Book for {``Hands-On Mathematical Optimization with Python’’}},
  year = {2024},
  publisher = {GitHub},
  howpublished = {\url{https://github.com/mobook/MO-book}},
  note = {Textbook to be published by Cambridge University Press},