# Tutorial¶

disropt is a Python package for distributed optimization over peer-to-peer networks of computing units called agents. The main idea of distributed optimization is to solve an optimization problem (enjoying a given structure) over a (possibly unstructured) network of processors. Each agent can perform local computation and can exchange information with only its neighbors in the network. A distributed algorithm consists of an iterative procedure in which each agent maintains a local estimate of the problem solution which is properly updated in order to converge towards the solution.

Formally, an optimization problem is a mathematical problem which consists in finding a minimum of a function while satisfying a given set of constraints. In symbols,

$\begin{split}\min_{x} \: & \: f(x) \\ \text{subject to} \: & \: x \in X,\end{split}$

where $$x \in \mathbb{R}^d$$ is called optimization variable, $$f : \mathbb{R}^d \rightarrow \mathbb{R}$$. is called cost function and $$X \subseteq \mathbb{R}^d$$ describes the problem constraints. The optimization problem is assumed to be feasible and has finite optimal cost. Thus, it admits at least an optimal solution that is usually denoted as $$x^\star$$. The optimal solution is a vector that satisfies all the constraints and attains the optimal cost.