This book presents models and algorithms for complex scheduling problems. Besides resource-constrained project scheduling problems with applications also job-shop problems with flexible machines, transportation or limited buffers are discussed. Discrete optimization methods like linear and integer programming, constraint propagation techniques, shortest path and network flow algorithms, branch-and-bound methods, local search and genetic algorithms, and dynamic programming are presented. They are used in exact or heuristic procedures to solve the introduced complex scheduling problems. Furthermore, methods for calculating lower bounds are described. Most algorithms are formulated in detail and illustrated with examples.