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.

fmincon

Busque el mínimo de función multivariable no lineal restringida

Descripción

Solucionador de programación no lineal.

Busca el mínimo de un problema especificado por

minxf(x) such that {c(x)0ceq(x)=0AxbAeqx=beqlbxub,

y son vectores, y son matrices, () y () son funciones que devuelven vectores, y () es una función que devuelve un escalar. (), () y () pueden ser funciones no lineales.bbeqAAeqcxceqxfxfxcxceqx

, y se pueden pasar como vectores o matrices; Ver.xlbubArgumentos de matriz

ejemplo

x = fmincon(fun,x0,A,b) comienza e intenta encontrar un minimizador de la función descrita en sujeto a las desigualdades lineales. puede ser un escalar, un vector o una matriz.x0xfunA*x ≤ bx0

Nota

explica cómo pasar parámetros adicionales a la función objetiva y a las funciones de restricción no lineal, si es necesario.Pasar parámetros adicionales

ejemplo

x = fmincon(fun,x0,A,b,Aeq,beq) minimiza sujeto a las equalidades lineales y.funAeq*x = beqA*x ≤ b Si no existen desigualdades, establezca y.A = []b = []

ejemplo

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub) define un conjunto de límites inferior y superior en las variables de diseño, de modo que la solución esté siempre en el rango ≤ ≤.xlb  x  ub Si no existen ecualidades, establezca y.Aeq = []beq = [] Si se deslimita a continuación, se establece, y si se encuentra sin delimitar, se establece.x(i)lb(i) = -Infx(i)ub(i) = Inf

Nota

Si los límites de entrada especificados para un problema son incoherentes, se produce un error.fmincon En este caso, la salida es y es.xx0fval[]

Para el algoritmo predeterminado, establece los componentes de que infringen los límites, o son iguales a un límite, al interior de la región enlazada.'interior-point'fminconx0lb ≤ x ≤ ub Para el algoritmo, establece la infracción de componentes en el interior de la región enlazada.'trust-region-reflective'fmincon Para otros algoritmos, establece la infracción de componentes en el límite más cercano.fmincon Los componentes que respetan los límites no se modifican. Ver.Las iteraciones pueden violar restricciones

ejemplo

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon) somete la minimización a las desigualdades o ecualidades no lineales definidas en. optimiza tal que y.c(x)ceq(x)nonlconfminconc(x) ≤ 0ceq(x) = 0 Si no existen límites, establezca y/o.lb = []ub = []

ejemplo

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) minimiza con las opciones de optimización especificadas en.Opciones Se usa para establecer estas opciones.optimoptions Si no hay ninguna desigualdad no lineal o restricciones de igualdad, establezca.nonlcon = []

ejemplo

x = fmincon(problem) encuentra el mínimo para, donde se describe una estructura.problemproblemArgumentos de entrada Cree la estructura exportando un problema desde la aplicación de optimización, como se describe en.problemExportar su trabajo

ejemplo

[x,fval] = fmincon(___), para cualquier sintaxis, devuelve el valor de la función objetiva en la solución.funx

ejemplo

[x,fval,exitflag,output] = fmincon(___) Además devuelve un valor que describe la condición de salida de, y una estructura con información sobre el proceso de optimización.exitflagfminconoutput

ejemplo

[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(___) Además devuelve:

  • — Estructura con campos que contengan los multiplicadores de Lagrange en la solución.lambdax

  • — Gradiente de la solución.gradfunx

  • — Hessian de la solución.hessianfunx Ver.fmincon hessian

Ejemplos

contraer todo

Encuentra el valor mínimo de la función de Rosenbrock cuando hay una restricción de desigualdad lineal.

Establecer la función objetivo de ser la función de Rosenbrock.fun La función de Rosenbrock es bien conocida por ser difícil de minimizar. Tiene su valor objetivo mínimo de 0 en el punto (1, 1). Para obtener más información, consulte.Resuelva un problema no lineal restringido, basado en Solver

fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;

Encuentre el valor mínimo a partir del punto, restringido para tener[-1,2]

<math display="block">
<mrow>
<mi>x</mi>
<mo stretchy="false">(</mo>
<mn>1</mn>
<mo stretchy="false">)</mo>
<mo>+</mo>
<mn>2</mn>
<mi>x</mi>
<mo stretchy="false">(</mo>
<mn>2</mn>
<mo stretchy="false">)</mo>
<mo></mo>
<mn>1</mn>
</mrow>
</math>
. Exprese esta restricción en el formulario tomando y.Ax <= bA = [1,2]b = 1 Tenga en cuenta que esta restricción significa que la solución no estará en la solución sin restricciones (1, 1), porque en ese momento
<math display="block">
<mrow>
<mi>x</mi>
<mo stretchy="false">(</mo>
<mn>1</mn>
<mo stretchy="false">)</mo>
<mo>+</mo>
<mn>2</mn>
<mi>x</mi>
<mo stretchy="false">(</mo>
<mn>2</mn>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mn>3</mn>
<mo>></mo>
<mn>1</mn>
</mrow>
</math>
.

x0 = [-1,2]; A = [1,2]; b = 1; x = fmincon(fun,x0,A,b)
Local 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 = 1×2

    0.5022    0.2489

Encuentra el valor mínimo de la función de Rosenbrock cuando hay una restricción de desigualdad lineal y una restricción de igualdad lineal.

Establecer la función objetivo de ser la función de Rosenbrock.fun

fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;

Encuentre el valor mínimo a partir del punto, restringido para tener[0.5,0]

<math display="block">
<mrow>
<mi>x</mi>
<mo stretchy="false">(</mo>
<mn>1</mn>
<mo stretchy="false">)</mo>
<mo>+</mo>
<mn>2</mn>
<mi>x</mi>
<mo stretchy="false">(</mo>
<mn>2</mn>
<mo stretchy="false">)</mo>
<mo></mo>
<mn>1</mn>
</mrow>
</math>
Y
<math display="block">
<mrow>
<mn>2</mn>
<mi>x</mi>
<mo stretchy="false">(</mo>
<mn>1</mn>
<mo stretchy="false">)</mo>
<mo>+</mo>
<mi>x</mi>
<mo stretchy="false">(</mo>
<mn>2</mn>
<mo stretchy="false">)</mo>
<mo>=</mo>
<mn>1</mn>
</mrow>
</math>
.

  • Exprese la restricción de desigualdad lineal en el formulario tomando y.A*x <= bA = [1,2]b = 1

  • Exprese la restricción de igualdad lineal en el formulario tomando y.Aeq*x = beqAeq = [2,1]beq = 1

x0 = [0.5,0]; A = [1,2]; b = 1; Aeq = [2,1]; beq = 1; x = fmincon(fun,x0,A,b,Aeq,beq)
Local 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 = 1×2

    0.4149    0.1701

Encuentre el mínimo de una función objetiva en presencia de restricciones enlazadas.

La función objetiva es una simple función algebraica de dos variables.

fun = @(x)1+x(1)/(1+x(2)) - 3*x(1)*x(2) + x(2)*(1+x(1));

Mira en la región donde tiene valores positivos,x x(1) ≤ 1Y x(2) ≤ 2.

lb = [0,0]; ub = [1,2];

No hay restricciones lineales, así que establezca esos argumentos en.[]

A = []; b = []; Aeq = []; beq = [];

Pruebe un punto inicial en el centro de la región. Encuentre el mínimo de, sujeto a las restricciones enlazadas.fun

x0 = [0.5,1]; x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
Local minimum found that satisfies the constraints.  Optimization completed because the objective function is non-decreasing in  feasible directions, to within the default value of the function tolerance, and constraints are satisfied to within the default value of the constraint tolerance.  <stopping criteria details>
x =      1.0000    2.0000

Un punto inicial diferente puede conducir a una solución diferente.

x0 = x0/5; x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
Local minimum found that satisfies the constraints.  Optimization completed because the objective function is non-decreasing in  feasible directions, to within the default value of the function tolerance, and constraints are satisfied to within the default value of the constraint tolerance.  <stopping criteria details>
x =     1.0e-06 *      0.4000    0.4000

Para ver qué solución es mejor, vea.Obtenga el valor de función objetiva

Encuentre el mínimo de una función sujeta a restricciones no lineales

Encuentra el punto donde la función de Rosenbrock se minimiza dentro de un círculo, también sujeto a restricciones enlazadas.

fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2; 

Mira dentro de la región , .

lb = [0,0.2]; ub = [0.5,0.8]; 

También mire dentro del círculo centrado en [1/3, 1/3] con radio 1/3. Copie el código siguiente en un archivo de la ruta de acceso de MATLAB® denominada.circlecon.m

  % Copyright 2015 The MathWorks, Inc.  function [c,ceq] = circlecon(x) c = (x(1)-1/3)^2 + (x(2)-1/3)^2 - (1/3)^2; ceq = [];  

No hay restricciones lineales, así que establezca esos argumentos en.[]

A = []; b = []; Aeq = []; beq = []; 

Elija un punto inicial que satisfaga todas las restricciones.

x0 = [1/4,1/4]; 

Resuelve el problema.

nonlcon = @circlecon; x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon) 
 Local 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 =      0.5000    0.2500  

Configure las opciones para ver las iteraciones a medida que ocurren y para utilizar un algoritmo diferente.

Para observar el proceso de solución, establezca la opción en.fminconDisplay'iter' Además, pruebe el algoritmo, que a veces es más rápido o más preciso que el algoritmo predeterminado.'sqp''interior-point'

options = optimoptions('fmincon','Display','iter','Algorithm','sqp'); 

Encuentre el mínimo de la función de Rosenbrock en el disco de la unidad, . En primer lugar, cree una función que represente la restricción no lineal. Guárdelo como un archivo denominado en su ruta de acceso de MATLAB®.unitdisk.m

 function [c,ceq] = unitdisk(x) c = x(1)^2 + x(2)^2 - 1; ceq = [];  

Cree las especificaciones de problemas restantes. Entonces corre.fmincon

fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2; A = []; b = []; Aeq = []; beq = []; lb = []; ub = []; nonlcon = @unitdisk; x0 = [0,0]; x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) 
 Iter  Func-count            Fval   Feasibility   Step Length       Norm of   First-order                                                                          step    optimality     0           3    1.000000e+00     0.000e+00     1.000e+00     0.000e+00     2.000e+00       1          12    8.913011e-01     0.000e+00     1.176e-01     2.353e-01     1.107e+01       2          22    8.047847e-01     0.000e+00     8.235e-02     1.900e-01     1.330e+01       3          28    4.197517e-01     0.000e+00     3.430e-01     1.217e-01     6.172e+00       4          31    2.733703e-01     0.000e+00     1.000e+00     5.254e-02     5.705e-01       5          34    2.397111e-01     0.000e+00     1.000e+00     7.498e-02     3.164e+00       6          37    2.036002e-01     0.000e+00     1.000e+00     5.960e-02     3.106e+00       7          40    1.164353e-01     0.000e+00     1.000e+00     1.459e-01     1.059e+00       8          43    1.161753e-01     0.000e+00     1.000e+00     1.754e-01     7.383e+00       9          46    5.901600e-02     0.000e+00     1.000e+00     1.547e-02     7.278e-01      10          49    4.533081e-02     2.898e-03     1.000e+00     5.393e-02     1.252e-01      11          52    4.567454e-02     2.225e-06     1.000e+00     1.492e-03     1.679e-03      12          55    4.567481e-02     4.405e-12     1.000e+00     2.095e-06     1.502e-05      13          58    4.567481e-02     2.220e-16     1.000e+00     2.442e-09     1.287e-05    Local minimum possible. Constraints satisfied.  fmincon stopped because the size of the current step is less than the value of the step size tolerance and constraints are  satisfied to within the value of the constraint tolerance.   x =      0.7864    0.6177  

Incluya la evaluación de gradiente en la función objetivo para cálculos más rápidos o más fiables.

Incluya la evaluación de degradado como una salida condicionado en el archivo de función objetiva. Para obtener más información, consulte.Incluyendo gradientes y hessianos La función objetiva es la función de Rosenbrock,

que tiene gradiente

 function [f,g] = rosenbrockwithgrad(x) % Calculate objective f f = 100*(x(2) - x(1)^2)^2 + (1-x(1))^2;  if nargout > 1 % gradient required     g = [-400*(x(2)-x(1)^2)*x(1)-2*(1-x(1));         200*(x(2)-x(1)^2)]; end  

Guarde este código como un archivo denominado en la ruta de acceso de MATLAB®.rosenbrockwithgrad.m

Cree opciones para utilizar el degradado de función objetiva.

options = optimoptions('fmincon','SpecifyObjectiveGradient',true); 

Cree las otras entradas para el problema. Entonces llama.fmincon

fun = @rosenbrockwithgrad; x0 = [-1,2]; A = []; b = []; Aeq = []; beq = []; lb = [-2,-2]; ub = [2,2]; nonlcon = []; x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) 
 Local 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 =      1.0000    1.0000  

Resuelva el mismo problema que en el uso de una estructura problemática en lugar de argumentos separados.Opciones no predeterminadas

Cree las opciones y una estructura problemática. Consulte los nombres de campo y los campos obligatorios.problem

options = optimoptions('fmincon','Display','iter','Algorithm','sqp'); problem.options = options; problem.solver = 'fmincon'; problem.objective = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2; problem.x0 = [0,0];

Cree un archivo de función para la función de restricción no lineal que represente norm(x)2 ≤ 1.

function [c,ceq] = unitdisk(x) c = x(1)^2 + x(2)^2 - 1; ceq = [ ];

Guárdalo como un archivo llamado en tu ruta.unitdisk.mMATLAB®

Incluya la función de restricción no lineal en.problem

problem.nonlcon = @unitdisk;

Resuelve el problema.

x = fmincon(problem)
 Iter  Func-count            Fval   Feasibility   Step Length       Norm of   First-order                                                                          step    optimality     0           3    1.000000e+00     0.000e+00     1.000e+00     0.000e+00     2.000e+00       1          12    8.913011e-01     0.000e+00     1.176e-01     2.353e-01     1.107e+01       2          22    8.047847e-01     0.000e+00     8.235e-02     1.900e-01     1.330e+01       3          28    4.197517e-01     0.000e+00     3.430e-01     1.217e-01     6.172e+00       4          31    2.733703e-01     0.000e+00     1.000e+00     5.254e-02     5.705e-01       5          34    2.397111e-01     0.000e+00     1.000e+00     7.498e-02     3.164e+00       6          37    2.036002e-01     0.000e+00     1.000e+00     5.960e-02     3.106e+00       7          40    1.164353e-01     0.000e+00     1.000e+00     1.459e-01     1.059e+00       8          43    1.161753e-01     0.000e+00     1.000e+00     1.754e-01     7.383e+00       9          46    5.901602e-02     0.000e+00     1.000e+00     1.547e-02     7.278e-01      10          49    4.533081e-02     2.898e-03     1.000e+00     5.393e-02     1.252e-01      11          52    4.567454e-02     2.225e-06     1.000e+00     1.492e-03     1.679e-03      12          55    4.567481e-02     4.406e-12     1.000e+00     2.095e-06     1.501e-05      13          58    4.567481e-02     0.000e+00     1.000e+00     2.158e-09     1.511e-05   Local minimum possible. Constraints satisfied.  fmincon stopped because the size of the current step is less than the value of the step size tolerance and constraints are  satisfied to within the value of the constraint tolerance.  <stopping criteria details>
x =      0.7864    0.6177

La pantalla iterativa y la solución son las mismas que en.Opciones no predeterminadas

Llame con la salida para obtener el valor de la función objetiva en la solución.fminconfval

El ejemplo muestra dos soluciones.Restricciones enlazadas ¿Cuál es mejor? Ejecute el ejemplo que solicita la salida, así como la solución.fval

fun = @(x)1+x(1)./(1+x(2)) - 3*x(1).*x(2) + x(2).*(1+x(1)); lb = [0,0]; ub = [1,2]; A = []; b = []; Aeq = []; beq = []; x0 = [0.5,1]; [x,fval] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
Local minimum found that satisfies the constraints.  Optimization completed because the objective function is non-decreasing in  feasible directions, to within the default value of the function tolerance, and constraints are satisfied to within the default value of the constraint tolerance.  <stopping criteria details>
x =      1.0000    2.0000   fval =     -0.6667

Ejecute el problema con un punto de partida diferente.x0

x0 = x0/5; [x2,fval2] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
Local minimum found that satisfies the constraints.  Optimization completed because the objective function is non-decreasing in  feasible directions, to within the default value of the function tolerance, and constraints are satisfied to within the default value of the constraint tolerance.  <stopping criteria details>
x2 =     1.0e-06 *      0.4000    0.4000   fval2 =      1.0000

Esta solución tiene un valor de función objetivo, que es mayor que el primer valor.fval2 = 1fval = -0.6667 La primera solución tiene un valor de función objetivo mínimo local menor.x

Para examinar fácilmente la calidad de una solución, solicite las salidas y.exitflagoutput

Configure el problema de minimizar la función de Rosenbrock en el disco de la unidad, . En primer lugar, cree una función que represente la restricción no lineal. Guárdelo como un archivo denominado en su ruta de acceso de MATLAB®.unitdisk.m

 function [c,ceq] = unitdisk(x) c = x(1)^2 + x(2)^2 - 1; ceq = [];  

Cree las especificaciones de problemas restantes.

fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2; nonlcon = @unitdisk; A = []; b = []; Aeq = []; beq = []; lb = []; ub = []; x0 = [0,0]; 

Llame usando el,, y las salidas.fminconfvalexitflagoutput

[x,fval,exitflag,output] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon) 
 Local 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 =      0.7864    0.6177   fval =      0.0457   exitflag =       1   output =     struct with fields:           iterations: 24           funcCount: 84     constrviolation: 0            stepsize: 6.9162e-06           algorithm: 'interior-point'       firstorderopt: 2.4373e-08        cgiterations: 4             message: '...'  
  • El valor indica que la solución es un mínimo local.exitflag1

  • La estructura informa de varias estadísticas sobre el proceso de solución.output En particular, da el número de iteraciones en, número de evaluaciones de función en, y la viabilidad en.output.iterationsoutput.funcCountoutput.constrviolation

Opcionalmente devuelve varias salidas que puede usar para analizar la solución notificada.fmincon

Configure el problema de minimizar la función de Rosenbrock en el disco de la unidad. En primer lugar, cree una función que represente la restricción no lineal. Guárdelo como un archivo denominado en su ruta de acceso de MATLAB®.unitdisk.m

 function [c,ceq] = unitdisk(x) c = x(1)^2 + x(2)^2 - 1; ceq = [];  

Cree las especificaciones de problemas restantes.

fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2; nonlcon = @unitdisk; A = []; b = []; Aeq = []; beq = []; lb = []; ub = []; x0 = [0,0]; 

Solicite todas las salidas.fmincon

[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon) 
 Local 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 =      0.7864    0.6177   fval =      0.0457   exitflag =       1   output =     struct with fields:           iterations: 24           funcCount: 84     constrviolation: 0            stepsize: 6.9162e-06           algorithm: 'interior-point'       firstorderopt: 2.4373e-08        cgiterations: 4             message: '...'   lambda =     struct with fields:           eqlin: [0x1 double]       eqnonlin: [0x1 double]        ineqlin: [0x1 double]          lower: [2x1 double]          upper: [2x1 double]     ineqnonlin: 0.1215   grad =     -0.1911    -0.1501   hessian =    497.2903 -314.5589  -314.5589  200.2392  
  • La salida muestra que la restricción no lineal está activa en la solución y da el valor del multiplicador de Lagrange asociado.lambda.ineqnonlin

  • La salida proporciona el valor del degradado de la función objetiva en la solución.gradx

  • La salida se describe en.hessianfmincon hessian

Argumentos de entrada

contraer todo

Función para minimizar, especificada como un identificador de función o un nombre de función. es una función que acepta un vector o array y devuelve un escalar real, la función objetiva evaluada en.funxfx

Especifique como un identificador de función para un archivo:fun

x = fmincon(@myfun,x0,A,b)

donde se encuentra una función comomyfunMATLAB

function f = myfun(x) f = ...            % Compute function value at x

También puede especificar como un identificador de función para una función anónima:fun

x = fmincon(@(x)norm(x)^2,x0,A,b);

Si puede calcular el degradado de la opción se establece en, como se establece por entonces debe devolver el vector de degradado en el segundo argumento de salida.funandSpecifyObjectiveGradienttrue

options = optimoptions('fmincon','SpecifyObjectiveGradient',true)
fung(x)

Si también puede calcular la matriz Hessiana, la opción se establece a través de la opción es, debe devolver el valor hessian, una matriz simétrica, en un tercer argumento de salida. puede dar un hessian escaso.andHessianFcn'objective'optimoptionsandAlgorithm'trust-region-reflective'funH(x)fun Ver para más detalles.Hessian para fminunc confianza-región o fmincon confianza-región-reflexivo algoritmos

Si también puede calcular la matriz Hessiana y la opción está configurada, hay una manera diferente de pasar el hessian a.Algorithm'interior-point'fmincon Para obtener más información, consulte.Hessian para el algoritmo de punto interior de fmincon Para obtener un ejemplo de uso para calcular el degradado y hessian, consulte.Symbolic Math Toolbox™Calcula gradientes y hessianosSymbolic Math Toolbox

Los algoritmos y permiten suministrar una función de multiplicar de hessian.interior-pointtrust-region-reflective Esta función da el resultado de un producto vectorial de hessian-Times sin computar el hessian directamente. Esto puede ahorrar memoria. Ver.Función de multiplicar de hessian

Ejemplo: fun = @(x)sin(x(1))*cos(x(2))

Tipos de datos: char | function_handle | string

Punto inicial, especificado como un vector real o una matriz real. Solvers utilizan el número de elementos en, y el tamaño de, para determinar el número y el tamaño de las variables que acepta.x0fun

  • algoritmo: Si la opción es (predeterminada), restablece los componentes que están en los límites o fuera de ellos o a los valores estrictamente entre los límites.'interior-point'HonorBoundstruefminconx0lbub

  • algoritmo: restablece los componentes infactibles para que sean factibles con respecto a los límites o las equalidades lineales.'trust-region-reflective'fminconx0

  • , o algoritmo: restablece los componentes que están fuera de los límites a los valores de los límites correspondientes.'sqp''sqp-legacy''active-set'fminconx0

Ejemplo: x0 = [1,2,3,4]

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

Restricciones no lineales, especificadas como un identificador de función o un nombre de función. es una función que acepta un vector o array y devuelve dos matrices, y.nonlconxc(x)ceq(x)

  • es la matriz de restricciones de desigualdad no lineal en. intenta satisfacerc(x)xfmincon

    para todas las entradas de.c(x) <= 0c

  • es la matriz de restricciones de igualdad no lineal en. intenta satisfacerceq(x)xfmincon

    para todas las entradas de.ceq(x) = 0ceq

Por ejemplo,

x = fmincon(@myfun,x0,A,b,Aeq,beq,lb,ub,@mycon)

donde es una función como si los degradados de las restricciones también se pueden calcular la opción es, como se establece por entonces también debe devolver, en el tercer y cuarto argumentos de salida, el degradado de, y, el degradado de. y puede ser escasa o densa.myconMATLAB

function [c,ceq] = mycon(x) c = ...     % Compute nonlinear inequalities at x. ceq = ...   % Compute nonlinear equalities at x.
andSpecifyConstraintGradienttrue
options = optimoptions('fmincon','SpecifyConstraintGradient',true)
nonlconGCc(x)GCeqceq(x)GCGCeq Si es grande, con relativamente pocas entradas que no sean de cero, Ahorre tiempo de ejecución y memoria en el algoritmo representándolos como matrices dispersas.GCGCeqinterior-point Para obtener más información, consulte.Restricciones no lineales

Tipos de datos: char | function_handle | string

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

Algunas opciones se aplican a todos los algoritmos, y otras son relevantes para determinados algoritmos. Consulte para obtener información detallada.Opciones de optimización referencia

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

All Algorithms
Algorithm

Elija el algoritmo de optimización:

  • predeterminado'interior-point'

  • 'trust-region-reflective'

  • 'sqp'

  • solo'sqp-legacy'optimoptions

  • 'active-set'

Para obtener información sobre cómo elegir el algoritmo, consulte.Elegir el algoritmo

El algoritmo requiere:trust-region-reflective

  • Un degradado que se entregará en la función objetiva

  • que se establecerá enSpecifyObjectiveGradienttrue

  • Restricciones enlazadas o restricciones de igualdad lineal, pero no ambas

Si selecciona el algoritmo y no se satisfacen todas estas condiciones, se produce un error.'trust-region-reflective'fmincon

Los algoritmos, y no son de gran escala.'active-set''sqp-legacy''sqp' Ver.Algoritmos a gran escala frente a mediano escala

CheckGradients

Compare los derivados suministrados por el usuario (degradados de objetivos o restricciones) con los derivados de diferenciación finita. Las opciones son (predeterminado) o.falsetrue

Para, el nombre es y los valores son o.optimsetDerivativeCheck'on''off' Ver.Las tablas de nombres de opciones actuales y heredadas

ConstraintTolerance

Tolerancia en la infracción de restricción, un escalar positivo. El valor predeterminado es.1e-6 Ver.Tolerancias y criterios de detención

El nombre es.optimsetTolCon Ver.Las tablas de nombres de opciones actuales y heredadas

Diagnostics

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

DiffMaxChange

Cambio máximo en las variables para los degradados de diferencias finitas (un escalar positivo). El valor predeterminado es.Inf

DiffMinChange

Cambio mínimo en las variables para los degradados de diferencias finitas (un escalar positivo). El valor predeterminado es.0

Display

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

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

  • muestra la salida en cada iteración y proporciona el mensaje de salida predeterminado.'iter'

  • muestra la salida en cada iteración y proporciona el mensaje técnico de salida.'iter-detailed'

  • muestra la salida solamente si la función no converge, y da el mensaje de salida predeterminado.'notify'

  • muestra la salida sólo si la función no converge y da el mensaje técnico de salida.'notify-detailed'

  • (valor predeterminado) muestra solo la salida final y proporciona el mensaje de salida predeterminado.'final'

  • muestra sólo la salida final y da el mensaje técnico de salida.'final-detailed'

FiniteDifferenceStepSize

Factor de tamaño de paso escalar o vectorial para diferencias finitas. Cuando se establece en un vector, las diferencias finitas de avance sonFiniteDifferenceStepSizevdelta

delta = v.*sign′(x).*max(abs(x),TypicalX);

donde excepto.sign′(x) = sign(x)sign′(0) = 1 Las diferencias finitas centrales son

delta = v.*max(abs(x),TypicalX);

Escalar se expande a un vector.FiniteDifferenceStepSize El valor predeterminado es para las diferencias finitas de avance y para las diferencias finitas centrales.sqrt(eps)eps^(1/3)

El nombre es.optimsetFinDiffRelStep Ver.Las tablas de nombres de opciones actuales y heredadas

FiniteDifferenceType

Las diferencias finitas, que se utilizan para estimar degradados, son (predeterminadas) o (centradas). toma el doble de evaluaciones de funciones, pero debe ser más precisa.'forward''central''central' El algoritmo de confianza-región-reflexivo utiliza sólo cuando se establece en.FiniteDifferenceTypeCheckGradientstrue

es cuidadoso de obedecer los límites al estimar ambos tipos de diferencias finitas.fmincon Así, por ejemplo, podría tomar una diferencia hacia atrás, en lugar de una hacia adelante, para evitar la evaluación en un punto fuera de los límites. Sin embargo, para el algoritmo, las diferencias pueden infringir los límites durante su evaluación si la opción está establecida en.interior-point'central'HonorBoundsfalse

El nombre es.optimsetFinDiffType Ver.Las tablas de nombres de opciones actuales y heredadas

FunValCheck

Compruebe si los valores de función objetiva son válidos. La configuración predeterminada, no realiza una comprobación.'off' La configuración muestra un error cuando la función objetiva devuelve un valor que es, o.'on'complexInfNaN

MaxFunctionEvaluations

Número máximo de evaluaciones de funciones permitidas, un entero positivo. El valor predeterminado para todos los algoritmos excepto is; para el algoritmo el valor predeterminado es.interior-point100*numberOfVariablesinterior-point3000 Mira y.Tolerancias y criterios de detenciónIteraciones y recuentos de funciones

El nombre es.optimsetMaxFunEvals Ver.Las tablas de nombres de opciones actuales y heredadas

MaxIterations

Número máximo de iteraciones permitidas, un entero positivo. El valor predeterminado para todos los algoritmos excepto is; para el algoritmo el valor predeterminado es.interior-point400interior-point1000 Mira y.Tolerancias y criterios de detenciónIteraciones y recuentos de funciones

El nombre 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). El valor predeterminado es.1e-6 Ver.Medida de optimalidad de primer orden

El nombre es.optimsetTolFun Ver.Las tablas de nombres de opciones actuales y heredadas

OutputFcn

Especifique una o varias funciones definidas por el usuario a las que llama una función de optimización en cada iteración. Pasar un identificador de función o una matriz de celdas de identificadores de función. El valor predeterminado es None ().[] Ver.Sintaxis de función de salida

PlotFcn

Traza varias medidas de progreso mientras se ejecuta el algoritmo; seleccionar de parcelas predefinidas o escribir las suyas propias. Pase un nombre de función de trazado integrado, un identificador de función o una matriz de celdas de nombres de función de trazado integrados o identificadores de función. Para las funciones de trazado personalizadas, pase los identificadores de función. El valor predeterminado es None ():[]

  • traza el punto actual'optimplotx'

  • traza el recuento de funciones'optimplotfunccount'

  • traza el valor de la función'optimplotfval'

  • traza la infracción de restricción máxima'optimplotconstrviolation'

  • traza el tamaño del paso'optimplotstepsize'

  • traza la medida de optimalidad de primer orden'optimplotfirstorderopt'

Para obtener información sobre cómo escribir una función de trazado personalizada, consulte.Sintaxis de función de trazado

El nombre es.optimsetPlotFcns Ver.Las tablas de nombres de opciones actuales y heredadas

SpecifyConstraintGradient

Degradado para las funciones de restricción no lineal definidas por el usuario. Cuando se establece en el valor predeterminado, se estiman los degradados de las restricciones no lineales por diferencias finitas.falsefmincon Cuando se establece en, espera que la función de restricción tenga cuatro salidas, como se describe en.truefminconnonlcon El algoritmo no acepta restricciones no lineales.trust-region-reflective

Para, el nombre es y los valores son o.optimsetGradConstr'on''off' Ver.Las tablas de nombres de opciones actuales y heredadas

SpecifyObjectiveGradient

Gradiente para la función objetiva definida por el usuario. Consulte la descripción para ver cómo definir el degradado.funfun El valor predeterminado, hace que se estimen los degradados utilizando diferencias finitas.falsefmincon Se establece para que utilice un degradado definido por el usuario de la función objetiva.truefmincon Para utilizar el algoritmo, debe proporcionar el degradado y establecer en.'trust-region-reflective'SpecifyObjectiveGradienttrue

Para, el nombre es y los valores son o.optimsetGradObj'on''off' Ver.Las tablas de nombres de opciones actuales y heredadas

StepTolerance

Tolerancia de terminación activada, un escalar positivo.x El valor predeterminado para todos los algoritmos excepto is; para el algoritmo, el valor predeterminado es.'interior-point'1e-6'interior-point'1e-10 Ver.Tolerancias y criterios de detención

El nombre es.optimsetTolX Ver.Las tablas de nombres de opciones actuales y heredadas

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 para escalar las diferencias finitas para la estimación de degradado.ones(numberofvariables,1)fminconTypicalX

El algoritmo utiliza sólo para la opción.'trust-region-reflective'TypicalXCheckGradients

UseParallel

Cuando, estima los degradados en paralelo.truefmincon Deshabilite estableciendo el valor predeterminado,. requiere un gradiente en el objetivo, por lo que no se aplica.falsetrust-region-reflectiveUseParallel Ver.Computación paralela

Trust-Region-Reflective Algorithm
FunctionTolerance

Tolerancia de terminación en el valor de la función, un escalar positivo. El valor predeterminado es.1e-6 Ver.Tolerancias y criterios de detención

El nombre es.optimsetTolFun Ver.Las tablas de nombres de opciones actuales y heredadas

HessianFcn

Si (por defecto), se aproxima al Hessiano usando diferencias finitas, o utiliza una función de multiplicar de hessian (con opción).[]fminconHessianMultiplyFcn Si, utiliza un hessian definido por el usuario (definido en).'objective'fminconfun Ver.Hessian como entrada

El nombre es.optimsetHessFcn 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 es de la forma

W = hmfun(Hinfo,Y)

donde contiene una matriz utilizada para computar.HinfoH*Y

El primer argumento es el mismo que el tercer argumento devuelto por la función objetiva, por ejemplofun

[f,g,Hinfo] = fun(x)

es una matriz que tiene el mismo número de filas que hay dimensiones en el problema.Y La matriz, aunque no se forma explícitamente. utiliza para calcular el preacondicionador.W = H*YHfminconHinfo Para obtener información sobre cómo suministrar valores para cualquier necesidad de parámetros adicionales, consulte.hmfunPasar parámetros adicionales

Nota

Para usar la opción, debe establecerse en y debe ser (predeterminado).HessianMultiplyFcnHessianFcn[]SubproblemAlgorithm'cg'

Ver.Función de multiplicar de hessian Vea por un ejemplo.Minimización con hessian estructurado denso, Equalidades lineales

El nombre es.optimsetHessMult Ver.Las tablas de nombres de opciones actuales y heredadas

HessPattern

Patrón de la Sparsity del hessian para la diferenciación finita. Establecer cuando puede tener ∂HessPattern(i,j) = 12/∂ ∂ ≠ 0.funx(i)x(j) De lo contrario, establecer.HessPattern(i,j) = 0

Se usa cuando es incómodo calcular la matriz de hessian, pero se puede determinar (digamos, por inspección) cuando el componente th del gradiente de depende. puede aproximarse a través de diferencias finitas dispersas (del degradado) si proporciona el valor para.HessPatternHfunifunx(j)fminconHestructura de la dispersiónHHessPattern En otras palabras, proporcione las ubicaciones de los nonceros.

Cuando se desconoce la estructura, no se establece.HessPattern El comportamiento predeterminado es como si se tratara de una matriz densa de unos.HessPattern A continuación, calcula una aproximación de diferencia finita completa en cada iteración.fmincon Este cálculo puede ser muy costoso para problemas grandes, por lo que normalmente es mejor determinar la estructura de la dispersión.

MaxPCGIter

Número máximo de iteraciones de degradado conjugada preacondicionadas (PCG), un escalar positivo. El valor predeterminado es para problemas con restricciones de límite y es para problemas con restricciones de igualdad.max(1,floor(numberOfVariables/2))numberOfVariables 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. De forma predeterminada, se utiliza el preacondicionamiento diagonal (ancho de banda superior de 0). 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.Algoritmo reflexivo de la región Trust de fmincon

TolPCG

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

Active-Set Algorithm
FunctionTolerance

Tolerancia de terminación en el valor de la función, un escalar positivo. El valor predeterminado es.1e-6 Ver.Tolerancias y criterios de detención

El nombre es.optimsetTolFun Ver.Las tablas de nombres de opciones actuales y heredadas

MaxSQPIter

Número máximo de iteraciones SQP permitidas, un entero positivo. El valor predeterminado es.10*max(numberOfVariables, numberOfInequalities + numberOfBounds)

RelLineSrchBnd

Límite relativo (un valor escalar real no negativo) en la longitud del paso de búsqueda de línea. El desplazamiento total en satisfacex x(i)| ≤ relLineSrchBnd· max(|x(i)|,|typicalx(i)|). Esta opción proporciona control sobre la magnitud de los desplazamientos en los casos en los que el solucionador toma pasos que se consideran demasiado grandes.x El valor predeterminado es no Bounds ().[]

RelLineSrchBndDuration

Número de iteraciones para las que el enlazado especificado en debe estar activo (el valor predeterminado es).RelLineSrchBnd1

TolConSQP

Tolerancia de terminación en la infracción de restricción SQP de iteración interna, un escalar positivo. El valor predeterminado es.1e-6

Interior-Point Algorithm
HessianApproximation

Elige cómo calcula el Hessiano (ver).fminconHessian como entrada Las opciones son:

  • predeterminado'bfgs'

  • 'finite-difference'

  • 'lbfgs'

  • {'lbfgs',Positive Integer}

Nota

Para utilizar, ambas y deben ser entradas vacías ().HessianApproximationHessianFcnHessianMultiplyFcn[]

Para, el nombre es y los valores son,,,,, o.optimsetHessian'user-supplied''bfgs''lbfgs''fin-diff-grads''on''off' Ver.Las tablas de nombres de opciones actuales y heredadas

HessianFcn

Si (por defecto), se aproxima al hessian utilizando diferencias finitas, o utiliza un suministrado.[]fminconHessianMultiplyFcn Si un manejador de función, utiliza para calcular el hessian.fminconHessianFcn Ver.Hessian como entrada

El nombre es.optimsetHessFcn Ver.Las tablas de nombres de opciones actuales y heredadas

HessianMultiplyFcn

Función suministrada por el usuario que da un producto de vectores de tiempo de hessian (ver).Función de multiplicar de hessian Pasar un identificador de función.

Nota

Para utilizar la opción, debe establecerse en y debe ser.HessianMultiplyFcnHessianFcn[]SubproblemAlgorithm'cg'

El nombre es.optimsetHessMult Ver.Las tablas de nombres de opciones actuales y heredadas

HonorBounds

El valor predeterminado garantiza que las restricciones enlazadas se satisfacen en cada iteración.true Desactivar estableciendo en.false

Para, el nombre es y los valores son o.optimsetAlwaysHonorConstraints'bounds''none' Ver.Las tablas de nombres de opciones actuales y heredadas

InitBarrierParam

Valor de barrera inicial, un escalar positivo. A veces puede ser de ayuda probar un valor por encima del predeterminado, especialmente si las funciones de objetivo o restricción son grandes.0.1

InitTrustRegionRadius

Radio inicial de la región de confianza, un escalar positivo. En problemas mal escalados podría ayudar a elegir un valor menor que el predeterminado n, donde está el número de variables.n

MaxProjCGIter

Una tolerancia (criterio de parada) para el número de iteraciones de degradado de conjugada proyectadas; Esta es una iteración interna, no el número de iteraciones del algoritmo. Este entero positivo tiene un valor predeterminado de.2*(numberOfVariables - numberOfEqualities)

ObjectiveLimit

Una tolerancia (criterio de detención) que es un escalar. Si el valor de la función objetiva va por debajo y la iteración es factible, las iteraciones se detienen, porque el problema es presumiblemente ilimitado.ObjectiveLimit El valor predeterminado es.-1e20

ScaleProblem

hace que el algoritmo normalice todas las restricciones y la función objetiva.true Deshabilite estableciendo el valor predeterminado.false

Para, los valores son o.optimset'obj-and-constr''none' Ver.Las tablas de nombres de opciones actuales y heredadas

SubproblemAlgorithm

Determina cómo se calcula el paso de iteración. El valor por defecto, es generalmente más rápido que (gradiente conjugada), aunque puede ser más rápido para grandes problemas con los hessianos densos.'factorization''cg''cg' Ver.Algoritmo de punto interior de fmincon

TolProjCG

Una tolerancia relativa (criterio de detención) para el algoritmo de degradado de conjugada proyectado; Esto es para una iteración interna, no para la iteración del algoritmo. Este escalar positivo tiene un valor predeterminado de.0.01

TolProjCGAbs

Tolerancia absoluta (criterio de parada) para el algoritmo de gradiente conjugada proyectado; Esto es para una iteración interna, no para la iteración del algoritmo. Este escalar positivo tiene un valor predeterminado de.1e-10

SQP and SQP Legacy Algorithms
ObjectiveLimit

Una tolerancia (criterio de detención) que es un escalar. Si el valor de la función objetiva va por debajo y la iteración es factible, las iteraciones se detienen, porque el problema es presumiblemente ilimitado.ObjectiveLimit El valor predeterminado es.-1e20

ScaleProblem

hace que el algoritmo normalice todas las restricciones y la función objetiva.true Deshabilite estableciendo el valor predeterminado.false

Para, los valores son o.optimset'obj-and-constr''none' Ver.Las tablas de nombres de opciones actuales y heredadas

Ejemplo: options = optimoptions('fmincon','SpecifyObjectiveGradient',true,'SpecifyConstraintGradient',true)

Estructura problemática, especificada como estructura con los siguientes campos:

Nombre de campoEntrada

Objetivo

Función objetiva

x0

Punto inicial parax

Aineq

Matriz para las restricciones de desigualdad lineal

bineq

Vector para las restricciones de desigualdad lineal

Aeq

Matriz para las restricciones de igualdad lineal

beq

Vector para las restricciones de igualdad lineales
lbVector de los límites inferiores
ubVector de los límites superiores

nonlcon

Función de restricción no lineal

solver

'fmincon'

Opciones

Las opciones creadas conoptimoptions

Debe suministrar al menos los campos, y, en la estructura.Objetivox0solverOpcionesproblem

La forma más sencilla de obtener una estructura es exportar el problema desde la aplicación de optimización.problem

Tipos de datos: struct

Argumentos de salida

contraer todo

Solución, devuelta como un vector real o una matriz real. El tamaño de es el mismo que el tamaño de.xx0 Normalmente, es una solución local para el problema cuando es positivo.xexitflag Para obtener información sobre la calidad de la solución, consulte.Cuando el Solver se ejecuta correctamente

Valor de la función objetiva en la solución, devuelto como un número real. Generalmente, =.fvalfun(x)

Motivo detenido, devuelto como un entero.fmincon

Todos los algoritmos:

1

La medida de optimalidad de primer orden era menor que, y la infracción de restricción máxima era menor que.options.OptimalityToleranceoptions.ConstraintTolerance

0

Número de iteraciones superada o número de evaluaciones de función superada.options.MaxIterationsoptions.MaxFunctionEvaluations

-1

Detenido por una función de salida o una función de trazado.

-2

No se encontró ningún punto factible.

Todos los algoritmos excepto:active-set

2

El cambio en fue menor que y la violación de restricción máxima fue menor que.xoptions.StepToleranceoptions.ConstraintTolerance

algoritmo solamente:trust-region-reflective

3

El cambio en el valor de la función objetiva fue menor que y la infracción de restricción máxima fue menor que.options.FunctionToleranceoptions.ConstraintTolerance

algoritmo solamente:active-set

4

La magnitud de la dirección de búsqueda era menor que 2 * y la infracción de restricción máxima era menor que.options.StepToleranceoptions.ConstraintTolerance

5

La magnitud del derivado direccional en la dirección de búsqueda era menor que 2 * y la infracción de restricción máxima era menor que.options.OptimalityToleranceoptions.ConstraintTolerance

, y algoritmos:interior-pointsqp-legacysqp

-3

La función objetiva en la iteración actual fue inferior y la violación de restricción máxima fue menor que.options.ObjectiveLimitoptions.ConstraintTolerance

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

iterations

Número de iteraciones tomadas

funcCount

Número de evaluaciones de funciones

lssteplength

Tamaño del paso de búsqueda de línea en relación con la dirección de búsqueda (y algoritmos solamente)active-setsqp

constrviolation

Máximo de funciones de restricción

stepsize

Longitud del último desplazamiento en (no en el algoritmo)xactive-set

algorithm

Algoritmo de optimización utilizado

cgiterations

Número total de iteraciones PCG (y algoritmos)trust-region-reflectiveinterior-point

firstorderopt

Medida de la optimalidad de primer orden

message

Mensaje de salida

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

lower

Los límites inferiores corresponden alb

upper

Los límites superiores corresponden aub

ineqlin

Las desigualdades lineales correspondientes yAb

eqlin

Ecualidades lineales correspondientes a yAeqbeq

ineqnonlin

Las desigualdades no lineales correspondientes alcnonlcon

eqnonlin

Ecualidades no lineales correspondientes a laceqnonlcon

Degradado en la solución, devuelto como un vector real. da el gradiente de en el punto.gradfunx(:)

Hessian aproximado, devuelto como una matriz real. Para el significado de. ver.hessianHessian

Limitaciones

  • es un método basado en gradiente que está diseñado para trabajar en problemas donde las funciones objetivo y restricción son continuas y tienen primeros derivados continuos.fmincon

  • Para el algoritmo, debe proporcionar el degradado y establecer la opción.'trust-region-reflective'fun'SpecifyObjectiveGradient'true

  • El algoritmo no permite los límites superior e inferior iguales.'trust-region-reflective' Por ejemplo, si, da este error:lb(2)==ub(2)fmincon

    Equal upper and lower bounds not permitted in trust-region-reflective algorithm. Use either interior-point or SQP algorithms instead.
  • Hay dos sintaxis diferentes para pasar un hessian, y hay dos sintaxis diferentes para pasar una función; uno para, y otro para.HessianMultiplyFcntrust-region-reflectiveinterior-point Ver.Incluidos los hessianos

    • Porque el Hessiano del Lagrangio es el mismo que el Hessiano de la función objetiva.trust-region-reflective Se pasa que hessian como la tercera salida de la función objetiva.

    • Porque el Hessiano del Lagrangio involucra a los multiplicadores de Lagrange y a los hessianos de las funciones de restricción no lineal.interior-point Se pasa el hessian como una función separada que tiene en cuenta tanto el punto actual y la estructura del multiplicador de Lagrange.xlambda

  • Cuando el problema es inviable, intenta minimizar el valor máximo de restricción.fmincon

Más acerca de

contraer todo

Hessian como entrada

utiliza un hessian como una entrada opcional.fmincon Este hessian es la matriz de los segundos derivados del Lagrangio (ver), a saber,Ecuación 1

xx2L(x,λ)=2f(x)+λi2ci(x)+λi2ceqi(x).(1)

Para obtener más información sobre cómo suministrar un hessian a los algoritmos o, vea.trust-region-reflectiveinterior-pointIncluidos los hessianos

Los algoritmos y no aceptan una entrada hessian.active-setsqp Calculan una aproximación cuasi-Newton al Hessiano de los Lagrangios.

El algoritmo tiene varias opciones para la opción; Ver:interior-point'HessianApproximation'Elija INPUT hessian aproximación para fmincon de punto interior

  • — calcula el Hessiano mediante una densa aproximación cuasi-Newton.'bfgs'fmincon Esta es la aproximación de hessian por defecto.

  • — calcula el Hessiano mediante una aproximación de cuasi Newton de memoria limitada y a gran escala.'lbfgs'fmincon Se utiliza la memoria predeterminada, 10 iteraciones.

  • — calcula el Hessiano mediante una aproximación de cuasi Newton de memoria limitada y a gran escala.{'lbfgs',positive integer}fmincon El entero positivo especifica cuántas iteraciones pasadas se deben recordar.

  • — calcula un producto vectorial de tiempos de hessian por diferencias finitas de los degradados.'finite-difference'fmincon Debe suministrar el degradado de la función objetiva y también gradientes de restricciones no lineales (si existen). Establezca la opción en y, si corresponde, la opción para.'SpecifyObjectiveGradient'true'SpecifyConstraintGradient'true Debe establecer el a.'SubproblemAlgorithm''cg'

Función de multiplicar de hessian

Los algoritmos y permiten suministrar una función de multiplicar de hessian.interior-pointtrust-region-reflective Esta función da el resultado de un producto vectorial de hessian-Times, sin computar el hessian directamente. Esto puede ahorrar memoria. Para obtener más información, consulte.Función de multiplicar de hessian

Algoritmos

contraer todo

Elegir el algoritmo

Para obtener ayuda para elegir el algoritmo, consulte.Algoritmos de fmincon Para establecer el algoritmo, utilice para crear y utilizar el par nombre-valor.optimoptionsOpciones'Algorithm'

El resto de esta sección proporciona breves resúmenes o punteros a la información sobre cada algoritmo.

Optimización de punto interior

Este algoritmo se describe en.Algoritmo de punto interior de fmincon Hay una descripción más extensa en,, y.[1][41][9]

SQP y SQP-Legacy Optimization

Los algoritmos y son similares al algoritmo descrito en. describe las principales diferencias.fmincon'sqp''sqp-legacy''active-set'Active-Set OptimizationAlgoritmo de fmincon SQP En Resumen, estas diferencias son:

Active-Set Optimization

utiliza unfmincon método de programación cuadrática secuencial (SQP). En este método, la función resuelve un subproblema de programación cuadrática (QP) en cada iteración. actualiza una estimación del Hessiano del Lagrangio en cada iteración utilizando la fórmula BFGS (ver y referencias y).fminconfminunc[7][8]

realiza una búsqueda de línea utilizando una función de mérito similar a la propuesta por, y.fmincon[6][7][8] El subproblema de QP se resuelve utilizando una estrategia de conjunto activa similar a la descrita en. describe detalladamente este algoritmo.[5]fmincon Active Set Algorithm

Vea también para más detalles sobre el algoritmo usado.Implementación de SQP

Confianza-región-optimización reflexiva

El algoritmo es un método de región de confianza subespacial y se basa en el método de Newton interior-reflectante descrito en y.'trust-region-reflective'[3][4] Cada iteración implica la solución aproximada de un gran sistema lineal utilizando el método de gradientes conjugados preacondicionados (PCG). Consulte la región de confianza y las descripciones del método de degradado conjugada precondicionada.Algoritmo reflexivo de la región Trust de fmincon

Referencias

[1] Byrd, R. H., J. C. Gilbert, and J. Nocedal. “A Trust Region Method Based on Interior Point Techniques for Nonlinear Programming.” Mathematical Programming, Vol 89, No. 1, 2000, pp. 149–185.

[2] Byrd, R. H., Mary E. Hribar, and Jorge Nocedal. “An Interior Point Algorithm for Large-Scale Nonlinear Programming.” SIAM Journal on Optimization, Vol 9, No. 4, 1999, pp. 877–900.

[3] Coleman, T. F. and Y. Li. “An Interior, Trust Region Approach for Nonlinear Minimization Subject to Bounds.” SIAM Journal on Optimization, Vol. 6, 1996, pp. 418–445.

[4] Coleman, T. F. and Y. Li. “On the Convergence of Reflective Newton Methods for Large-Scale Nonlinear Minimization Subject to Bounds.” Mathematical Programming, Vol. 67, Number 2, 1994, pp. 189–224.

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

[6] Han, S. P. “A Globally Convergent Method for Nonlinear Programming.” Journal of Optimization Theory and Applications, Vol. 22, 1977, pp. 297.

[7] Powell, M. J. D. “A Fast Algorithm for Nonlinearly Constrained Optimization Calculations.” Numerical Analysis, ed. G. A. Watson, Lecture Notes in Mathematics, Springer-Verlag, Vol. 630, 1978.

[8] Powell, M. J. D. “The Convergence of Variable Metric Methods For Nonlinearly Constrained Optimization Calculations.” Nonlinear Programming 3 (O. L. Mangasarian, R. R. Meyer, and S. M. Robinson, eds.), Academic Press, 1978.

[9] Waltz, R. A., J. L. Morales, J. Nocedal, and D. Orban. “An interior algorithm for nonlinear optimization that combines line search and trust region steps.” Mathematical Programming, Vol 107, No. 3, 2006, pp. 391–408.

Capacidades ampliadas

Introducido antes de R2006a