The course aims at preparing students to solve difficult discrete optimization problems with the help of modern computational tools.  Among the discussed approaches and tools are: (i) expressing problems in terms of satisfiability of Boolean formulas (SAT); (ii) using stable model (answer set) semantics of logic programming (AnsProlog); (iii) applying linear programming.  As a result, the students will correctly differentiate between types of optimization problems and properly apply dedicated solvers.