The INTPOINT Procedure

The Interior Point Algorithm

The simplex algorithm, developed shortly after World War II, was for many years the main method used to solve linear programming problems. Over the last fifteen years, however, the interior point algorithm has been developed. This algorithm also solves linear programming problems. From the start it showed great theoretical promise, and considerable research in the area resulted in practical implementations that performed competitively with the simplex algorithm. More recently, interior point algorithms have evolved to become superior to the simplex algorithm, in general, especially when the problems are large.

There are many variations of interior point algorithms. PROC INTPOINT uses the Primal-Dual with Predictor-Corrector algorithm. More information on this particular algorithm and related theory can be found in the texts by Roos, Terlaky, and Vial (1997), Wright (1996), and Ye (1996).


Interior Point Algorithmic Details

After preprocessing, the linear program to be solved is
{\rm minimize} & c^t x \   {\rm subjectto} & a x = b \    & x \geq 0 \
This is the primal problem. The matrices  d,  z, and  q of NPSC have been renamed  c,  x, and  a, respectively, as these symbols are by convention used more, the problem to be solved is different from the original because of preprocessing, and there has been a change of primal variable to transform the LP into one whose variables have zero lower bounds. To simplify the algebra here, assume that variables have infinite upper bounds, and constraints are equalities. (Interior point algorithms do efficiently handle finite upper bounds, and it is easy to introduce primal slack variables to change inequalities into equalities.) The problem has  n variables;  i is a variable number;  k is an iteration number, and if used as a subscript or superscript it denotes ``of iteration  k''.

There exists an equivalent problem, the dual problem, stated as

{\rm maximize} & b^t y \   {\rm subjectto} & a^t y + s = c \    & s \geq 0 \
where  y are dual variables, and  s are dual constraint slacks.

The interior point algorithm solves the system of equations to satisfy the Karush-Kuhn-Tucker (KKT) conditions for optimality:

 a x = b
 a^t y + s = c
 x s e = 0
 x \ge 0
 s \ge 0
where
 s = {\rm diag}(s) \: (that is,  s_{i,j} = s_i if  i=j, s_{i,j} = 0 \, otherwise)
 x = {\rm diag}(x)
 e_i = 1 \: \forall i

These are the conditions for feasibility, with the complementarity condition  x s e = 0 added. Complementarity forces the optimal objectives of the primal and dual to be equal,  c^t x_{opt} = b^t y_{opt}, as

 0 = x^t_{opt} s_{opt} = s^t_{opt} x_{opt} = (c - a^t y_{opt})^t x_{opt} = c^t x_{opt} -   y^t_{opt} (a x_{opt}) = c^t x_{opt} - b^t y_{opt}

Before the optimum is reached, a solution  (x, y, s) may not satisfy the KKT conditions:

The interior point algorithm works by using Newton's method to find a direction to move (\delta x^k, \delta y^k, \delta s^k) from the current solution  (x^k, y^k, s^k) toward a better solution:

(x^{k+1}, y^{k+1}, s^{k+1}) = (x^k, y^k, s^k) + \alpha   (\delta x^k, \delta y^k, \delta s^k)

where \alpha is the step length and is assigned a value as large as possible but not so large that an  x^{k+1}_i or  s^{k+1}_i is "too close" to zero. The direction in which to move is found using

a \delta x^k = {infeas}_c
a^t \delta y^k + \delta s^k = {infeas}_d
s^k \delta x^k + x^k \delta s^k = - x^k s^k e

To greatly improve performance, the third equation is changed to

s^k \delta x^k + x^k \delta s^k = - x^k s^k e + \sigma_k \mu_k e
where \mu_k = (x^k)^t s^k / n, the average complementarity, and 0 \leq \sigma_k \leq 1.

The effect now is to find a direction in which to move to reduce infeasibilities and to reduce the complementarity toward zero, but if any  x^k_i s^k_i is too close to zero, it is "nudged out" to \mu, and any  x^k_i s^k_i that is larger than \mu is "nudged into" \mu. A \sigma_k close to or equal to 0.0 biases a direction toward the optimum, and a value of \sigma_k close to or equal to 1.0 "centers" the direction toward a point where all pairwise products x^k_i s^k_i = \mu. Such points make up the central path in the interior. Although centering directions make little, if any, progress in reducing \mu and moving the solution closer to the optimum, substantial progress toward the optimum can usually be made in the next iteration.

The central path is crucial to why the interior point algorithm is so efficient. As \mu is decreased, this path "guides" the algorithm to the optimum through the interior of feasible space. Without centering, the algorithm would find a series of solutions near each other close to the boundary of feasible space. Step lengths along the direction would be small and many more iterations would probably be required to reach the optimum.

That in a nutshell is the primal-dual interior point algorithm. Varieties of the algorithm differ in the way \alpha and \sigma_k are chosen and the direction adjusted during each iteration. A wealth of information can be found in the texts by Roos, Terlaky, and Vial (1997), Wright (1996), and Ye (1996).

The calculation of the direction is the most time-consuming step of the interior point algorithm. Assume the  kth iteration is being performed, so the subscript and superscript  k can be dropped from the algebra:

a \delta x = {infeas}_c
a^t \delta y + \delta s = {infeas}_d
s \delta x + x \delta s = - x s e + \sigma \mu e

Rearranging the second equation,

\delta s = {infeas}_d - a^t \delta y

Rearranging the third equation,

\delta s = x^{-1}(- s \delta x - x s e + \sigma \mu e)
\delta s = - \theta \delta x - s e + x^{-1} \sigma \mu e
where \theta = s x^{-1}.

Equating these two expressions for \delta s and rearranging,

-\theta \delta x - s e + x^{-1} \sigma \mu e = {infeas}_d - a^t \delta y
-\theta \delta x = s e - x^{-1} \sigma \mu e + {infeas}_d - a^t \delta y
\delta x = \theta^{-1}(-s e + x^{-1} \sigma \mu e - {infeas}_d + a^t \delta y)
\delta x = \rho + \theta^{-1} a^t \delta y
where \rho = \theta^{-1}(-s e + x^{-1} \sigma \mu e - {infeas}_d).

Substituting into the first direction equation,

a \delta x = {infeas}_c
a (\rho + \theta^{-1} a^t \delta y) = {infeas}_c
a \theta^{-1} a^t \delta y = {infeas}_c - a \rho
\delta y = (a \theta^{-1} a^t)^{-1}({infeas}_c - a \rho)
\theta, \rho, \delta y, \delta x, and \delta s are calculated in that order. The hardest term is the factorization of the (a \theta^{-1} a^t) matrix to determine \delta y. Fortunately, although the values of (a \theta^{-1} a^t) are different for each iteration, the locations of the nonzeros in this matrix remain fixed; the nonzero locations are the same as those in the matrix  (a a^t). This is because \theta^{-1} = x s^{-1} is a diagonal matrix that has the effect of merely scaling the columns of  (a a^t).

The fact that the nonzeros in a \theta^{-1} a^t have a constant pattern is exploited by all interior point algorithms and is a major reason for their excellent performance. Before iterations begin,  a a^t is examined and its rows and columns are symmetrically permuted so that during Cholesky factorization, the number of fill-ins created is smaller. A list of arithmetic operations to perform the factorization is saved in concise computer data structures (working with memory locations rather than actual numerical values). This is called symbolic factorization. During iterations, when memory has been initialized with numerical values, the operations list is performed sequentially. Determining how the factorization should be performed again and again is unnecessary.

The Primal-Dual Predictor-Corrector Interior Point Algorithm

The variant of the interior point algorithm implemented in PROC INTPOINT is a Primal-Dual Predictor-Corrector interior point algorithm. At first, Newton's method is used to find a direction (\delta x^k_{aff}, \delta y^k_{aff}, \delta s^k_{aff}) to move, but calculated as if \mu is zero, that is, as a step with no centering, known as an affine step:

a \delta x^k_{aff} = {infeas}_c
a^t \delta y^k_{aff} + \delta s^k_{aff} = {infeas}_d
s^k \delta x^k_{aff} + x^k \delta s^k_{aff} = - x^k s^k e
(x^k_{aff}, y^k_{aff}, s^k_{aff}) = (x^k, y^k, s^k) + \alpha   (\delta x^k_{aff}, \delta y^k_{aff}, \delta s^k_{aff})
where \alpha is the step length as before.

Complementarity  x^t s is calculated at  (x^k_{aff}, y^k_{aff},   s^k_{aff}) and compared with the complementarity at the starting point  (x^k, y^k, s^k), and the success of the affine step is gauged. If the affine step was successful in reducing the complementarity by a substantial amount, the need for centering is not great, and \sigma_k in the following linear system is assigned a value close to zero. If, however, the affine step was unsuccessful, centering would be beneficial, and \sigma_k in the following linear system is assigned a value closer to 1.0. The value of \sigma_k is therefore adaptively altered depending on the progress made toward the optimum.

A second linear system is solved to determine a centering vector (\delta x^k_{c}, \delta y^k_{c}, \delta s^k_{c}) from  (x^k_{aff}, y^k_{aff},   s^k_{aff}):

a \delta x^k_{c} = 0
a^t \delta y^k_{c} + \delta s^k_{c} = 0
s^k \delta x^k_{c} + x^k \delta s^k_{c} = - x^k_{aff} s^k_{aff} e + \sigma_k \mu_k e
Then
(\delta x^k, \delta y^k, \delta s^k) = (\delta x^k_{aff}, \delta y^k_{aff}, \delta s^k_{aff}) + (\delta x^k_{c}, \delta y^k_{c}, \delta s^k_{c})

(x^{k+1}, y^{k+1}, s^{k+1}) = (x^k, y^k, s^k) + \alpha   (\delta x^k, \delta y^k, \delta s^k)
where, as before, \alpha is the step length assigned a value as large as possible but not so large that an  x^{k+1}_i or  s^{k+1}_i is "too close" to zero.

Although the Predictor-Corrector variant entails solving two linear systems instead of one, fewer iterations are usually required to reach the optimum. The additional overhead of calculating the second linear system is small, as the factorization of the (a \theta^{-1} a^t) matrix has already been performed to solve the first linear system.

Interior Point: Upper Bounds

If the LP had upper bounds (0 \leq x \leq u where  u is the upper bound vector), then the primal and dual problems, the duality gap, and the KKT conditions would have to be expanded.

The primal linear program to be solved is

{\rm minimize} & c^t x \   {\rm subjectto} & a x = b \    & 0 \leq x \leq u \

where 0 \leq x \leq u is split into x \geq 0 and x \leq u. Let  z be primal slack so that  x + z = u, and associate dual variables  w with these constraints. The interior point algorithm solves the system of equations to satisfy the Karush-Kuhn-Tucker (KKT) conditions for optimality:

 a x = b
 x + z = u
 a^t y + s - w = c
 x s e = 0
 z w e = 0
 x,s,z,w \geq 0

These are the conditions for feasibility, with the complementarity conditions  x s e = 0 and  z w e = 0 added. Complementarity forces the optimal objectives of the primal and dual to be equal,  c^t x_{opt} = b^t y_{opt} - u^t w_{opt}, as

 0 = z^t_{opt} w_{opt} = (u - x_{opt})^t w_{opt} = u^t w_{opt} - x^t_{opt} w_{opt}

 0 = x^t_{opt} s_{opt} = s^t_{opt} x_{opt} = (c - a^t y_{opt} + w_{opt})^t x_{op...   ..._{opt} (a x_{opt}) + w_{opt})^t x_{opt}= c^t x_{opt} - b^t y_{opt} + u^t w_{opt}

Before the optimum is reached, a solution  (x, y, s, z, w) might not satisfy the KKT conditions:

The calculations of the interior point algorithm can easily be derived in a fashion similar to calculations for when an LP has no upper bounds. See the paper by Lustig, Marsten, and Shanno (1992).

In some iteration  k, the affine step system that must be solved is

\delta x_{aff} + \delta z_{aff} = {infeas}_b
a \delta x_{aff} = {infeas}_c
a^t \delta y_{aff} + \delta s_{aff} - \delta w_{aff} = {infeas}_d
s \delta x_{aff} + x \delta s_{aff} = - x s e
z \delta w_{aff} + w \delta z_{aff} = - z w e

Therefore, the computations involved in solving the affine step are

\theta=s x^{-1} + w z^{-1}
\rho = \theta^{-1} ({infeas}_d + (s-w)e - z^{-1} w \: {infeas}_b)
\delta y_{aff} = (a \theta^{-1} a^t)^{-1} ({infeas}_c + a \rho)
\delta x_{aff} = \theta^{-1} a^t \delta y_{aff} - \rho
\delta z_{aff} = {infeas}_b - \delta x_{aff}
\delta w_{aff} = -we - z^{-1} w \delta z_{aff}
\delta s_{aff} = -se - x^{-1} s \delta x_{aff}

(x_{aff}, y_{aff}, s_{aff}, z_{aff}, w_{aff}) = (x, y, s, z, w) +   \alpha (\delta x_{aff}, \delta y_{aff}, \delta s_{aff}, \delta z_{aff}, \delta w_{aff})
and \alpha is the step length as before.

A second linear system is solved to determine a centering vector (\delta x_c, \delta y_c, \delta s_c, \delta z_c, \delta w_c) from  (x_{aff}, y_{aff}, s_{aff}, z_{aff}, w_{aff}):

\delta x_c + \delta z_c = 0
a \delta x_c = 0
a^t \delta y_c + \delta s_c - \delta w_c = 0
s \delta x_c + x \delta s_c = - x_{aff} s_{aff} e + \sigma \mu e
z \delta w_c + w \delta z_c = - z_{aff} w_{aff} e + \sigma \mu e
where
\zeta_{start} = x^t s + z^t w, complementarity at the start of the iteration
\zeta_{aff} = x_{aff}^t s_{aff} + z_{aff}^t w_{aff}, the affine complementarity
\mu = \zeta_{aff} / 2n, the average complementarity
\sigma = (\zeta_{aff} / \zeta_{start})^3

Therefore, the computations involved in solving the centering step are

\rho=\theta^{-1} (\sigma \mu (x^{-1} - z^{-1}) e - x^{-1}   x_{aff} s_{aff} e + z^{-1} z_{aff} w_{aff} e)
\delta y_c = (a \theta^{-1} a^t)^{-1} a \rho
\delta x_c = \theta^{-1} a^t \delta y_c - \rho
\delta z_c = -\delta x_c
\delta w_c = \sigma \mu z^{-1} e - z^{-1} z_{aff} w_{aff} e - z^{-1} w_{aff} \delta z_c
\delta s_c = \sigma \mu x^{-1} e - x^{-1} x_{aff} s_{aff} e - x^{-1} s_{aff} \delta x_c
Then

(\delta x, \delta y, \delta s, \delta z, \delta w) =   (\delta x_{aff}, \delta y_...   ...{aff}) +   (\delta x_{c}, \delta y_{c}, \delta s_{c}, \delta z_{c}, \delta w_{c})
(x^{k+1}, y^{k+1}, s^{k+1}, z^{k+1}, w^{k+1}) =   (x^k, y^k, s^k, z^k, w^k) +   \alpha (\delta x, \delta y, \delta s, \delta z, \delta w)
where, as before, \alpha is the step length assigned a value as large as possible but not so large that an  x^{k+1}_i,  s^{k+1}_i,  z^{k+1}_i, or  w^{k+1}_i is "too close" to zero.

The algebra in this section has been simplified by assuming that all variables have finite upper bounds. If the number of variables with finite upper bounds  n_u \lt n, you need to change the algebra to reflect that the  z and  w matrices have dimension  n_u x 1 or  n_u x n_u. Other computations need slight modification. For example, the average complementarity is

\mu = x_{aff}^t s_{aff} / n + z_{aff}^t w_{aff} / n_u

An important point is that any upper bounds can be handled by specializing the algorithm and not by generating the constraints x \leq u and adding these to the main primal constraints  a x = b.

Previous Page | Next Page | Top of Page