In this course we will develop the basic machineries needed for formulating and analyzing various optimization problems. Topics include convex analysis, linear and conic linear programming, nonlinear programming, optimality conditions, Lagrangian duality theory, and basics of optimization algorithms. Applications from different fields, such as computational economics and finance, combinatorial optimization, and signal and image processing, will be used to complement the theoretical developments. No prior optimization background is required for this class. However, students should have a workable knowledge in multivariable calculus, basic concepts of analysis, linear algebra and matrix theory.