Integer programming presents us with great computational challenges. This course covers methods for dealing with such problems either exactly, or, when this is not practically feasible, through heuristic techniques providing us with upper and lower bounds on the objective function. Techniques covered include branch and bound, cutting planes, Lagrange- and LP-relaxation. Basic complexity theory is presented. In the computer laborations we implement some of the algorithms and techniques covered during the course.