This course provides an introduction to useful frameworks for discrete optimization problems. We introduce the basic concepts of polyhedra, lattices and integer cones and illustrate these notions by some examples coming from combinatorial optimization. An algorithm for finding the Hermite normal form of a lattice and the main methods for facet or vertex enumeration are presented.