The course covers major (combinatorial) solving approaches, namely constraint programming, integer programming, boolean satisfiability, dynamic programming and decision diagrams, and local search. The course focuses on modelling practical problems, expressing them in the surveyed paradigms; algorithms for solving such problems are covered in the follow-up “Constraint Solving” course. The topic of genetic algorithms is reserved for the course “Evolutionary Algorithms”. Lastly, the course discusses conducting proper empirical evaluations.