Optimization theory concerns the selection of a best option from a set of available options. Formulating an optimization problem involves describing the feasible set as well as prescribing a notion of “best”. This setup, although simple, is one of the most important and widespread ideas in engineering and the sciences. This course will begin by demonstrating the use of optimization theory in many contexts. The student will learn the standard categorization of optimization problems, and the mathematical and numerical tools available in each category. The second session of the course will delve into the class of tractable “convex” problems. We will learn about special cases, applications in the real world, and available solution techniques. In the third session we will review more advanced topics: optimization theory for steering dynamical systems (optimal control), training of data-based models with optimization (machine learning), and solving non-convex problems with genetic algorithms.