quadprog (version 1.4-1)

solve.QP: Solve a Quadratic Programming Problem

Description

This routine implements the dual method of Goldfarb and Idnani (1982, 1983) for solving quadratic programming problems.

Usage

solve.QP        (Dmat, dvec, Amat,       bvec, meq=0, factorized=FALSE)
solve.QP.compact(Dmat, dvec, Amat, Aind, bvec, meq=0, factorized=FALSE)

Arguments

Dmat
matrix appearing in the quadratic function to be minimized.
dvec
vector appearing in the quadratic function to be minimized.
Amat
For solve.QP(): matrix defining the constraints under which we want to minimize the quadratic function.

For solve.QP.compact(): matrix containing the non-zero elements of the matrix A that defines the constraints. I

Aind
matrix of integers. The first element of each column gives the number of non-zero elements in the corresponding column of the matrix A. The following entries in each column contain the indexes of the rows in which these non-zero elements are
bvec
vector holding the values of b0 (defaults to zero).
meq
the first meq constraints are treated as equality constraints, all further as inequality constraints (defaults to 0).
factorized
logical flag: if TRUE, then we are passing $R^{-1}$ (where D = $R^T R$) instead of the matrix D in the argument Dmat.

Value

  • a list with the following components:
  • solutionvector containing the solution of the quadratic programming problem.
  • valuescalar, the value of the quadratic function at the solution.

item

  • unconstrained.solution
  • iterations

References

Goldfarb, D. and Idnani, A. (1982). Dual and Primal-Dual Methods for Solving Strictly Convex Quadratic Programs. In Numerical Analysis J.P. Hennart, ed. Springer-Verlag, Berlin. pp. 226-239.

Goldfarb, D. and Idnani, A. (1983). A numerically stable dual method for solving strictly convex quadratic programs. Mathematical Programming 27, 1-33.

See Also

Matrix Inversion with solve.

Examples

Run this code
# Assume we want to minimize: -(0 5 0) \%*\% b + 1/2 b^T b
# under the constraints:      A^T b >= b0
# with b0 = (-8,2,0)^T
# and      (-4  2  0)
#      A = (-3  1 -2)
#          ( 0  0  1)
# we can use solve.QP as follows:
#
Dmat       <- matrix(0,3,3)
diag(Dmat) <- 1
dvec       <- c(0,5,0)
bvec       <- c(-8,2,0)

Amat0       <- matrix(c(-4,-3,0, 2,1,0, 0,-2,1),3,3)
solve.QP(Dmat,dvec, Amat0, bvec=bvec)

# Now with solve.QP.compact :
#
Aind <- rbind(c(2,2,2),
              c(1,1,2),
              c(2,2,3))
Amat <- rbind(c(-4,2,-2),
              c(-3,1, 1))
solve.QP.compact(Dmat,dvec,Amat,Aind,bvec=bvec)

Run the code above in your browser using DataLab