Many heuristic algorithms for search and optimization draw their inspiration from nature. Examples include simulated annealing and swarm intelligence algorithms, as well as evolutionary and genetic algorithms. The appeal of these algorithms is that they are in some sense general purpose and don't require detailed knowledge of the problem to be solved. This is useful in practical cases where time, money, and knowledge limit the development of problem-specific algorithm. However, it often makes their analysis much more challenging.
In this lecture we will learn how to design, analyze and apply some of these algorithms. During course time we will introduce different algorithms and example use cases; furthermore, we will formally analyze some of these algorithms from a performance perspective. The projects will try out these algorithms and test them experimentally. Finally, some theoretical homeworks and an algorithm engineering project will practice the analysis and implementation of heuristic optimization algorithms.