The goal of this course is learning techniques for solving combinatorial optimization problems, especially those that can be formulated over graphs.