Solve the quadratic program
min 0.5 x'*H*x + x'*f x
subject to
A*x <= b, Aeq*x = beq, lb <= x <= ub.
The initial guess x0 and the constraint arguments (A and
b, Aeq and beq, lb and ub) can be set to
the empty matrix ([]
) if not given. If the initial guess
x0 is feasible the algorithm is faster.
options can be set with optimset
, currently the only
option is MaxIter
, the maximum number of iterations (default:
200).
Returned values:
Position of minimum.
Value at the minimum.
Status of solution:
0
Maximum number of iterations reached.
-2
The problem is infeasible.
-3
The problem is not convex and unbounded
1
Global solution found.
4
Local solution found.
Structure with additional information, currently the only field is
iterations
, the number of used iterations.
Structure containing Lagrange multipliers corresponding to the constraints. For equality constraints, the sign of the multipliers is chosen to satisfy the equation
0.5 H * x + f + A' * lambda_inequ + Aeq' * lambda_equ = 0 .
If lower and upper bounds are equal, or so close to each other that they are considered equal by the algorithm, only one of these bounds is considered active when computing the solution, and a positive lambda will be placed only at this bound.
This function calls Octave’s __qp__
back-end algorithm internally.
The following code
C = [0.9501 0.7620 0.6153 0.4057 0.2311 0.4564 0.7919 0.9354 0.6068 0.0185 0.9218 0.9169 0.4859 0.8214 0.7382 0.4102 0.8912 0.4447 0.1762 0.8936]; %% Linear Inequality Constraints d = [0.0578; 0.3528; 0.8131; 0.0098; 0.1388]; A =[0.2027 0.2721 0.7467 0.4659 0.1987 0.1988 0.4450 0.4186 0.6037 0.0152 0.9318 0.8462]; b =[0.5251; 0.2026; 0.6721]; %% Linear Equality Constraints Aeq = [3 5 7 9]; beq = 4; %% Bound constraints lb = -0.1*ones(4,1); ub = ones(4,1); H = C' * C; f = -C' * d; [x, obj, flag, output, lambda]=quadprog (H, f, A, b, Aeq, beq, lb, ub)
Produces the following output
x = -0.1000 -0.1000 0.1599 0.4090 obj = -0.3194 flag = 1 output = scalar structure containing the fields: iterations = 3 lambda = scalar structure containing the fields: lower = 0.0674 0.2499 0 0 upper = 0 0 0 0 eqlin = -0.016539 ineqlin = 0 0.4982 0
Package: optim