Real-world planning, scheduling, and resource allocation problems are often too large and complex to solve using straightforward applications of classic exact optimization methods. Often a hybrid combination of methods is used to decompose large, unwieldy problems into smaller and computationally-tractable sub-problems. This course introduces the theory, algorithms, and a framework for combining multiple optimization techniques to solve large-scale real-world optimization problems. Techniques include integer optimization, constraint programming, network optimization, heuristics, dynamic programming, and reinforcement learning. The class provides the necessary theoretical underpinnings of the techniques, and focuses on selecting and implementing hybrid methods to solve applied problems. Emphasis is mostly on deterministic methods, but includes some stochastic concepts. Students will gain experience in formulating models of real-world problems, implementing solution techniques using IBM CPLEX and other software, and presenting analytic results clearly and concisely. Some previous experience with a scientific computing language (e.g., Python, MATLAB, Julia, R) is expected.
Course prerequisite(s): 
Linear algebra; some knowledge of mathematical set notation; EN.625.603 or other exposure to probability and statistics.
Course instructor(s) :