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

Buscar mínimo de función multivariable no lineal restringida

Solucionador de programación no lineal.

Encuentra el mínimo de un problema especificado por

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

b y beq son vectores, A y Aeq son matrices, c(x) y ceq(x) son funciones que devuelven vectores, y f(x) es una función que devuelve un escalar. f (x), c(x) y ceq(x) pueden ser funciones no lineales.

x, lby ub se pueden pasar como vectores o matrices; Véase Argumentos de matriz.

Sintaxis

x = fmincon(fun,x0,A,b)
x = fmincon(fun,x0,A,b,Aeq,beq)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
x = fmincon(problem)
[x,fval] = fmincon(___)
[x,fval,exitflag,output] = fmincon(___)
[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(___)

Descripción

ejemplo

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

Nota

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

ejemplo

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

ejemplo

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub) define un conjunto de límites inferiores y superiores en las variables de diseño en x, de modo que la solución está siempre en el rango lb  x  ub. Si no existen igualdades, establezca Aeq = [] y beq = []. Si x(i) no está limitado, defina lb(i) = -Infy, si x(i) está sin límite, establezca ub(i) = Inf.

Nota

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

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

ejemplo

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

ejemplo

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

ejemplo

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

ejemplo

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

ejemplo

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

ejemplo

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

  • lambda — Estructura con campos que contienen los multiplicadores de Lagrange en la solución x.

  • grad — Gradiente de fun en la solución x.

  • hessian — Hessian de fun en la solución x. Véase Hessian de fmincon.

Ejemplos

contraer todo

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

Configure la función objetivo fun para que sea la función de Rosenbrock. La función de Rosenbrock es bien sabido para 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 Resolver un problema no lineal restringido.

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

Encontrar el valor mínimo a partir del punto [-1,2], obligado a tener . Exprese esta restricción en el formulario Ax <= b tomando A = [1,2] y b = 1. Observe que esta restricción significa que la solución no estará en la solución sin restricciones (1, 1), porque en ese momento .

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 default value of the optimality tolerance, and constraints are satisfied to within the default value of the constraint tolerance. 
x = 1×2

    0.5022    0.2489

Encontrar 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.

Configure la función objetivo fun para que sea la función de Rosenbrock.

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

Encontrar el valor mínimo a partir del punto [0.5,0], obligado a tener Y .

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

  • Exprese la restricción de igualdad lineal en el formulario Aeq*x = beq tomando Aeq = [2,1] y 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 default value of the optimality tolerance, and constraints are satisfied to within the default value of the constraint tolerance. 
x = 1×2

    0.4149    0.1701

Encontrar 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));

Busque en la región donde x tiene valores positivos, 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 fun, sujeto a las restricciones enlazadas.

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, consulte Obtener el valor de la función objetiva.

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

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

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

Buscar 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]; 

Resolver 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 default value of the optimality tolerance, and constraints are satisfied to within the default value of the constraint tolerance.     x =      0.5000    0.2500  

Defina las opciones para ver las iteraciones tal y como se producen y para utilizar un algoritmo diferente.

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

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. Guarde esto como un archivo llamado unitdisk.m en su ruta de MATLAB ®.

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

Cree las especificaciones de problemas restantes. Luego ejecute 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.424e-12     1.000e+00     2.095e-06     1.501e-05      13          58    4.567481e-02     0.000e+00     1.000e+00     2.443e-09     1.287e-05    Local minimum possible. Constraints satisfied.  fmincon stopped because the size of the current step is less than the default value of the step size tolerance and constraints are  satisfied to within the default value of the constraint tolerance.     x =      0.7864    0.6177  

Incluya la evaluación del gradiente en la función objetiva para cálculos más rápidos o más confiables.

Incluya la evaluación de degradado como una salida condicionada en el archivo de la 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 llamado rosenbrockwithgrad.m en su ruta de MATLAB ®.

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

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

Cree las otras entradas para el problema. Entonces llama a 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 default value of the optimality tolerance, and constraints are satisfied to within the default value of the constraint tolerance.     x =      1.0000    1.0000  

Resuelva el mismo problema que en Opciones no predeterminadas utilizando una estructura de problemas en lugar de argumentos separados.

Cree las opciones y una estructura de problemas. Consulte problem para los nombres de campo y los campos requeridos.

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];

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

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

Guarde esto como un archivo llamado unitdisk.m en su ruta MATLAB® .

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

problem.nonlcon = @unitdisk;

Resolver el problema.

x = fmincon(problem)
                                                          Norm of First-order  Iter F-count            f(x) Feasibility  Steplength        step  optimality     0       3    1.000000e+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.153e+00     4      31    2.733703e-01   0.000e+00   1.000e+00   5.254e-02   4.587e-01     5      34    2.397111e-01   0.000e+00   1.000e+00   7.498e-02   3.029e+00     6      37    2.036002e-01   0.000e+00   1.000e+00   5.960e-02   3.019e+00     7      40    1.164353e-01   0.000e+00   1.000e+00   1.459e-01   1.058e+00     8      43    1.161753e-01   0.000e+00   1.000e+00   1.754e-01   7.383e+00     9      46    5.901601e-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.160e-09   1.511e-05  Local minimum possible. Constraints satisfied.  fmincon stopped because the size of the current step is less than the default value of the step size tolerance and constraints are  satisfied to within the default value of the constraint tolerance.  <stopping criteria details>
x =      0.7864    0.6177

El display y la solución iterativos son los mismos que en Opciones no predeterminadas.

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

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

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 utilizando 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 fval2 = 1, que es mayor que el primer valor fval = -0.6667. La primera solución x tiene un valor de función de objetivo mínimo local menor.

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

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. Guarde esto como un archivo llamado unitdisk.m en su ruta de MATLAB ®.

 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 a fmincon utilizando las salidas fval, exitflagy output .

[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 default value of the optimality tolerance, and constraints are satisfied to within the default 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: 'Local minimum found that satisfies the constraints....'  
  • El exitflag valor 1 indica que la solución es un mínimo local.

  • La estructura output reporta varias estadísticas sobre el proceso de solución. En particular, da el número de iteraciones en output.iterations, número de evaluaciones de funciones en output.funcCount, y la viabilidad en output.constrviolation.

fmincon opcionalmente devuelve varias salidas que puede utilizar para analizar la solución notificada.

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. Guarde esto como un archivo llamado unitdisk.m en su ruta de MATLAB ®.

 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 default value of the optimality tolerance, and constraints are satisfied to within the default 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: 'Local minimum found that satisfies the constraints....'   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 lambda.ineqnonlin muestra que la restricción no lineal está activa en la solución y proporciona el valor del multiplicador de Lagrange asociado.

  • La salida grad da el valor del gradiente de la función objetiva en la solución x.

  • La salida hessian se describe en Hessian de fmincon.

Argumentos de entrada

contraer todo

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

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

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

donde myfun es una función MATLAB como

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

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

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

Si se puede calcular el gradiente de fun Y la opción SpecifyObjectiveGradient se establece en true, como se establece en

options = optimoptions('fmincon','SpecifyObjectiveGradient',true)
, entonces fun debe devolver el g(x) de vector de degradado en el segundo argumento de salida.

Si también puede calcular la matriz de hessian Y la opción HessianFcn está establecida en 'objective' mediante optimoptions Y la opción Algorithm es 'trust-region-reflective', fun debe devolver el valor de hessian H(x), una matriz simétrica, en un tercer argumento de salida. fun puede dar un hessian escaso. Consulte Hessian para fminunc confianza-región o confianza de fmincon-algoritmos región-reflexivos para obtener más información.

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

Los algoritmos interior-point y trust-region-reflective le permiten suministrar una función de multiplicación de hessian. Esta función da el resultado de un hessian-tiempo-producto del vector sin el cómputo del hessian directamente. Esto puede ahorrar memoria. Véase Hessian multiplique la función.

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

Tipos de datos: char | function_handle | string

Punto inicial, especificado como vector real o matriz real. Los solucionadores utilizan el número de elementos en, y el tamaño de, x0 para determinar el número y el tamaño de las variables que fun acepta.

  • 'interior-point'algoritmo : Si la opción HonorBounds es true (valor predeterminado), fmincon restablece los componentes x0 que están en los límites lb o ub a los valores estrictamente entre los límites.

  • algoritmo 'trust-region-reflective'fmincon restablece los componentes inviables de x0 para que sean factibles con respecto a los límites o a las igualdades lineales.

  • algoritmo 'sqp', 'sqp-legacy'o 'active-set'fmincon restablece los componentes x0 que son límites externos a los valores de los límites correspondientes.

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

Tipos de datos: double

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

A codifica las desigualdades lineales M

A*x <= b,

donde x es el vector de columna de las variables N x(:), y b es un vector de columna con elementos M .

Por ejemplo, para especificar

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

dar estas restricciones:

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

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

Tipos de datos: double

Restricciones de desigualdad lineal, especificadas como un vector real. b es un vector de elemento Mrelacionado con la matriz A . Si pasa b como un vector de fila, Solvers internamente convertir b a la columna vector b(:). Para problemas grandes, pase b como un vector escaso.

b codifica las desigualdades lineales M

A*x <= b,

donde x es el vector columna de las variables N x(:), y A es una matriz de tamaño M-por-N.

Por ejemplo, para especificar

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

dar estas restricciones:

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

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

Tipos de datos: double

Restricciones de igualdad lineal, especificadas como una matriz real. Aeq es una matriz Me-por-N , donde Me es el número de igualdades, y N es el número de variables (número de elementos en x0). Para problemas grandes, pase Aeq como una matriz dispersa.

Aeq codifica las igualdades lineales Me

Aeq*x = beq,

donde x es el vector de columna de las variables N x(:), y beq es un vector de columna con elementos Me .

Por ejemplo, para especificar

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

dar estas restricciones:

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

Ejemplo: Para especificar que los componentes x se suman a 1, tome Aeq = ones(1,N) y beq = 1

Tipos de datos: double

Restricciones de igualdad lineal, especificadas como un vector real. beq es un vector de elemento Merelacionado con la matriz Aeq . Si pasa beq como un vector de fila, Solvers internamente convertir beq a la columna vector beq(:). Para problemas grandes, pase beq como un vector escaso.

beq codifica las igualdades lineales Me

Aeq*x = beq,

donde x es el vector columna de las variables N x(:), y Aeq es una matriz de tamaño Meq-por-N.

Por ejemplo, para especificar

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

dar estas restricciones:

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

Ejemplo: Para especificar que los componentes x se suman a 1, tome Aeq = ones(1,N) y beq = 1

Tipos de datos: double

Límites inferiores, especificados como vector real o matriz real. Si el número de elementos en x0 es igual al de lb, entonces lb especifica que

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

Si numel(lb) < numel(x0), entonces lb especifica que

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

En este caso, los solucionadores emiten una advertencia.

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

Tipos de datos: double

Límites superiores, especificados como vector real o matriz real. Si el número de elementos en x0 es igual al de ub, entonces ub especifica que

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

Si numel(ub) < numel(x0), entonces ub especifica que

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

En este caso, los solucionadores emiten una advertencia.

Ejemplo: Para especificar que todos los componentes x son menos de uno, ub = ones(size(x0))

Tipos de datos: double

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

  • c(x) es la matriz de restricciones de desigualdad no lineal en x. fmincon intenta satisfacer

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

  • ceq(x) es la matriz de restricciones de igualdad no lineal en x. fmincon intenta satisfacer

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

Por ejemplo,

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

donde mycon es una MATLABfunción como

function [c,ceq] = mycon(x) c = ...     % Compute nonlinear inequalities at x. ceq = ...   % Compute nonlinear equalities at x.
si los gradientes de las restricciones también se pueden calcular Y la opción SpecifyConstraintGradient es true, según lo establecido por
options = optimoptions('fmincon','SpecifyConstraintGradient',true)
entonces nonlcon debe también devolver, en los argumentos de salida tercera y cuarta, GC, el gradiente de c(x), y GCeq, el gradiente de ceq(x). la GC y la GCeq pueden ser escasas o densas. Si GC o GCeq es grande, con relativamente pocas entradas no cero, Ahorre tiempo de ejecución y memoria en el algoritmo interior-point al representarlos como matrices dispersas. 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 optimoptions o una estructura como optimset Returns.

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

Algunas opciones están ausentes de la pantalla optimoptions . Estas opciones se enumeran en cursiva. Para obtener más información, consulte Ver opciones.

Todos los algoritmos
Algorithm

Elija el algoritmo de optimización:

  • 'interior-point' (por defecto)

  • 'trust-region-reflective'

  • 'sqp'

  • 'sqp-legacy' (sólooptimoptions )

  • 'active-set'

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

El algoritmo trust-region-reflective requiere:

  • Un gradiente que se debe suministrar en la función objetiva

  • SpecifyObjectiveGradient que se establecerá en true

  • Restricciones vinculadas o restricciones de igualdad lineal, pero no tanto

Si selecciona el algoritmo 'trust-region-reflective' y estas condiciones no están todas satisfechas, fmincon produce un error.

Los algoritmos 'active-set', 'sqp-legacy'y 'sqp' no son de gran escala. Véase Algoritmos a gran escala versus a media escala.

CheckGradients

Compare los derivados suministrados por el usuario (gradientes de objetivos o restricciones) a los derivados finito-comparación. Las opciones son false (por defecto) o true.

Para optimset, el nombre es DerivativeCheck y los valores son 'on' o 'off'. Véase 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. Véase Tolerancias y criterios de parada.

Para optimset, el nombre es TolCon. Véase Tablas de nombres de opciones actuales y heredadas.

Diagnostics

Mostrar información de diagnóstico sobre la función a minimizar o resolver. Las opciones son 'off' (por defecto) o 'on'.

DiffMaxChange

Cambio máximo en variables para gradientes de diferencia finita (un escalar positivo). El valor predeterminado es Inf.

DiffMinChange

Cambio mínimo en variables para gradientes de diferencia finita (un escalar positivo). El valor predeterminado es 0.

Display

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

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

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

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

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

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

  • 'final' (por defecto) muestra sólo la salida final y da el mensaje de salida predeterminado.

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

FiniteDifferenceStepSize

Factor de tamaño de paso escalar o vectorial para diferencias finitas. Cuando se establece FiniteDifferenceStepSize en un vector v, reenviar las diferencias finitas pasos delta son

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

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

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

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

Para optimset, el nombre es FinDiffRelStep. Véase Tablas de nombres de opciones actuales y heredadas.

FiniteDifferenceType

Las diferencias finitas, utilizadas para estimar gradientes, son 'forward' (por defecto) o 'central' (centradas). 'central' toma el doble de evaluaciones de funciones, pero debe ser más precisa. El algoritmo confianza-región-reflexivo utiliza FiniteDifferenceType sólo cuando CheckGradients se establece en true.

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

Para optimset, el nombre es FinDiffType. Véase Tablas de nombres de opciones actuales y heredadas.

FunValCheck

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

MaxFunctionEvaluations

Número máximo de evaluaciones de funciones permitidas, un entero positivo. El valor predeterminado para todos los algoritmos excepto interior-point es 100*numberOfVariables; para el algoritmo interior-point , el valor predeterminado es 3000. Vea Tolerancias y criterios de parada y Iteraciones y conteos de funciones.

Para optimset, el nombre es MaxFunEvals. Véase 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 interior-point es 400; para el algoritmo interior-point , el valor predeterminado es 1000. Vea Tolerancias y criterios de parada y Iteraciones y conteos de funciones.

Para optimset, el nombre es MaxIter. Véase 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. Véase Medida de optimización de primer orden.

Para optimset, el nombre es TolFun. Véase Tablas de nombres de opciones actuales y heredadas.

OutputFcn

Especifique una o varias funciones definidas por el usuario que una función de optimización llama en cada iteración. Pase un identificador de función o una matriz de celdas de los controles de función. El valor predeterminado es None ([]). Véase Función de salida.

PlotFcn

Traza varias medidas de progreso mientras el algoritmo se ejecuta; Seleccione una de las gráficas predefinidas o escriba la suya. Pase un nombre de función de trazado incorporado, un identificador de función o una matriz de celdas de nombres de función de trazado incorporado o de controladores de función. Para funciones de trazado personalizadas, pase las asas de función. El valor por defecto es None ([]):

  • 'optimplotx' traza el punto actual

  • 'optimplotfunccount' gráficas el conteo de funciones

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

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

  • 'optimplotstepsize' traza el tamaño del escalón

  • 'optimplotfirstorderopt' traza la medida de optimización de primer orden

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

Para optimset, el nombre es PlotFcns. Véase Tablas de nombres de opciones actuales y heredadas.

SpecifyConstraintGradient

Degradado para funciones de restricción no lineales definidas por el usuario. Cuando se establece en el valor predeterminado, false, fmincon estima los gradientes de las restricciones no lineales por diferencias finitas. Cuando se establece en true, fmincon espera que la función de restricción tenga cuatro salidas, como se describe en nonlcon. El algoritmo trust-region-reflective no acepta restricciones no lineales.

Para optimset, el nombre es GradConstr y los valores son 'on' o 'off'. Véase Tablas de nombres de opciones actuales y heredadas.

SpecifyObjectiveGradient

Gradiente para la función objetiva definida por el usuario. Consulte la descripción de fun para ver cómo definir el degradado en fun. El valor predeterminado, false, hace que fmincon estime los gradientes mediante diferencias finitas. Establecer en true para que fmincon utilice un degradado definido por el usuario de la función objetiva. Para utilizar el algoritmo 'trust-region-reflective' , debe proporcionar el degradado y establecer SpecifyObjectiveGradient en true.

Para optimset, el nombre es GradObj y los valores son 'on' o 'off'. Véase Tablas de nombres de opciones actuales y heredadas.

StepTolerance

Tolerancia de terminación en x, un escalar positivo. El valor predeterminado para todos los algoritmos excepto 'interior-point' es 1e-6; para el algoritmo 'interior-point' , el valor predeterminado es 1e-10. Véase Tolerancias y criterios de parada.

Para optimset, el nombre es TolX. Véase Tablas de nombres de opciones actuales y heredadas.

TypicalX

Valores típicos de x . El número de elementos en TypicalX es igual al número de elementos en x0, el punto de partida. El valor predeterminado es ones(numberofvariables,1). fmincon utiliza TypicalX para escalar diferencias finitas para la estimación de gradiente.

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

UseParallel

Cuando true, fmincon estima gradientes en paralelo. Deshabilite estableciendo el valor predeterminado, false. trust-region-reflective requiere un gradiente en el objetivo, por lo que UseParallel no se aplica. Véase Cálculo paralelo.

Algoritmo confianza-región-reflexivo
FunctionTolerance

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

Para optimset, el nombre es TolFun. Véase Tablas de nombres de opciones actuales y heredadas.

HessianFcn

Si [] (defecto), fmincon aproxima el hessian usando diferencias finitas, o utiliza una función de multiplicación de hessian (con la opción HessianMultiplyFcn). Si 'objective', fmincon utiliza un hessian definido por el usuario (definido en fun). Véase Hessian como entrada.

Para optimset, el nombre es HessFcn. Véase Tablas de nombres de opciones actuales y heredadas.

HessianMultiplyFcn

El hessian multiplica la función, especificada como manija de la función. Para los problemas estructurados en grande, esta función computa el producto de la matriz del hessian H*Y sin realmente formar H. La función es de la forma

W = hmfun(Hinfo,Y)

donde Hinfo contiene una matriz utilizada para calcular H*Y.

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

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

Y es una matriz que tiene el mismo número de filas que las dimensiones del problema. La matriz W = H*Y, aunque H no se forma explícitamente. fmincon utiliza Hinfo para calcular el precondicionador. Para obtener información sobre cómo suministrar valores para cualquier parámetro adicional hmfun necesidades, consulte Pasar parámetros adicionales.

Nota

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

Véase Hessian multiplique la función. Vea Minimización con el hessian estructurado denso, igualdades lineares para un ejemplo.

Para optimset, el nombre es HessMult. Véase Tablas de nombres de opciones actuales y heredadas.

HessPattern

Patrón de la SPARSIS del hessian para comparación finito. Establecer HessPattern(i,j) = 1 cuando se puede tener ∂2fun/∂x(i)x(j) ≠ 0. De lo contrario, establezca HessPattern(i,j) = 0.

Use HessPattern cuando sea inconveniente calcular la matriz de hessian H en fun, pero usted puede determinar (por ejemplo, por inspección) cuando el componente idel gradiente de fun depende de x(j). fmincon puede aproximar H a través de diferencias finitas escasas (del gradiente) si proporciona el estructura de la SPARSIS de H como el valor para HessPattern. En otras palabras, proporcione la ubicación de los no ceros.

Cuando se desconoce la estructura, no establezca HessPattern. El comportamiento predeterminado es como si HessPattern es una matriz densa de unos. A continuación, fmincon computa una aproximación completa de diferencia finita en cada iteración. Este cómputo puede ser muy costoso para los problemas grandes, así que es generalmente mejor determinar la estructura de la SPARSIS.

MaxPCGIter

Número máximo de iteraciones del gradiente conjugado precondicionado (PCG), un escalar positivo. El valor predeterminado es max(1,floor(numberOfVariables/2)) para los problemas con restricciones limitadas y es numberOfVariables para los problemas con restricciones de igualdad. Para obtener más información, consulte Método de gradiente de conjugado precondicionado.

PrecondBandWidth

Ancho de banda superior del precondicionador para PCG, un entero no negativo. De forma predeterminada, se utiliza el preacondicionamiento diagonal (ancho de banda superior de 0). Para algunos problemas, aumentar el ancho de banda reduce el número de iteraciones de PCG. El ajuste de PrecondBandWidth a Inf utiliza una factorización directa (Cholesky) en lugar de los gradientes conjugados (CG). La factorización directa es computacionalmente más costosa que la CG, pero produce un paso de mejor calidad hacia la solución.

SubproblemAlgorithm

Determina cómo se calcula el paso de iteración. El valor predeterminado, 'cg', toma un paso más rápido pero menos preciso que 'factorization'. Véase algoritmo reflexivo de la región de confianza fmincon.

TolPCG

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

Algoritmo de conjunto activo
FunctionTolerance

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

Para optimset, el nombre es TolFun. Véase 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 de paso de búsqueda de línea. El desplazamiento total en x satisface x(i)| ≤ relLineSrchBnd· max(|x(i)|,|typicalx(i)|). Esta opción proporciona control sobre la magnitud de los desplazamientos en x para los casos en los que el solucionador toma medidas que se consideran demasiado grandes. El valor predeterminado no es ningún límite ([]).

RelLineSrchBndDuration

Número de iteraciones para las que el límite especificado en RelLineSrchBnd debe estar activo (el valor predeterminado es 1).

TolConSQP

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

Algoritmo de punto interior
HessianApproximation

Elige cómo fmincon calcula el hessian (ver Hessian como entrada). Las opciones son:

  • 'bfgs' (por defecto)

  • 'finite-difference'

  • 'lbfgs'

  • {'lbfgs',Positive Integer}

Nota

Para utilizar HessianApproximation, tanto HessianFcn como HessianMultiplyFcn deben ser entradas vacías ([]).

Para optimset, el nombre es Hessian y los valores son 'user-supplied', 'bfgs', 'lbfgs', 'fin-diff-grads', 'on'o 'off'. Véase Tablas de nombres de opciones actuales y heredadas.

HessianFcn

Si [] (default), fmincon aproxima el hessian usando diferencias finitas, o utiliza un HessianMultiplyFcnproporcionado. Si un identificador de función, fmincon utiliza HessianFcn para calcular el hessian. Véase Hessian como entrada.

Para optimset, el nombre es HessFcn. Véase Tablas de nombres de opciones actuales y heredadas.

HessianMultiplyFcn

Función proporcionada por el usuario que da un producto del hessian-tiempo-vector (véase Hessian multiplique la función). Pase un identificador de función.

Nota

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

Para optimset, el nombre es HessMult. Véase Tablas de nombres de opciones actuales y heredadas.

HonorBounds

El true predeterminado garantiza que las restricciones enlazadas se cumplen en cada iteración. Deshabilitar por configuración a false.

Para optimset, el nombre es AlwaysHonorConstraints y los valores son 'bounds' o 'none'. Véase Tablas de nombres de opciones actuales y heredadas.

InitBarrierParam

Valor inicial de la barrera, un escalar positivo. A veces podría ayudar a probar un valor por encima de la 0.1predeterminada, especialmente si las funciones de objetivo o restricción son grandes.

InitTrustRegionRadius

Radio inicial de la región fiduciaria, un escalar positivo. En problemas mal escalados puede ayudar a elegir un valor menor que el predeterminado n, donde n es el número de variables.

MaxProjCGIter

Una tolerancia (criterio de detención) para el número de iteraciones de gradiente conjugado proyectado; 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 de ObjectiveLimit y la iteración es factible, las iteraciones se detienen, porque el problema es presumiblemente ilimitado. El valor predeterminado es -1e20.

ScaleProblem

true hace que el algoritmo normaliza todas las restricciones y la función objetiva. Deshabilite estableciendo el valor de falsepredeterminado.

Para optimset, los valores son 'obj-and-constr' o 'none'. Véase Tablas de nombres de opciones actuales y heredadas.

SubproblemAlgorithm

Determina cómo se calcula el paso de iteración. El defecto, 'factorization', es generalmente más rápido que 'cg' (gradiente conjugado), aunque 'cg' pudo ser más rápido para los problemas grandes con los Hessians densos. Véase algoritmo del punto interior de fmincon.

TolProjCG

Una tolerancia relativa (criterio de detención) para el algoritmo de gradiente conjugado 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 conjugado 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.

Algoritmos de legado SQP y SQP
ObjectiveLimit

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

ScaleProblem

true hace que el algoritmo normaliza todas las restricciones y la función objetiva. Deshabilite estableciendo el valor de falsepredeterminado.

Para optimset, los valores son 'obj-and-constr' o 'none'. Véase Tablas de nombres de opciones actuales y heredadas.

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

Estructura de problemas, especificada como una estructura con los siguientes campos:

Nombre de campoEntrada

Objetivo

Función objetiva

x0

Punto inicial para x

Aineq

Matriz para restricciones de desigualdad lineal

bineq

Vector para restricciones de desigualdad lineal

Aeq

Matriz para restricciones de igualdad lineal

beq

Vector para restricciones de igualdad lineal
lbVector de límites inferiores
ubVector de límites superiores

nonlcon

Función de restricción no lineal

solver

'fmincon'

options

Opciones creadas con optimoptions

Debe proporcionar al menos los campos objective, x0, solvery options en la estructura problem .

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

Tipos de datos: struct

Argumentos de salida

contraer todo

Solución, regresó como un vector real o matriz real. El tamaño de x es el mismo que el tamaño de x0. Típicamente, x es una solución local al problema cuando exitflag es positivo. Para obtener información sobre la calidad de la solución, consulte Cuando el solucionador tiene éxito.

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

Razón fmincon se detuvo, regresó como un entero.

Todos los algoritmos:

1

La medida de optimización de primer orden fue menor que options.OptimalityTolerance, y la infracción de restricción máxima fue menor que options.ConstraintTolerance.

0

Número de iteraciones excedidas options.MaxIterations o número de evaluaciones de función excedidas options.MaxFunctionEvaluations.

-1

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

-2

No se encontró ningún punto factible.

Todos los algoritmos excepto active-set:

2

El cambio en x fue menor que options.StepTolerance y la infracción de restricción máxima fue menor que options.ConstraintTolerance.

sólo algoritmo trust-region-reflective :

3

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

sólo algoritmo active-set :

4

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

5

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

algoritmos de interior-point, sqp-legacyy sqp :

-3

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

Información sobre el proceso de optimización, devuelto como 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 (sólo algoritmosactive-set y sqp )

constrviolation

Máximo de funciones de restricción

stepsize

Longitud del último desplazamiento en x (no en algoritmo active-set )

algorithm

Algoritmo de optimización utilizado

cgiterations

Número total de iteraciones PCG (algoritmostrust-region-reflective y interior-point )

firstorderopt

Medida de la optimalidad de primer orden

message

Mensaje de salida

Multiplicadores de Lagrange en la solución, devueltos como estructura con campos:

lower

Límites inferiores correspondientes a lb

upper

Límites superiores correspondientes a ub

ineqlin

Desigualdades lineales correspondientes a A y b

eqlin

Igualdades lineales correspondientes a Aeq y beq

ineqnonlin

Desigualdades no lineales correspondientes a la c en nonlcon

eqnonlin

Igualdades no lineales correspondientes a la ceq en nonlcon

Gradiente en la solución, regresó como un vector real. grad da el gradiente de fun en el punto x(:).

Hessian aproximado, regresó como una matriz real. Para el significado de hessian, vea Hessian.

Limitaciones

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

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

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

    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 HessianMultiplyFcn ; uno para trust-region-reflective, y otro para interior-point. Véase Incluyendo los hessianos.

    • Para trust-region-reflective, el hessian del Lagrange es igual que el hessian de la función objetiva. Usted pasa ese hessian como la tercera salida de la función objetiva.

    • Para interior-point, el hessian del Lagrange implica los multiplicadores de Lagrange y los Hessians de las funciones no lineales de la restricción. Se pasa el hessian como una función separada que tiene en cuenta tanto el punto actual x y la estructura del multiplicador de Lagrange lambda.

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

Más acerca de

contraer todo

Hessian como entrada

fmincon utiliza un hessian como entrada opcional. Este hessian es la matriz de los segundos derivados del Lagrange (véase Ecuación 1), a saber,

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

Para los detalles de cómo suministrar un hessian a los algoritmos de trust-region-reflective o de interior-point , vea Incluyendo los hessianos.

Los algoritmos de active-set y de sqp no aceptan un hessian de la entrada. Comcomputan una aproximación del cuasi-neutonio al hessian del Lagrange.

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

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

  • 'lbfgs'fmincon calcula el hessian por una aproximación cuasi-Newton de memoria limitada y de gran escala. Se utiliza la memoria predeterminada, 10 iteraciones.

  • {'lbfgs',positive integer}fmincon calcula el hessian por una aproximación cuasi-Newton de memoria limitada y de gran escala. El entero positivo especifica el número de iteraciones pasadas que se deben recordar.

  • 'finite-difference'fmincon calcula un producto de vector de tiempo de Hesse por diferencias finitas de los degradados. Debe proporcionar el gradiente de la función objetiva, y también los gradientes de las restricciones no lineales (si existen). Establezca la opción 'SpecifyObjectiveGradient' en true y, si corresponde, la opción 'SpecifyConstraintGradient' en true. Debe establecer el 'SubproblemAlgorithm' en 'cg'.

,

Hessian multiplique la función

Los algoritmos interior-point y trust-region-reflective le permiten suministrar una función de multiplicación de hessian. Esta función da el resultado de un hessian-tiempo-producto del vector, sin el cómputo del hessian directamente. Esto puede ahorrar memoria. Para obtener más información, consulte Hessian multiplique la función.

Algoritmos

contraer todo

Elegir el algoritmo

Para obtener ayuda para elegir el algoritmo, consulte algoritmos fmincon. Para establecer el algoritmo, utilice optimoptions para crear optionsy utilice el par nombre-valor 'Algorithm'.

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

Optimización de puntos interiores

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

SQP y SQP-optimización de legados

Los algoritmos fmincon 'sqp' y 'sqp-legacy' son similares al algoritmo 'active-set' descrito en Optimización de conjunto activo. algoritmo de fmincon SQP describe las principales diferencias. En Resumen, estas diferencias son:

Optimización de conjunto activo

fmincon utiliza un 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. fmincon actualiza una estimación del hessian del Lagrange en cada iteración utilizando la fórmula BFGS (consulte fminunc y referencias [7] y [8]).

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

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

Confianza-región-optimización reflexiva

El algoritmo de 'trust-region-reflective' es un método subespacial de la confianza-región y se basa en el método interior-reflexivo del neutonio descrito en [3] y [4]. Cada iteración implica la solución aproximada de un sistema lineal grande utilizando el método de gradientes conjugados precondicionados (PCG). Consulte las descripciones del método de gradiente de conjugado precondicionado de la región Trust en algoritmo reflexivo de la región de confianza 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.

Introducido antes de R2006a