Integer programming is a flexible and highly effective method for finding optimal and approximate solutions to discrete optimization problems in practice. In this course, we will consider several of the following advanced techniques for solving integer programming problems: Lagrangian relaxation, column generation, cutting planes, Dantzig-Wolfe decomposition, Benders' decomposition. A substantial amount of time will be spent on three modeling/computational assignments, together worth 50% of the grade, in which these techniques are applied to realistic problems. Parallel to these assignments, the lectures will provide the necessary theoretical background on polyhedra and polytopes, lattices, duality etc