Linear complementarity problem
In mathematical optimization theory, the linear complementarity problem (LCP) arises frequently in computational mechanics and encompasses the well-known quadratic programming as a special case. It was proposed by Cottle and Dantzig in 1968.[1][2][3]
Contents
Formulation
Given a real matrix M and vector q, the linear complementarity problem LCP(M,q) seeks vectors z and w which satisfy the following constraints:
(that is, each component of these two vectors is non-negative)
or equivalently
. This is the complementarity condition, since it implies that at most one of each pair
can be positive.
A sufficient condition for existence and uniqueness of a solution to this problem is that M be symmetric positive-definite. If M is such that LCP(M,q) have a solution for every q, then M is a Q-matrix. If M is such that LCP(M,q) have a unique solution for every q, then M is a P-matrix. Both of these characterizations are sufficient and necessary.[4]
The vector is a slack variable,[5] and so is generally discarded after
is found. As such, the problem can also be formulated as:
(the complementarity condition)
Convex quadratic-minimization: Minimum conditions
Finding a solution to the linear complementarity problem is associated with minimizing the quadratic function
subject to the constraints
These constraints ensure that f is always non-negative. The minimum of f is 0 at z if and only if z solves the linear complementarity problem.
If M is positive definite, any algorithm for solving (strictly) convex QPs can solve the LCP. Specially designed basis-exchange pivoting algorithms, such as Lemke's algorithm and a variant of the simplex algorithm of Dantzig have been used for decades. Besides having polynomial time complexity, interior-point methods are also effective in practice.
Also, a quadratic-programming problem stated as minimize subject to
as well as
with Q symmetric
is the same as solving the LCP with
This is because the Karush–Kuhn–Tucker conditions of the QP problem can be written as:
...being the Lagrange multipliers on the non-negativity constraints,
the multipliers on the inequality constraints, and
the slack variables for the inequality constraints. The fourth condition derives from the complementarity of each group of variables (
) with its set of KKT vectors (optimal Lagrange multipliers) being (
).
In that case,
If the non-negativity constraint on the is relaxed, the dimensionality of the LCP problem can be reduced to the number of the inequalities, as long as
is non-singular (which is guaranteed if it is positive definite). The multipliers
are no longer present, and the first KKT conditions can be rewritten as:
or:
pre-multiplying the two sides by and subtracting
we obtain:
The left side, due to the second KKT condition, is . Substituting and reordering:
Calling now and
we have an LCP, due to the relation of complementarity between the slack variables
and their Lagrange multipliers
. Once we solve it, we may obtain the value of
from
through the first KKT condition.
Finally, it is also possible to handle additional equality constraints:
This introduces a vector of Lagrange multipliers , with the same dimension as
.
It is easy to verify that the and
for the LCP system
are now expressed as:
From we can now recover the values of both
and the Lagrange multiplier of equalities
:
In fact, most QP solvers work on the LCP formulation, including the interior point method, principal / complementarity pivoting, and active set methods.[1][2] LCP problems can be solved also by the criss-cross algorithm,[6][7][8][9] conversely, for linear complementarity problems, the criss-cross algorithm terminates finitely only if the matrix is a sufficient matrix.[8][9] A sufficient matrix is a generalization both of a positive-definite matrix and of a P-matrix, whose principal minors are each positive.[8][9][10] Such LCPs can be solved when they are formulated abstractly using oriented-matroid theory.[11][12][13]
See also
- Complementarity theory
- Physics engine Impulse/constraint type physics engines for games use this approach.
- Contact dynamics Contact dynamics with the nonsmooth approach.
- Bimatrix games can be reduced to a LCP.
Notes
<templatestyles src="Reflist/styles.css" />
Cite error: Invalid <references>
tag; parameter "group" is allowed only.
<references />
, or <references group="..." />
References
- Lua error in package.lua at line 80: module 'strict' not found.
- Lua error in package.lua at line 80: module 'strict' not found.
- Lua error in package.lua at line 80: module 'strict' not found.
- Lua error in package.lua at line 80: module 'strict' not found.
- Lua error in package.lua at line 80: module 'strict' not found.
- Lua error in package.lua at line 80: module 'strict' not found.
- Lua error in package.lua at line 80: module 'strict' not found.
- Lua error in package.lua at line 80: module 'strict' not found.
- Lua error in package.lua at line 80: module 'strict' not found.
Further reading
- R. W. Cottle and G. B. Dantzig. Complementary pivot theory of mathematical programming. Linear Algebra and its Applications, 1:103-125, 1968.
- Lua error in package.lua at line 80: module 'strict' not found.
External links
- LCPSolve — A simple procedure in GAUSS to solve a linear complementarity problem
- LCPSolve.py — A Python/NumPy implementation of LCPSolve is part of OpenOpt since its release 0.32
- Siconos/Numerics open-source GPL implementation in C of Lemke's algorithm and other methods to solve LCPs and MLCPs
Template:Mathematical programming
- ↑ 1.0 1.1 Murty (1988)
- ↑ 2.0 2.1 Cottle, Pang & Stone (1992)
- ↑ R. W. Cottle and G. B. Dantzig. Complementary pivot theory of mathematical programming. Linear Algebra and its Applications, 1:103-125, 1968.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found..
- ↑ Fukuda & Namiki (1994)
- ↑ Fukuda & Terlaky (1997)
- ↑ 8.0 8.1 8.2 Lua error in package.lua at line 80: module 'strict' not found.
- ↑ 9.0 9.1 9.2 Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Todd (1985)
- ↑ Terlaky & Zhang (1993): Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.