thumb|400x400px|Example search for a solution. Blue lines show constraints, red points show iterated solutions.|alt=
Interior-point methods (also referred to as barrier methods or IPMs) are algorithms for solving linear and non-linear convex optimization problems. IPMs combine two advantages of previously-known algorithms:
- Theoretically, their run-time is polynomial—in contrast to the simplex method, which has exponential run-time in the worst case.
- Practically, they run as fast as the simplex method—in contrast to the ellipsoid method, which has polynomial run-time in theory but is very slow in practice.
In contrast to active-set methods (such as the simplex method) which traverses the boundary of the feasible region, and the ellipsoid method which bounds the feasible region from outside, an IPM reaches a best solution by traversing the interior of the feasible region—hence the name.
History
An interior point method was discovered by Soviet mathematician I. I. Dikin in 1967. The method was reinvented in the U.S. in the mid-1980s. In 1984, Narendra Karmarkar developed a method for linear programming called Karmarkar's algorithm, which runs in polynomial time (<math>O(n^{3.5} L)</math> operations on L-bit numbers, where n is the number of variables and constants), and is also very efficient in practice. Karmarkar's paper created a surge of interest in interior point methods. Two years later, James Renegar invented the first path-following interior-point method, with run-time <math>O(n^{3} L)</math>. The method was later extended from linear to convex optimization problems, based on a self-concordant barrier function used to encode the convex set.
Any convex optimization problem can be transformed into minimizing (or maximizing) a linear function over a convex set by converting to the epigraph form. The idea of encoding the feasible set using a barrier and designing barrier methods was studied by Anthony V. Fiacco, Garth P. McCormick, and others in the early 1960s. These ideas were mainly developed for general nonlinear programming, but they were later abandoned due to the presence of more competitive methods for this class of problems (e.g. sequential quadratic programming).
Yurii Nesterov and Arkadi Nemirovski came up with a special class of such barriers that can be used to encode any convex set. They guarantee that the number of iterations of the algorithm is bounded by a polynomial in the dimension and accuracy of the solution.
Definitions
We are given a convex program of the form:<math display="block">
\begin{aligned}
\underset{x \in \mathbb{R}^n}{\text{minimize\quad & f(x) \\
\text{subject to}\quad & x \in G.
\end{aligned}
</math>where f is a convex function and G is a convex set. Without loss of generality, we can assume that the objective f is a linear function. Usually, the convex set G is represented by a set of convex inequalities and linear equalities; the linear equalities can be eliminated using linear algebra, so for simplicity we assume there are only convex inequalities, and the program can be described as follows, where the g<sub>i</sub> are convex functions:<math display="block">
\begin{aligned}
\underset{x \in \mathbb{R}^n}{\text{minimize\quad & f(x) \\
\text{subject to}\quad & g_i(x) \leq 0 \text{ for } i = 1, \dots, m. \\
\end{aligned}
</math>We assume that the constraint functions belong to some family (e.g. quadratic functions), so that the program can be represented by a finite vector of coefficients (e.g. the coefficients to the quadratic functions). The dimension of this coefficient vector is called the size of the program. A numerical solver for a given family of programs is an algorithm that, given the coefficient vector, generates a sequence of approximate solutions x<sub>t</sub> for t=1,2,..., using finitely many arithmetic operations. A numerical solver is called convergent if, for any program from the family and any positive ε>0, there is some T (which may depend on the program and on ε) such that, for any t>T, the approximate solution x<sub>t</sub> is ε-approximate, that is:<math display="block">
\begin{aligned}
& f(x_{t}) - f^{*} \leq \epsilon, \\
& g_{i}(x_{t}) \leq \epsilon \quad \text{for} \quad i = 1, \dots, m, \\
& x \in G,
\end{aligned}
</math>where <math>f^{*}</math> is the optimal solution. A solver is called polynomial if the total number of arithmetic operations in the first T steps is at most<blockquote>poly(problem-size) * log(V/ε),</blockquote>where V is some data-dependent constant, e.g., the difference between the largest and smallest value in the feasible set. In other words, V/ε is the "relative accuracy" of the solution - the accuracy w.r.t. the largest coefficient. log(V/ε) represents the number of "accuracy digits". Therefore, a solver is 'polynomial' if each additional digit of accuracy requires a number of operations that is polynomial in the problem size.
Types
Types of interior point methods include:
- Potential reduction methods: Karmarkar's algorithm was the first one.
- Path-following methods: the algorithms of James Renegar and Clovis Gonzaga were the first ones.
- Primal-dual methods.
Path-following methods
Idea
Given a convex optimization program (P) with constraints, we can convert it to an unconstrained program by adding a barrier function. Specifically, let b be a smooth convex function, defined in the interior of the feasible region G, such that for any sequence <math>\{x_j \in \textbf{G}\}</math>whose limit is on the boundary of G: <math>\lim_{j\to \infty} b(x_j)=\infty</math>. We also assume that b is non-degenerate, that is: <math>b(x)</math> is positive definite for all x in interior(G). Now, consider the family of programs: <math>P_t = t \cdot f(x) + b(x)</math>
Technically the program is restricted, since b is defined only in the interior of G. But practically, it is possible to solve it as an unconstrained program, since any solver trying to minimize the function will not approach the boundary, where b approaches infinity. Therefore, (P<sub>t</sub>) has a unique solution - denote it by x*(t). The function x* is a continuous function of t, which is called the central path. All limit points of x*, as t approaches infinity, are optimal solutions of the original program (P).
A path-following method is a method of tracking the function x* along a certain increasing sequence t<sub>1</sub>,t<sub>2</sub>,..., that is: computing a good-enough approximation x<sub>i</sub> to the point x*(t<sub>i</sub>), such that the difference x<sub>i</sub> - x*(t<sub>i</sub>) approaches 0 as i approaches infinity; then the sequence x<sub>i</sub> approaches the optimal solution of (P). This requires to specify three things:
- The barrier function b(x).
- A policy for determining the penalty parameters t<sub>i</sub>.
- The unconstrained-optimization solver used to solve (P<sub>i</sub>) and find x<sub>i</sub>, such as Newton's method. Note that we can use each x<sub>i</sub> as a starting-point for solving the next problem (P<sub>i+1</sub>).
The main challenge in proving that the method is polytime is that, as the penalty parameter grows, the solution gets near the boundary, and the function becomes steeper. The run-time of solvers such as Newton's method becomes longer, and it is hard to prove that the total runtime is polynomial.
Renegar For simplicity, consider the following nonlinear optimization problem with inequality constraints:
<math display="block">\begin{aligned}
\operatorname{minimize}\quad & f(x) \\
\text{subject to}\quad
&x \in \mathbb{R}^n,\\
&c_i(x) \ge 0 \text{ for } i = 1, \ldots, m,\\
\text{where}\quad & f : \mathbb{R}^{n} \to \mathbb{R},\ c_i : \mathbb{R}^{n} \to \mathbb{R}.
\end{aligned}\quad (1)</math>
This inequality-constrained optimization problem is solved by converting it into an unconstrained objective function whose minimum we hope to find efficiently.
Specifically, the logarithmic barrier function associated with (1) is
<math display="block">B(x,\mu) = f(x) - \mu \sum_{i=1}^m \log(c_i(x)). \quad (2)</math>
Here <math>\mu</math> is a small positive scalar, sometimes called the "barrier parameter". As <math>\mu</math> converges to zero the minimum of <math>B(x,\mu)</math> should converge to a solution of (1).
The gradient of a differentiable function <math>h : \mathbb{R}^n \to \mathbb{R}</math> is denoted <math>\nabla h</math>.
The gradient of the barrier function is
<math display="block">\nabla B(x,\mu) = \nabla f(x) - \mu \sum_{i=1}^m \frac{1}{c_i(x)} \nabla c_i(x). \quad (3)</math>
In addition to the original ("primal") variable <math>x</math> we introduce a Lagrange multiplier-inspired dual variable <math>\lambda \in \mathbb{R} ^m</math>
<math display="block">c_i(x) \lambda_i = \mu,\quad \forall i = 1, \ldots, m. \quad (4)</math>
Equation (4) is sometimes called the "perturbed complementarity" condition, for its resemblance to "complementary slackness" in KKT conditions.
We try to find those <math>(x_\mu, \lambda_\mu)</math> for which the gradient of the barrier function is zero.
Substituting <math>1/c_i(x) = \lambda_i / \mu</math> from (4) into (3), we get an equation for the gradient:
<math display="block">\nabla B(x_\mu, \lambda_\mu) = \nabla f(x_\mu) - J(x_\mu)^T \lambda_\mu = 0, \quad (5)</math>
where the matrix <math>J</math> is the Jacobian of the constraints <math>c(x)</math>.
The intuition behind (5) is that the gradient of <math>f(x)</math> should lie in the subspace spanned by the constraints' gradients. The "perturbed complementarity" with small <math>\mu</math> (4) can be understood as the condition that the solution should either lie near the boundary <math>c_i(x) = 0</math>, or that the projection of the gradient <math>\nabla f</math> on the constraint component <math>c_i(x)</math> normal should be almost zero.
Let <math>(p_x, p_\lambda)</math> be the search direction for iteratively updating <math>(x, \lambda)</math>.
Applying Newton's method to (4) and (5), we get an equation for <math>(p_x, p_\lambda)</math>:
<math display="block">\begin{pmatrix}
H(x, \lambda) & -J(x)^T \\
\operatorname{diag}(\lambda) J(x) & \operatorname{diag}(c(x))
\end{pmatrix}\begin{pmatrix}
p_x \\
p_\lambda
\end{pmatrix}=\begin{pmatrix}
-\nabla f(x) + J(x)^T \lambda \\
\mu 1 - \operatorname{diag}(c(x)) \lambda
\end{pmatrix},</math>
where <math>H</math> is the Hessian matrix of <math>B(x, \mu)</math>, <math>\operatorname{diag}(\lambda)</math> is a diagonal matrix of <math>\lambda</math>, and <math>\operatorname{diag}(c(x))</math> is the diagonal matrix of <math>c(x)</math>.
Because of (1), (4) the condition
:<math>\lambda \ge 0</math>
should be enforced at each step. This can be done by choosing appropriate <math>\alpha</math>:
:<math>(x,\lambda) \to (x + \alpha p_x, \lambda + \alpha p_\lambda).</math>center|thumb|400x400px|Trajectory of the iterates of x by using the interior point method.
Types of convex programs solvable via interior-point methods
Here are some special cases of convex programs that can be solved efficiently by interior-point methods.
