Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

quadprog

La programación cuadrática

Descripción

Solver para funciones objetivas cuadráticas con restricciones lineales.

encuentra un mínimo para un problema especificado porquadprog

minx12xTHx+fTx such that {Axb,Aeqx=beq,lbxub.

, y son matrices, y,,,, y son vectores.HAAeqfbbeqlbubx

Puede pasar, y como vectores o matrices; Ver.flbubArgumentos de matriz

Nota

quadprog solo se aplica al enfoque basado en el solucionador. Para ver una explicación de los dos enfoques de optimización, consulte.Elija primero el enfoque basado en problemas o basado en Solver

x = quadprog(H,f) Devuelve un vector que se minimiza.x1/2*x'*H*x + f'*x La entrada debe ser positiva definida para que el problema tenga un mínimo finito.H Si es positivo definitivo, entonces la solución.Hx = H\(-f)

ejemplo

x = quadprog(H,f,A,b) minimiza sujeto a las restricciones ≤.1/2*x'*H*x + f'*xA*x  b La entrada es una matriz de dobles, y es un vector de dobles.Ab

ejemplo

x = quadprog(H,f,A,b,Aeq,beq) resuelve el problema anterior sujeto a las restricciones adicionales. es una matriz de dobles, y es un vector de dobles.Aeq*x = beqAeqbeq Si no existen desigualdades, establezca y.A = []b = []

ejemplo

x = quadprog(H,f,A,b,Aeq,beq,lb,ub) resuelve el problema anterior sujeto a las restricciones adicionales ≤ ≤.lb  x  ub Las entradas y son vectores de dobles, y la retención de restricciones para cada componente.lbubx Si no existen ecualidades, establezca y.Aeq = []beq = []

Nota

Si los límites de entrada especificados para un problema son incoherentes, la salida es y la salida es.xx0fval[]

restablece los componentes que infringen los límites ≤ ≤ al interior de la caja definida por los límites. no cambia los componentes que respetan los límites.quadprogx0lb  x  ubquadprog

x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0) resuelve el problema anterior a partir del vector.x0 Si no existen límites, establezca y.lb = []ub = [] Algunos algoritmos ignoran; Ver.quadprogx0x0

ejemplo

x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options) resuelve el problema anterior utilizando las opciones de optimización especificadas en.Opciones Se usa para crear.optimoptionsOpciones Si no desea dar un punto inicial, establecer.x0 = []

ejemplo

x = quadprog(problem) Devuelve el mínimo para, donde se describe una estructura.problemproblemDescripción Crear mediante la exportación de un problema mediante la aplicación de optimización; Ver.problemExportar su trabajo Como alternativa, cree una estructura a partir de un objeto mediante.problemOptimizationProblemprob2struct

ejemplo

[x,fval] = quadprog(___), para cualquier variable de entrada, también devuelve, el valor de la función objetivo en:fvalx

fval = 0.5*x'*H*x + f'*x

ejemplo

[x,fval,exitflag,output] = quadprog(___) también devuelve, un entero que describe la condición de salida de, y, una estructura que contiene información sobre la optimización.exitflagquadprogoutput

ejemplo

[x,fval,exitflag,output,lambda] = quadprog(___) también devuelve una estructura cuyos campos contienen los multiplicadores de Lagrange en la solución.lambdax

Ejemplos

contraer todo

Encuentre el mínimo de

<math display="block">
<mrow>
<mi>f</mi>
<mo stretchy="false">(</mo>
<mi>x</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mfrac>
<mrow>
<mn>1</mn>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</mfrac>
<msubsup>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>1</mn>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msubsup>
<mo>+</mo>
<msubsup>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msubsup>
<mo>-</mo>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>1</mn>
</mrow>
</msub>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msub>
<mo>-</mo>
<mn>2</mn>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>1</mn>
</mrow>
</msub>
<mo>-</mo>
<mn>6</mn>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msub>
</mrow>
</math>

sujeta a las restricciones

<math display="block">
<mrow>
<mtable columnalign="left">
<mtr>
<mtd>
<mrow>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>1</mn>
</mrow>
</msub>
<mo>+</mo>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msub>
<mo></mo>
<mn>2</mn>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<mo>-</mo>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>1</mn>
</mrow>
</msub>
<mo>+</mo>
<mn>2</mn>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msub>
<mo></mo>
<mn>2</mn>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<mn>2</mn>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>1</mn>
</mrow>
</msub>
<mo>+</mo>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msub>
<mo></mo>
<mn>3</mn>
<mo>.</mo>
</mrow>
</mtd>
</mtr>
</mtable>
</mrow>
</math>

En la sintaxis, este problema es minimizarquadprog

<math display="block">
<mrow>
<mi>f</mi>
<mo stretchy="false">(</mo>
<mi>x</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mfrac>
<mrow>
<mn>1</mn>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</mfrac>
<msup>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mi>T</mi>
</mrow>
</msup>
<mi>H</mi>
<mi>x</mi>
<mo>+</mo>
<msup>
<mrow>
<mi>f</mi>
</mrow>
<mrow>
<mi>T</mi>
</mrow>
</msup>
<mi>x</mi>
</mrow>
</math>
,

Dónde

<math display="block">
<mrow>
<mtable columnalign="left">
<mtr>
<mtd>
<mrow>
<mi mathvariant="italic">H</mi>
<mo>=</mo>
<mrow>
<mo>[</mo>
<mtable>
<mtr>
<mtd>
<mrow>
<mn>1</mn>
</mrow>
</mtd>
<mtd>
<mrow>
<mo>-</mo>
<mn>1</mn>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<mo>-</mo>
<mn>1</mn>
</mrow>
</mtd>
<mtd>
<mrow>
<mn>2</mn>
</mrow>
</mtd>
</mtr>
</mtable>
<mo>]</mo>
</mrow>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<mi mathvariant="italic">f</mi>
<mo>=</mo>
<mrow>
<mo>[</mo>
<mtable>
<mtr>
<mtd>
<mrow>
<mo>-</mo>
<mn>2</mn>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<mo>-</mo>
<mn>6</mn>
</mrow>
</mtd>
</mtr>
</mtable>
<mo>]</mo>
</mrow>
<mo>,</mo>
</mrow>
</mtd>
</mtr>
</mtable>
</mrow>
</math>

sujeta a las restricciones lineales.

Para resolver este problema, introduzca primero las matrices de coeficiente.

H = [1 -1; -1 2];  f = [-2; -6]; A = [1 1; -1 2; 2 1]; b = [2; 2; 3];

Llamar.quadprog

[x,fval,exitflag,output,lambda] = ...    quadprog(H,f,A,b);
Minimum found that satisfies the constraints.  Optimization completed because the objective function is non-decreasing in  feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance. 

Examine el punto final, el valor de la función y la marca de salida.

x,fval,exitflag
x = 2×1

    0.6667
    1.3333

fval = -8.2222 
exitflag = 1 

Un indicador de salida significa que el resultado es un mínimo local.1 Debido a que es una matriz definida positiva, este problema es convexo, por lo que el mínimo es un mínimo global.H

Confirme que es positivo definitivo comprobando sus valores propios.H

eig(H)
ans = 2×1

    0.3820
    2.6180

Encuentre el mínimo de

<math display="block">
<mrow>
<mi>f</mi>
<mo stretchy="false">(</mo>
<mi>x</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mfrac>
<mrow>
<mn>1</mn>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</mfrac>
<msubsup>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>1</mn>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msubsup>
<mo>+</mo>
<msubsup>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msubsup>
<mo>-</mo>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>1</mn>
</mrow>
</msub>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msub>
<mo>-</mo>
<mn>2</mn>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>1</mn>
</mrow>
</msub>
<mo>-</mo>
<mn>6</mn>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msub>
</mrow>
</math>

sujeta a la restricción

<math display="block">
<mrow>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>1</mn>
</mrow>
</msub>
<mo>+</mo>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msub>
<mo>=</mo>
<mn>0</mn>
<mo>.</mo>
</mrow>
</math>

En la sintaxis, este problema es minimizarquadprog

<math display="block">
<mrow>
<mi>f</mi>
<mo stretchy="false">(</mo>
<mi>x</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mfrac>
<mrow>
<mn>1</mn>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</mfrac>
<msup>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mi>T</mi>
</mrow>
</msup>
<mi>H</mi>
<mi>x</mi>
<mo>+</mo>
<msup>
<mrow>
<mi>f</mi>
</mrow>
<mrow>
<mi>T</mi>
</mrow>
</msup>
<mi>x</mi>
</mrow>
</math>
,

Dónde

<math display="block">
<mrow>
<mtable columnalign="left">
<mtr>
<mtd>
<mrow>
<mi mathvariant="italic">H</mi>
<mo>=</mo>
<mrow>
<mo>[</mo>
<mtable>
<mtr>
<mtd>
<mrow>
<mn>1</mn>
</mrow>
</mtd>
<mtd>
<mrow>
<mo>-</mo>
<mn>1</mn>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<mo>-</mo>
<mn>1</mn>
</mrow>
</mtd>
<mtd>
<mrow>
<mn>2</mn>
</mrow>
</mtd>
</mtr>
</mtable>
<mo>]</mo>
</mrow>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<mi mathvariant="italic">f</mi>
<mo>=</mo>
<mrow>
<mo>[</mo>
<mtable>
<mtr>
<mtd>
<mrow>
<mo>-</mo>
<mn>2</mn>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<mo>-</mo>
<mn>6</mn>
</mrow>
</mtd>
</mtr>
</mtable>
<mo>]</mo>
</mrow>
<mo>,</mo>
</mrow>
</mtd>
</mtr>
</mtable>
</mrow>
</math>

sujeta a la restricción lineal.

Para resolver este problema, introduzca primero las matrices de coeficiente.

H = [1 -1; -1 2];  f = [-2; -6]; Aeq = [1 1]; beq = 0;

Llamada, entrando para las entradas y.quadprog[]Ab

[x,fval,exitflag,output,lambda] = ...    quadprog(H,f,[],[],Aeq,beq);
Minimum found that satisfies the constraints.  Optimization completed because the objective function is non-decreasing in  feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance. 

Examine el punto final, el valor de la función y la marca de salida.

x,fval,exitflag
x = 2×1

   -0.8000
    0.8000

fval = -1.6000 
exitflag = 1 

Un indicador de salida significa que el resultado es un mínimo local.1 Debido a que es una matriz definida positiva, este problema es convexo, por lo que el mínimo es un mínimo global.H

Confirme que es positivo definitivo comprobando sus valores propios.H

eig(H)
ans = 2×1

    0.3820
    2.6180

Encuentra el que minimiza la expresión cuadráticax

<math display="block">
<mrow>
<mfrac>
<mrow>
<mn>1</mn>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</mfrac>
<msup>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mi>T</mi>
</mrow>
</msup>
<mi>H</mi>
<mi>x</mi>
<mo>+</mo>
<msup>
<mrow>
<mi>f</mi>
</mrow>
<mrow>
<mi>T</mi>
</mrow>
</msup>
<mi>x</mi>
</mrow>
</math>

Dónde

<math display="inline">
<mrow>
<mi mathvariant="italic">H</mi>
<mo>=</mo>
<mrow>
<mo>[</mo>
<mtable>
<mtr>
<mtd>
<mrow>
<mn>1</mn>
</mrow>
</mtd>
<mtd>
<mrow>
<mo>-</mo>
<mn>1</mn>
</mrow>
</mtd>
<mtd>
<mrow>
<mn>1</mn>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<mo>-</mo>
<mn>1</mn>
</mrow>
</mtd>
<mtd>
<mrow>
<mn>2</mn>
</mrow>
</mtd>
<mtd>
<mrow>
<mo>-</mo>
<mn>2</mn>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<mn>1</mn>
</mrow>
</mtd>
<mtd>
<mrow>
<mo>-</mo>
<mn>2</mn>
</mrow>
</mtd>
<mtd>
<mrow>
<mn>4</mn>
</mrow>
</mtd>
</mtr>
</mtable>
<mo>]</mo>
</mrow>
</mrow>
</math>
,
<math display="inline">
<mrow>
<mi mathvariant="italic">f</mi>
<mo>=</mo>
<mrow>
<mo>[</mo>
<mtable>
<mtr>
<mtd>
<mrow>
<mn>2</mn>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<mo>-</mo>
<mn>3</mn>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<mn>1</mn>
</mrow>
</mtd>
</mtr>
</mtable>
<mo>]</mo>
</mrow>
</mrow>
</math>
,

sujeta a las restricciones

<math display="block">
<mrow>
<mn>0</mn>
<mo></mo>
<mi>x</mi>
<mo></mo>
<mn>1</mn>
</mrow>
</math>
,
<math display="block">
<mrow>
<mo></mo>
<mi>x</mi>
<mo>=</mo>
<mn>1</mn>
<mo>/</mo>
<mn>2</mn>
</mrow>
</math>
.

Para resolver este problema, primero Introduzca los coeficientes.

H = [1,-1,1     -1,2,-2     1,-2,4]; f = [2;-3;1]; lb = zeros(3,1); ub = ones(size(lb)); Aeq = ones(1,3); beq = 1/2;

Llamada, entrando para las entradas y.quadprog[]Ab

x = quadprog(H,f,[],[],Aeq,beq,lb,ub)
Minimum found that satisfies the constraints.  Optimization completed because the objective function is non-decreasing in  feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance. 
x = 3×1

    0.0000
    0.5000
    0.0000

Configure las opciones para monitorear el progreso de.quadprog

options = optimoptions('quadprog','Display','iter');

Definir un problema con un objetivo cuadrático y restricciones de desigualdad lineales.

H = [1 -1; -1 2];  f = [-2; -6]; A = [1 1; -1 2; 2 1]; b = [2; 2; 3];

Para ayudar a escribir la llamada de función, establezca las entradas innecesarias.quadprog[]

Aeq = []; beq = []; lb = []; ub = []; x0 = [];

Llame para resolver el problema.quadprog

x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options)
 Iter            Fval  Primal Infeas    Dual Infeas  Complementarity       0   -8.884885e+00   3.214286e+00   1.071429e-01     1.000000e+00       1   -8.331868e+00   1.321041e-01   4.403472e-03     1.910489e-01       2   -8.212804e+00   1.676295e-03   5.587652e-05     1.009601e-02       3   -8.222204e+00   8.381476e-07   2.793826e-08     1.809485e-05       4   -8.222222e+00   3.019807e-14   1.352696e-12     7.525735e-13    Minimum found that satisfies the constraints.  Optimization completed because the objective function is non-decreasing in  feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance. 
x = 2×1

    0.6667
    1.3333

Cree una estructura utilizando un.problemFlujo de trabajo basado en problemas Cree un problema de optimización equivalente a.Programa cuadrático con restricciones lineales

x = optimvar('x',2); objec = x(1)^2/2 + x(2)^2 - x(1)*x(2) - 2*x(1) - 6*x(2); prob = optimproblem('Objective',objec); prob.Constraints.cons1 = sum(x) <= 2; prob.Constraints.cons2 = -x(1) + 2*x(2) <= 2; prob.Constraints.cons3 = 2*x(1) + x(2) <= 3;

Convertir a una estructura.probproblem

problem = prob2struct(prob);

Resuelve el problema usando.quadprog

[x,fval] = quadprog(problem)
Warning: Your Hessian is not symmetric. Resetting H=(H+H')/2. 
Minimum found that satisfies the constraints.  Optimization completed because the objective function is non-decreasing in  feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance. 
x = 2×1

    0.6667
    1.3333

fval = -8.2222 

Resuelve un programa cuadrático y devuelve tanto la solución como el valor de la función objetiva.

H = [1,-1,1     -1,2,-2     1,-2,4]; f = [-7;-12;-15]; A = [1,1,1]; b = 3; [x,fval] = quadprog(H,f,A,b)
Minimum found that satisfies the constraints.  Optimization completed because the objective function is non-decreasing in  feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance. 
x = 3×1

   -3.5714
    2.9286
    3.6429

fval = -47.1786 

Compruebe que el valor de la función objetiva devuelta coincida con el valor calculado a partir de la definición de función objetiva.quadprog

fval2 = 1/2*x'*H*x + f'*x
fval2 = -47.1786 

Para ver el proceso de optimización, configure las opciones para mostrar una pantalla iterativa y devuelva cuatro salidas.quadprog El problema es minimizar

<math display="block">
<mrow>
<mfrac>
<mrow>
<mn>1</mn>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</mfrac>
<msup>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mi>T</mi>
</mrow>
</msup>
<mi>H</mi>
<mi>x</mi>
<mo>+</mo>
<msup>
<mrow>
<mi>f</mi>
</mrow>
<mrow>
<mi>T</mi>
</mrow>
</msup>
<mi>x</mi>
</mrow>
</math>

sujetas a

<math display="block">
<mrow>
<mn>0</mn>
<mo></mo>
<mi>x</mi>
<mo></mo>
<mn>1</mn>
</mrow>
</math>
,

Dónde

<math display="inline">
<mrow>
<mi mathvariant="italic">H</mi>
<mo>=</mo>
<mrow>
<mo>[</mo>
<mtable>
<mtr>
<mtd>
<mrow>
<mn>2</mn>
</mrow>
</mtd>
<mtd>
<mrow>
<mn>1</mn>
</mrow>
</mtd>
<mtd>
<mrow>
<mo>-</mo>
<mn>1</mn>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<mn>1</mn>
</mrow>
</mtd>
<mtd>
<mrow>
<mn>3</mn>
</mrow>
</mtd>
<mtd>
<mrow>
<mfrac>
<mrow>
<mn>1</mn>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</mfrac>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<mo>-</mo>
<mn>1</mn>
</mrow>
</mtd>
<mtd>
<mrow>
<mfrac>
<mrow>
<mn>1</mn>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</mfrac>
</mrow>
</mtd>
<mtd>
<mrow>
<mn>5</mn>
</mrow>
</mtd>
</mtr>
</mtable>
<mo>]</mo>
</mrow>
</mrow>
</math>
,
<math display="inline">
<mrow>
<mi mathvariant="italic">f</mi>
<mo>=</mo>
<mrow>
<mo>[</mo>
<mtable>
<mtr>
<mtd>
<mrow>
<mn>4</mn>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<mo>-</mo>
<mn>7</mn>
</mrow>
</mtd>
</mtr>
<mtr>
<mtd>
<mrow>
<mn>12</mn>
</mrow>
</mtd>
</mtr>
</mtable>
<mo>]</mo>
</mrow>
</mrow>
</math>
.

Introduzca los coeficientes del problema.

H = [2 1 -1     1 3 1/2     -1 1/2 5]; f = [4;-7;12]; lb = zeros(3,1); ub = ones(3,1);

Establezca las opciones para mostrar el progreso iterativo del solucionador.

options = optimoptions('quadprog','Display','iter');

Llamada con cuatro salidas.quadprog

[x fval,exitflag,output] = quadprog(H,f,[],[],[],[],lb,ub,[],options)
 Iter            Fval  Primal Infeas    Dual Infeas  Complementarity       0    2.691769e+01   1.582123e+00   1.712849e+01     1.680447e+00       1   -3.889430e+00   0.000000e+00   8.564246e-03     9.971731e-01       2   -5.451769e+00   0.000000e+00   4.282123e-06     2.710131e-02       3   -5.499997e+00   0.000000e+00   1.221903e-10     6.939689e-07       4   -5.500000e+00   0.000000e+00   5.842173e-14     3.469847e-10    Minimum found that satisfies the constraints.  Optimization completed because the objective function is non-decreasing in  feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance. 
x = 3×1

    0.0000
    1.0000
    0.0000

fval = -5.5000 
exitflag = 1 
output = struct with fields:
            message: '...'
          algorithm: 'interior-point-convex'
      firstorderopt: 1.5921e-09
    constrviolation: 0
         iterations: 4
       linearsolver: 'dense'
       cgiterations: []

Resuelve un problema de programación cuadrática y devuelve los multiplicadores de Lagrange.

H = [1,-1,1     -1,2,-2     1,-2,4]; f = [-7;-12;-15]; A = [1,1,1]; b = 3; lb = zeros(3,1); [x,fval,exitflag,output,lambda] = quadprog(H,f,A,b,[],[],lb);
Minimum found that satisfies the constraints.  Optimization completed because the objective function is non-decreasing in  feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance. 

Examine la estructura del multiplicador de Lagrange.lambda

disp(lambda)
    ineqlin: 12.0000       eqlin: [0x1 double]       lower: [3x1 double]       upper: [3x1 double] 

La restricción de desigualdad lineal tiene un multiplicador de Lagrange asociado.12

Visualice los multiplicadores asociados con el límite inferior.

disp(lambda.lower)
    5.0000     0.0000     0.0000 

Sólo el primer componente de tiene un multiplicador distinto de cero.lambda.lower Esto generalmente significa que sólo el primer componente de está en el límite inferior de cero.x Confirme mostrando los componentes de.x

disp(x)
    0.0000     1.5000     1.5000 

Argumentos de entrada

contraer todo

Término objetivo cuadrático, especificado como una matriz real simétrica. representa el cuadrático de la expresión.H1/2*x'*H*x + f'*x Si no es simétrico, emite una advertencia y utiliza la versión symmetrized en su lugar.Hquadprog(H + H')/2

Si la matriz cuadrática es dispersa, por defecto, el algoritmo utiliza un algoritmo ligeramente diferente que cuando es denso.H'interior-point-convex'H Por lo general, el algoritmo disperso es más rápido en problemas grandes y dispersos, y el algoritmo denso es más rápido en problemas densos o pequeños. Para obtener más información, consulte la descripción de la opción y.LinearSolverAlgoritmointerior-point-convexquadprog

Ejemplo: [2,1;1,3]

Tipos de datos: double

Término objetivo lineal, especificado como un vector real. representa el término lineal en la expresión.f1/2*x'*H*x + f'*x

Ejemplo: [1;3;2]

Tipos de datos: double

Restricciones de desigualdad lineales, especificadas como una matriz real. es un-por-matriz, donde es el número de desigualdades, y es el número de variables (número de elementos en).AMNMNx0 Para problemas grandes, pase como una matriz dispersa.A

codifica las desigualdades linealesAM

,A*x <= b

donde está el vector de columna de variables, y es un vector de columna con elementos.xNx(:)bM

Por ejemplo, para especificar

x1 + 2x2 ≤ 10 3
x1 + 4x2 ≤ 20 5
x1 + 6x2 ≤ 30,

Ingrese estas restricciones:

A = [1,2;3,4;5,6]; b = [10;20;30];

Ejemplo: Para especificar que los componentes x suman 1 o menos, utilice y.A = ones(1,N)b = 1

Tipos de datos: double

Restricciones de desigualdad lineales, especificadas como un vector real. es un vector de elemento relacionado con la matriz.bMA Si se pasa como un vector de fila, los solucionadores se convierten internamente al vector de columna.bbb(:) Para problemas grandes, pase como un vector disperso.b

codifica las desigualdades linealesbM

,A*x <= b

donde está el vector de columna de variables, y es una matriz de tamaño por.xNx(:)AMN

Por ejemplo, para especificar

x1 + 2x2 ≤ 10 3
x1 + 4x2 ≤ 20 5
x1 + 6x2 ≤ 30,

Ingrese estas restricciones:

A = [1,2;3,4;5,6]; b = [10;20;30];

Ejemplo: Para especificar que los componentes x suman 1 o menos, utilice y.A = ones(1,N)b = 1

Tipos de datos: double

Restricciones de igualdad lineales, especificadas como una matriz real. es un-por-matriz, donde es el número de ecualidades, y es el número de variables (número de elementos en).AeqMeNMeNx0 Para problemas grandes, pase como una matriz dispersa.Aeq

codifica las equalidades linealesAeqMe

,Aeq*x = beq

donde está el vector de columna de variables, y es un vector de columna con elementos.xNx(:)beqMe

Por ejemplo, para especificar

x1 + 2x2 + 3x3 = 10 2
x1 + 4x2 +x3 = 20,

Ingrese estas restricciones:

Aeq = [1,2,3;2,4,1]; beq = [10;20];

Ejemplo: Para especificar que los componentes x suman 1, utilice y.Aeq = ones(1,N)beq = 1

Tipos de datos: double

Restricciones de igualdad lineales, especificadas como un vector real. es un vector de elemento relacionado con la matriz.beqMeAeq Si se pasa como un vector de fila, los solucionadores se convierten internamente al vector de columna.beqbeqbeq(:) Para problemas grandes, pase como un vector disperso.beq

codifica las equalidades linealesbeqMe

,Aeq*x = beq

donde está el vector de columna de variables, y es una matriz de tamaño por.xNx(:)AeqMeN

Por ejemplo, para especificar

x1 + 2x2 + 3x3 = 10 2
x1 + 4x2 +x3 = 20,

Ingrese estas restricciones:

Aeq = [1,2,3;2,4,1]; beq = [10;20];

Ejemplo: Para especificar que los componentes x suman 1, utilice y.Aeq = ones(1,N)beq = 1

Tipos de datos: double

Límites inferiores, especificados como un vector real o una matriz real. Si el número de elementos en es igual al número de elementos en, a continuación, especifica quex0lblb

para todos.x(i) >= lb(i)i

Si, a continuación, especifica quenumel(lb) < numel(x0)lb

Para.x(i) >= lb(i)1 <= i <= numel(lb)

Si hay menos elementos en que in, los solucionadores emiten una advertencia.lbx0

Ejemplo: Para especificar que todos los componentes x son positivos, utilice.lb = zeros(size(x0))

Tipos de datos: double

Límites superiores, especificados como un vector real o una matriz real. Si el número de elementos en es igual al número de elementos en, a continuación, especifica quex0ubub

para todos.x(i) <= ub(i)i

Si, a continuación, especifica quenumel(ub) < numel(x0)ub

Para.x(i) <= ub(i)1 <= i <= numel(ub)

Si hay menos elementos en que in, los solucionadores emiten una advertencia.ubx0

Ejemplo: Para especificar que todos los componentes x son inferiores a 1, utilice.ub = ones(size(x0))

Tipos de datos: double

Punto inicial, especificado como un vector real. Esta entrada es opcional. solo se aplica al algoritmo cuando solo hay restricciones enlazadas.x0'trust-region-reflective'

Si no se especifica, se establecen todos los componentes de un punto en el interior del cuadro definido por los límites. omite para el algoritmo y para el algoritmo con restricciones de igualdad.x0quadprogx0quadprogx0'interior-point-convex''trust-region-reflective'

Ejemplo: [1;2;1]

Tipos de datos: double

Opciones de optimización, especificadas como la salida de o una estructura como devoluciones.optimoptionsoptimset

Algunas opciones están ausentes en la pantalla.optimoptions Estas opciones aparecen en cursiva en la tabla siguiente. Para obtener más información, consulte.Ver opciones

Todos los algoritmos

Algorithm

Elija el algoritmo:

  • predeterminado'interior-point-convex'

  • 'trust-region-reflective'

El algoritmo maneja sólo los problemas convexos.'interior-point-convex' El algoritmo controla los problemas con solo los límites o solo las restricciones de igualdad lineales, pero no ambos.'trust-region-reflective' Para obtener más información, consulte.Elegir el algoritmo

Diagnostics

Mostrar información de diagnóstico sobre la función que se debe minimizar o resolver. Las opciones son o (predeterminado).'on''off'

Display

Nivel de visualización (ver):Visualización iterativa

  • o no muestra ninguna salida.'off''none'

  • muestra sólo la salida final (por defecto).'final'

El algoritmo permite valores adicionales:'interior-point-convex'

  • especifica una visualización iterativa.'iter'

  • especifica una visualización iterativa con un mensaje de salida detallado.'iter-detailed'

  • muestra sólo la salida final con un mensaje de salida detallado.'final-detailed'

MaxIterations

Número máximo de iteraciones permitidas; un entero positivo.

  • Para un problema con restricciones de igualdad, el valor predeterminado es.'trust-region-reflective'2*(numberOfVariables - numberOfEqualities)

  • Para todos los demás algoritmos y problemas, el valor predeterminado es.200

Para, el nombre de la opción es.optimsetMaxIter Ver.Las tablas de nombres de opciones actuales y heredadas

OptimalityTolerance

Tolerancia de terminación en la optimalidad de primer orden; un escalar positivo.

  • Para un problema con restricciones de igualdad, el valor predeterminado es.'trust-region-reflective'1e-6

  • Para un problema enlazado-restringido, el valor predeterminado es about.'trust-region-reflective'100*eps2.2204e-14

  • Para los algoritmos, el valor predeterminado es.'interior-point-convex'1e-8

Ver.Tolerancias y criterios de detención

Para, el nombre de la opción es.optimsetTolFun Ver.Las tablas de nombres de opciones actuales y heredadas

StepTolerance

Tolerancia de terminación en; un escalar positivo.x

  • Por el valor predeterminado es, about.'trust-region-reflective'100*eps2.2204e-14

  • Para, el valor predeterminado es.'interior-point-convex'1e-12

Para, el nombre de la opción es.optimsetTolX Ver.Las tablas de nombres de opciones actuales y heredadas

Solo algoritmo'trust-region-reflective'

FunctionTolerance

Tolerancia de terminación en el valor de la función; un escalar positivo. El valor predeterminado depende del tipo de problema: uso de problemas con restricción de límite y uso de problemas lineales de igualdad restringida.100*eps1e-6 Ver.Tolerancias y criterios de detención

Para, el nombre de la opción es.optimsetTolFun Ver.Las tablas de nombres de opciones actuales y heredadas

HessianMultiplyFcn

Función de multiplicación de hessian, especificada como un manejador de funciones. Para problemas estructurados a gran escala, esta función calcula el producto de matriz de Hessian sin formar realmente.H*YH La función tiene la forma

W = hmfun(Hinfo,Y)

donde (y potencialmente algunos parámetros adicionales) contienen las matrices utilizadas para computar.HinfoH*Y

Consulte para obtener un ejemplo que utiliza esta opción.Minimización cuadrática con el hessian denso, estructurado

Para, el nombre de la opción es.optimsetHessMult Ver.Las tablas de nombres de opciones actuales y heredadas

MaxPCGIter

Número máximo de iteraciones PCG (degradado conjugada precondicionada); un escalar positivo. El valor predeterminado es para problemas con restricciones enlazadas.max(1,floor(numberOfVariables/2)) Para los problemas de igualdad restringida, omite y utiliza para limitar el número de iteraciones PCG.quadprogMaxPCGIterMaxIterations Para obtener más información, consulte.Método de gradiente conjugada precondicionado

PrecondBandWidth

Ancho de banda superior del preacondicionador para PCG; un entero no negativo. Por defecto, utiliza el preacondicionamiento diagonal (ancho de banda superior).quadprog0 Para algunos problemas, el aumento del ancho de banda reduce el número de iteraciones PCG. Ajuste a utiliza una factorización directa (Cholesky) en lugar de los degradados conjugados (CG).PrecondBandWidthInf La factorización directa es computacionalmente más costosa que CG, pero produce un mejor paso de calidad hacia la solución.

SubproblemAlgorithm

Determina cómo se calcula el paso de iteración. El valor predeterminado, toma un paso más rápido pero menos preciso que.'cg''factorization' Ver.Algoritmotrust-region-reflectivequadprog

TolPCG

Tolerancia de terminación en la iteración PCG; un escalar positivo. El valor predeterminado es.0.1

TypicalX

Valores típicos.x El número de elementos en es igual al número de elementos en, el punto de partida.TypicalXx0 El valor predeterminado es. utiliza internamente para escalar. tiene un efecto solo cuando tiene componentes sin enlazar y cuando un valor para un componente sin enlazar supera.ones(numberOfVariables,1)quadprogTypicalXTypicalXxTypicalX1

Solo algoritmo'interior-point-convex'

ConstraintTolerance

Tolerancia sobre la infracción de restricción; un escalar positivo. El valor predeterminado es.1e-8

Para, el nombre de la opción es.optimsetTolCon Ver.Las tablas de nombres de opciones actuales y heredadas

LinearSolver

Tipo de solucionador lineal interno en el algoritmo:

  • (valor predeterminado): se usa si la matriz es dispersa y de lo contrario.'auto''sparse'H'dense'

  • — Utilizar álgebra lineal dispersa.'sparse' Ver.Matrices dispersas (MATLAB)

  • — Utilizar álgebra lineal densa.'dense'

Estructura problemática, especificada como estructura con estos campos:

H

Matriz simétrica en1/2*x'*H*x

f

Vector en término linealf'*x

Aineq

Matriz en las restricciones de desigualdad lineales ≤Aineq*x  bineq

bineq

Vector en las restricciones de desigualdad lineal ≤Aineq*x  bineq

Aeq

Matriz en las restricciones de igualdad linealAeq*x = beq

beq

Vector en las restricciones de igualdad linealAeq*x = beq
lbVector de los límites inferiores
ubVector de los límites superiores

x0

Punto inicial parax

solver

'quadprog'

Opciones

Las opciones creadas mediante o la aplicación de optimizaciónoptimoptions

Los campos obligatorios son,, y.HfsolverOpciones Al resolver, ignora los campos que no sean los enumerados.quadprogproblem

Tipos de datos: struct

Argumentos de salida

contraer todo

Solución, devuelta como un vector real. es el vector que minimiza el sujeto a todos los límites y restricciones lineales. puede ser un mínimo local para problemas no convexos.x1/2*x'*H*x + f'*xx Para los problemas convexos, es un mínimo global.x Para obtener más información, consulte.Local vs global optima

Valor de la función objetiva en la solución, devuelto como un escalar real. es el valor de la solución.fval1/2*x'*H*x + f'*xx

Motivo detenido, devuelto como un entero que se describe en esta tabla.quadprog

All Algorithms

1

Función convergida a la solución.x

0

Número de iteraciones superada.options.MaxIterations

-2

El problema es inviable. O, para, el tamaño del paso era menor que, pero no se satisfacían las restricciones.'interior-point-convex'options.StepTolerance

-3

El problema es ilimitado.

Algoritmo'interior-point-convex'

2

El tamaño del paso era menor que, se satisfacían las restricciones.options.StepTolerance

-6

Problema no convexo detectado.

-8

No se puede calcular una dirección de paso.

Algoritmo'trust-region-reflective'

4

Mínimo local encontrado; mínimo no es único.

3

El cambio en el valor de la función objetiva era menor que.options.FunctionTolerance

-4

La dirección de búsqueda actual no era una dirección de descenso. No se podrían hacer más progresos.

Información sobre el proceso de optimización, devuelta como una estructura con estos campos:

iterations

Número de iteraciones tomadas

algorithm

Algoritmo de optimización utilizado

cgiterations

Número total de iteraciones PCG (solo algoritmo)'trust-region-reflective'

constrviolation

Máximo de funciones de restricción

firstorderopt

Medida de la optimalidad de primer orden

linearsolver

Tipo de solucionador lineal interno o (solo algoritmo)'dense''sparse''interior-point-convex'

message

Mensaje de salida

Los multiplicadores de Lagrange en la solución, devueltos como una estructura con estos campos:

lower

Los límites inferioreslb

upper

Los límites superioresub

ineqlin

Las desigualdades lineales

eqlin

Las equalidades lineales

Para obtener más información, consulte.Las estructuras multiplicador de Lagrange

Algoritmos

contraer todo

'interior-point-convex'

El algoritmo intenta seguir una ruta que está estrictamente dentro de las restricciones.'interior-point-convex' Utiliza un módulo PRESOLVE para eliminar redundancias y simplificar el problema resolviendo para componentes que son sencillos.

El algoritmo tiene implementaciones diferentes para una matriz de hessian dispersa y para una matriz densa.H En general, la implementación dispersa es más rápida en problemas grandes y dispersos, y la implementación densa es más rápida en problemas densos o pequeños. Para obtener más información, consulte.Algoritmointerior-point-convexquadprog

'trust-region-reflective'

El algoritmo es un método de la región de confianza subespacial basado en el método de Newton interior-reflectante descrito en.'trust-region-reflective'[1] Cada iteración implica la solución aproximada de un gran sistema lineal utilizando el método de gradientes conjugados preacondicionados (PCG). Para obtener más información, consulte.Algoritmotrust-region-reflectivequadprog

Funcionalidad alternativa

Aplicación

Puede utilizar la aplicación de optimización para la programación cuadrática. Escriba en la línea de comando y elija eloptimtoolMATLAB® quadprog - Quadratic programming Solver. Para obtener más información, consulte.Aplicación de optimización

Enfoque basado en problemas

Puede resolver problemas de programación cuadrática utilizando el.Configuración de optimización basada en problemas Para ver ejemplos, vea.Programación cuadrática

Referencias

[1] Coleman, T. F., and Y. Li. “A Reflective Newton Method for Minimizing a Quadratic Function Subject to Bounds on Some of the Variables.” SIAM Journal on Optimization. Vol. 6, Number 4, 1996, pp. 1040–1058.

[2] Gill, P. E., W. Murray, and M. H. Wright. Practical Optimization. London: Academic Press, 1981.

[3] Gould, N., and P. L. Toint. “Preprocessing for quadratic programming.” Mathematical Programming. Series B, Vol. 100, 2004, pp. 95–132.

Introducido antes de R2006a