Provides a comprehensive overview of the most common approaches used to design distributed optimization algorithms, together with the theoretical analysis of the main schemes in their basic version. The book identifies and formalizes classes of problem set-ups that arise in motivating application scenarios.