fmincon
Encontrar el mínimo de una función multivariable no lineal restringida
Sintaxis
Descripción
Solver de programación no lineal.
Encuentra el mínimo de un problema especificado por
b y beq son vectores, A y Aeq son matrices, c(x) y ceq(x) son funciones que devuelven matrices, y f(x) es una función que devuelve un escalar. f(x), c(x) y ceq(x) pueden ser funciones no lineales.
x, lb y ub se pueden pasar como vectores o matrices; consulte Argumentos de matriz.
comienza en x
= fmincon(fun
,x0
,A
,b
)x0
e intenta encontrar un minimizador x
de la función que se describe en fun
sujeto a las desigualdades lineales A*x ≤ b
. x0
puede ser un escalar, un vector o una matriz.
Nota
En Pasar parámetros adicionales se explica cómo pasar parámetros adicionales a la función objetivo y a las funciones de restricción no lineales, si fuera necesario.
define un conjunto de límites inferiores y superiores en las variables de diseño de x
= fmincon(fun
,x0
,A
,b
,Aeq
,beq
,lb
,ub
)x
, de modo que la solución siempre se encuentra en el rango lb
≤ x
≤ ub
. Si no existen igualdades, establezca Aeq = []
y beq = []
. Si x(i)
está desacotado por abajo, establezca lb(i) = -Inf
, y si x(i)
está desacotado por arriba, establezca ub(i) = Inf
.
Nota
Si los límites de entrada especificados para un problema son inconsistentes, fmincon
genera un error. En este caso, la salida x
es x0
y fval
es []
.
Para el algoritmo 'interior-point'
predeterminado, fmincon
establece los componentes de x0
que vulneran los límites lb ≤ x ≤ ub
, o que equivalen a un límite en el interior de la región acotada. Para el algoritmo 'trust-region-reflective'
, fmincon
establece los componentes vulneradores en el interior de la región acotada. Para los demás algoritmos, fmincon
establece los componentes vulneradores en el límite más próximo. Los componentes que respetan los límites no se cambian. Consulte Las iteraciones pueden vulnerar las restricciones.
[
devuelve adicionalmente:x
,fval
,exitflag
,output
,lambda
,grad
,hessian
] = fmincon(___)
lambda
: estructura con campos que contienen los multiplicadores de Lagrange en la soluciónx
.grad
: gradiente defun
en la soluciónx
.hessian
: matriz hessiana defun
en la soluciónx
. Consulte Matriz hessiana de fmincon.
Ejemplos
Restricción de desigualdad lineal
Encuentre el valor mínimo de la función de Rosenbrock cuando hay una restricción de desigualdad lineal.
Establezca la función objetivo fun
en la función de Rosenbrock. Es bien sabido que la función de Rosenbrock es difícil de minimizar. Tiene su valor objetivo mínimo de 0 en el punto (1,1). Para obtener más información, consulte Problema no lineal restringido utilizando la tarea Optimize de Live Editor o el solver.
fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
Encuentre el valor mínimo comenzando por el punto [-1,2]
, restringido para tener . Exprese esta restricción con el formato Ax <= b
tomando A = [1,2]
y b = 1
. Tenga en cuenta que esta restricción supone que la solución no sea la solución no restringida (1,1), porque en ese punto .
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
Desigualdad lineal y restricción de igualdad
Encuentre el valor mínimo de la función de Rosenbrock cuando hay tanto una restricción de desigualdad lineal como una restricción de igualdad lineal.
Establezca la función objetivo fun
en la función de Rosenbrock.
fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
Encuentre el valor mínimo comenzando por el punto [0.5,0]
, restringido para tener y .
Exprese la restricción de desigualdad lineal con el formato
A*x <= b
tomandoA = [1,2]
yb = 1
.Exprese la restricción de igualdad lineal con el formato
Aeq*x = beq
tomandoAeq = [2,1]
ybeq = 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
Minimizar con límites de restricción
Encuentre el mínimo de una función objetivo con presencia de límites de restricción.
La función objetivo es una función algebraica simple de dos variables.
fun = @(x)1+x(1)/(1+x(2)) - 3*x(1)*x(2) + x(2)*(1+x(1));
Fíjese en la región en la que tiene valores positivos, y .
lb = [0,0]; ub = [1,2];
El problema no tiene restricciones lineales, así que establezca esos argumentos en []
.
A = []; b = []; Aeq = []; beq = [];
Pruebe un punto inicial en el medio de la región.
x0 = (lb + ub)/2;
Resuelva el problema.
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 value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance.
x = 1×2
1.0000 2.0000
Un punto inicial distinto puede conllevar una solución distinta.
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 value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance.
x = 1×2
10-6 ×
0.4000 0.4000
Para determinar qué solución es mejor, consulte Obtener el valor de la función objetivo.
Restricciones no lineales
Encuentre el mínimo de una función sujeta a restricciones no lineales
Encuentre el punto en el que la función de Rosenbrock se minimiza dentro de un círculo, también sujeto a límites de restricción.
fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
Fíjese en la región ,
.
lb = [0,0.2]; ub = [0.5,0.8];
Fíjese también en el círculo centrado en [1/3,1/3] con radio 1/3. Copie el código siguiente en un archivo llamado circlecon.m
en la ruta de MATLAB®.
% 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 = [];
Escoja un punto inicial que satisfaga todas las restricciones.
x0 = [1/4,1/4];
Resuelva 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
Opciones no predeterminadas
Establezca opciones para ver las iteraciones según se produzcan y para utilizar un algoritmo diferente.
Para observar el proceso de resolución fmincon
, establezca la opción Display
en 'iter'
. Pruebe también el algoritmo 'sqp'
, que en ocasiones 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, . Cree primero una función que represente la restricción no lineal. Guárdela como un archivo llamado unitdisk.m
en la ruta de MATLAB®.
type unitdisk.m
function [c,ceq] = unitdisk(x) c = x(1)^2 + x(2)^2 - 1; ceq = [];
Cree las especificaciones de problema restantes. Después, 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.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.386e-12 1.000e+00 2.095e-06 1.502e-05 13 58 4.567481e-02 0.000e+00 1.000e+00 2.193e-12 1.406e-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 = 1×2
0.7864 0.6177
Para obtener detalles de la visualización iterativa, consulte Visualización iterativa.
Incluir gradiente
Incluya una evaluación del gradiente en la función objetivo para obtener cálculos más rápidos o más fiables.
Incluya la evaluación del gradiente como salida condicionalizada en el archivo de función objetivo. Para obtener más detalles, consulte Incluir gradientes y matrices hessianas. La función objetivo es la función de Rosenbrock,
que tiene el 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 la ruta de MATLAB®.
Cree opciones para utilizar el gradiente de función objetivo.
options = optimoptions('fmincon','SpecifyObjectiveGradient',true);
Cree las otras entradas para el problema. Después, llame 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 value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance. x = 1.0000 1.0000
Usar una estructura de problema
Resuelva el mismo problema que en Opciones no predeterminadas utilizando una estructura de problema en lugar de argumentos separados.
Cree las opciones y una estructura de problema. Consulte en problem los nombres de campo y los campos necesarios.
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];
La función de restricción no lineal unitdisk
aparece al final de este ejemplo. Incluya la función de restricción no lineal en problem
.
problem.nonlcon = @unitdisk;
Resuelva 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.386e-12 1.000e+00 2.095e-06 1.502e-05 13 58 4.567481e-02 0.000e+00 1.000e+00 2.193e-12 1.406e-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 = 1×2
0.7864 0.6177
La visualización iterativa y la solución son las mismas que en Opciones no predeterminadas.
El siguiente código crea la función unitdisk
.
function [c,ceq] = unitdisk(x) c = x(1)^2 + x(2)^2 - 1; ceq = []; end
Obtener el valor de la función objetivo
Llame a fmincon
con la salida fval
para obtener el valor de la función objetivo en la solución.
El ejemplo Minimizar con límites de restricción muestra dos soluciones. ¿Cuál es mejor? Ejecute el ejemplo solicitando tanto la salida fval
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 = (lb + ub)/2; [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 value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance.
x = 1×2
1.0000 2.0000
fval = -0.6667
Ejecute el problema utilizando un punto de inicio x0
diferente.
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 value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance.
x2 = 1×2
10-6 ×
0.4000 0.4000
fval2 = 1.0000
Esta solución tiene un valor de función objetivo fval2
= 1, que es superior al primer valor fval
= –0,6667. La primera solución x
tiene un valor de función objetivo mínimo local inferior.
Examinar la solución utilizando salidas adicionales
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, . Cree primero una función que represente la restricción no lineal. Guárdela como un archivo llamado
unitdisk.m
en la ruta de MATLAB®.
function [c,ceq] = unitdisk(x)
c = x(1)^2 + x(2)^2 - 1;
ceq = [];
Cree las especificaciones de problema 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
, exitflag
y 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 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: 'Local minimum found that satisfies the constraints....' bestfeasible: [1x1 struct]
El valor
exitflag
1
indica que la solución es un mínimo local.La estructura
output
informa de varias estadísticas sobre el proceso de resolución. En concreto, indica el número de iteraciones enoutput.iterations
, el número de evaluaciones de función enoutput.funcCount
y la factibilidad enoutput.constrviolation
.
Obtener todas las salidas
De forma opcional, fmincon
devuelve varias salidas que puede utilizar para analizar la solución indicada.
Configure el problema de minimizar la función de Rosenbrock en el disco de la unidad. Cree primero una función que represente la restricción no lineal. Guárdela como un archivo llamado unitdisk.m
en la ruta de MATLAB®.
function [c,ceq] = unitdisk(x)
c = x(1)^2 + x(2)^2 - 1;
ceq = [];
Cree las especificaciones de problema 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: 'Local minimum found that satisfies the constraints....' bestfeasible: [1x1 struct] 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
proporciona el valor del gradiente de la función objetivo en la soluciónx
.La salida
hessian
se describe en Matriz hessiana de fmincon.
Argumentos de entrada
fun
— Función que desea minimizar
identificador de función | nombre de función
Función que desea minimizar, especificada como un identificador de función o un nombre de función. fun
es una función que acepta un vector o un arreglo x
y devuelve un escalar real f
, con la función objetivo evaluada en x
.
fmincon
pasa x
a la función objetivo y a todas las funciones de restricción no lineales en forma de argumento x0
. Por ejemplo, si x0
es un arreglo de 5 por 3, fmincon
pasa x
a fun
como un arreglo de 5 por 3. Sin embargo, fmincon
multiplica las matrices de restricción lineales A
o Aeq
por x
después de convertir x
en el vector columna x(:)
.
Especifique fun
como un identificador de función para un archivo:
x = fmincon(@myfun,x0,A,b)
donde myfun
es una función de MATLAB® como
function f = myfun(x) f = ... % Compute function value at x
También puede especificar fun
como un identificador de función para una función anónima:
x = fmincon(@(x)norm(x)^2,x0,A,b);
Si puede calcular el gradiente de fun
y la opción SpecifyObjectiveGradient
está establecida en true
, según establece
options = optimoptions('fmincon','SpecifyObjectiveGradient',true)
fun
debe devolver el vector gradiente g(x)
en el segundo argumento de salida.
Si también puede calcular la matriz hessiana 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 hessiano H(x)
, una matriz simétrica, en un tercer argumento de salida. fun
puede dar una matriz hessiana dispersa. Consulte Matriz hessiana para los algoritmos fminunc trust-region o fmincon trust-region-reflective para ver más detalles.
Si también puede calcular la matriz hessiana y la opción Algorithm
está establecida en 'interior-point'
, hay una forma diferente de pasar la matriz hessiana a fmincon
. Para obtener más información, consulte Matriz hessiana para el algoritmo fmincon interior-point. Para consultar un ejemplo en el que se utilice Symbolic Math Toolbox™ para calcular el gradiente y la matriz hessiana, consulte Calcular gradientes y matrices hessianas con Symbolic Math Toolbox.
Los algoritmos interior-point
y trust-region-reflective
le permiten proporcionar una función de multiplicación de matriz hessiana. Esta función da el resultado de un producto del vector por la matriz hessiana sin calcular la matriz hessiana directamente. Esto puede ahorrar memoria. Consulte Función de multiplicación de matriz hessiana.
Ejemplo: fun = @(x)sin(x(1))*cos(x(2))
Tipos de datos: char
| function_handle
| string
x0
— Punto inicial
vector real | arreglo real
Punto inicial, especificado como un vector real o un arreglo real. Los solvers utilizan el número de elementos y el tamaño de x0
para determinar el número y el tamaño de las variables que acepta fun
.
Algoritmo
'interior-point'
: si la opciónHonorBounds
estrue
(valor predeterminado),fmincon
restablece los componentesx0
que se encuentren dentro o fuera de los límiteslb
oub
a los valores situados estrictamente entre los límites.Algoritmo
'trust-region-reflective'
:fmincon
restablece los componentesx0
no factibles a componentes factibles con respecto a los límites o a las igualdades lineales.Algoritmo
'sqp'
,'sqp-legacy'
o'active-set'
:fmincon
restablece los componentesx0
que están fuera de los límites a los valores de los límites correspondientes.
Ejemplo: x0 = [1,2,3,4]
Tipos de datos: double
A
— Restricciones de desigualdad lineales
matriz real
Restricciones de desigualdad lineales, especificadas como una matriz real. A
es una matriz de M
por N
, donde M
es el número de desigualdades y N
es el número de variables (número de elementos de x0
). Para problemas grandes, pase A
como una matriz dispersa.
A
codifica las M
desigualdades lineales
A*x <= b
,
donde x
es el vector columna de N
variables x(:)
y b
es un vector columna con M
elementos.
Por ejemplo, considere estas desigualdades:
x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30,
Especifique las desigualdades introduciendo las siguientes restricciones.
A = [1,2;3,4;5,6]; b = [10;20;30];
Ejemplo: Para especificar que los componentes de x suman 1 o menos, utilice A = ones(1,N)
y b = 1
.
Tipos de datos: double
b
— Restricciones de desigualdad lineales
vector real
Restricciones de desigualdad lineales, especificadas como un vector real. b
es un vector de M
elementos relacionado con la matriz A
. Si pasa b
como un vector fila, los solvers convierten internamente b
en el vector columna b(:)
. Para problemas grandes, pase b
como un vector disperso.
b
codifica las M
desigualdades lineales
A*x <= b
,
donde x
es el vector columna de N
variables x(:)
y A
es una matriz de tamaño M
por N
.
Por ejemplo, considere estas desigualdades:
x1 + 2x2 ≤ 10
3x1 + 4x2 ≤ 20
5x1 + 6x2 ≤ 30.
Especifique las desigualdades introduciendo las siguientes restricciones.
A = [1,2;3,4;5,6]; b = [10;20;30];
Ejemplo: Para especificar que los componentes de x suman 1 o menos, utilice A = ones(1,N)
y b = 1
.
Tipos de datos: double
Aeq
— Restricciones de igualdad lineales
matriz real
Restricciones de igualdad lineales, especificadas como una matriz real. Aeq
es una matriz de Me
por N
, donde Me
es el número de igualdades y N
es el número de variables (número de elementos de x0
). Para problemas grandes, pase Aeq
como una matriz dispersa.
Aeq
codifica las Me
igualdades lineales
Aeq*x = beq
,
donde x
es el vector columna de N
variables x(:)
y beq
es un vector columna con Me
elementos.
Por ejemplo, considere estas desigualdades:
x1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x3 = 20,
Especifique las desigualdades introduciendo las siguientes restricciones.
Aeq = [1,2,3;2,4,1]; beq = [10;20];
Ejemplo: Para especificar que los componentes de x suman 1, utilice Aeq = ones(1,N)
y beq = 1
.
Tipos de datos: double
beq
— Restricciones de igualdad lineales
vector real
Restricciones de igualdad lineales, especificadas como un vector real. beq
es un vector de Me
elementos relacionado con la matriz Aeq
. Si pasa beq
como un vector fila, los solvers convierten internamente beq
en el vector columna beq(:)
. Para problemas grandes, pase beq
como un vector disperso.
beq
codifica las Me
igualdades lineales
Aeq*x = beq
,
donde x
es el vector columna de N
variables x(:)
y Aeq
es una matriz de tamaño Me
por N
.
Por ejemplo, considere estas igualdades:
x1 + 2x2 + 3x3 = 10
2x1 + 4x2 + x3 = 20.
Especifique las igualdades introduciendo las siguientes restricciones.
Aeq = [1,2,3;2,4,1]; beq = [10;20];
Ejemplo: Para especificar que los componentes de x suman 1, utilice Aeq = ones(1,N)
y beq = 1
.
Tipos de datos: double
lb
— Límites inferiores
vector real | arreglo real
Límites inferiores, especificados como un vector real o un arreglo real. Si el número de elementos en x0
es igual al número de elementos en lb
, entonces lb
especifica que
x(i) >= lb(i)
para todo i
.
Si numel(lb) < numel(x0)
, entonces lb
especifica que
x(i) >= lb(i)
para 1 <= i <= numel(lb)
.
Si lb
tiene menos elementos que x0
, los solvers emiten una advertencia.
Ejemplo: Para especificar que todos los componentes de x son positivos, utilice lb = zeros(size(x0))
.
Tipos de datos: double
ub
— Límites superiores
vector real | arreglo real
Límites superiores, especificados como un vector real o un arreglo real. Si el número de elementos en x0
es igual al número de elementos en ub
, entonces ub
especifica que
x(i) <= ub(i)
para todo i
.
Si numel(ub) < numel(x0)
, entonces ub
especifica que
x(i) <= ub(i)
para 1 <= i <= numel(ub)
.
Si ub
tiene menos elementos que x0
, los solvers emiten una advertencia.
Ejemplo: Para especificar que todos los componentes de x son menores que 1, utilice ub = ones(size(x0))
.
Tipos de datos: double
nonlcon
— Restricciones no lineales
identificador de función | nombre de función
Límites no lineales, especificados como un identificador de función o un nombre de función. nonlcon
es una función que acepta un vector o arreglo x
y devuelve dos arreglos, c(x)
y ceq(x)
.
c(x)
es el arreglo de restricciones de desigualdad no lineales dex
.fmincon
intenta satisfacerc(x) <= 0
para todas las entradas dec
.ceq(x)
es el arreglo de restricciones de igualdad no lineales dex
.fmincon
intenta satisfacerceq(x) = 0
para todas las entradas deceq
.
Por ejemplo:
x = fmincon(@myfun,x0,A,b,Aeq,beq,lb,ub,@mycon)
donde mycon
es una función de MATLAB como
function [c,ceq] = mycon(x) c = ... % Compute nonlinear inequalities at x. ceq = ... % Compute nonlinear equalities at x.
SpecifyConstraintGradient
es true
, según estableceoptions = optimoptions('fmincon','SpecifyConstraintGradient',true)
nonlcon
también debe devolver, en el tercer y el cuarto argumentos de salida, GC
, el gradiente de c(x)
, y GCeq
, el gradiente de ceq(x)
. GC
y GCeq
pueden ser dispersos o densos. Si GC
o GCeq
son grandes, con relativamente pocas entradas distintas de cero, ahorre tiempo de ejecución y memoria en el algoritmo interior-point
representándolos como matrices dispersas. Para obtener más información, consulte Restricciones no lineales.
Tipos de datos: char
| function_handle
| string
options
— Opciones de optimización
salida de optimoptions
| estructura como la que devuelve optimset
Opciones de optimización, especificadas como la salida de optimoptions
o una estructura como la que devuelve optimset
.
Algunas opciones son aplicables a todos los algoritmos y otras son relevantes para algoritmos particulares. Consulte Referencia de opciones de optimización para ver información detallada.
Algunas opciones no aparecen en la visualización optimoptions
. Estas opciones se muestran en cursiva en la siguiente tabla. Para obtener más detalles, consulte Consultar las opciones de optimización.
Todos los algoritmos | |
Algorithm | Escoja el algoritmo de optimización:
Para obtener información sobre cómo elegir el algoritmo, consulte Seleccionar el algoritmo. El algoritmo
Si selecciona el algoritmo Los algoritmos |
CheckGradients | Compare las derivadas proporcionadas por el usuario (gradientes de objetivo o de restricciones) con las derivadas de diferencias finitas. Las opciones son Para |
ConstraintTolerance | Tolerancia en la vulneración de restricciones, un escalar positivo. La opción predeterminada es Para |
Diagnóstico | Muestre información de diagnóstico sobre la función que se desea minimizar o resolver. Las opciones son |
DiffMaxChange | Cambio máximo en variables para gradientes de diferencias finitas (un escalar positivo). La opción predeterminada es |
DiffMinChange | Cambio mínimo en variables para gradientes de diferencias finitas (un escalar positivo). La opción predeterminada es |
Display | Nivel de visualización (consulte Visualización iterativa):
|
FiniteDifferenceStepSize | Factor de tamaño de paso de escalar o vector para diferencias finitas. Cuando establece
sign′(x) = sign(x) excepto sign′(0) = 1 . Las diferencias finitas centrales son
FiniteDifferenceStepSize se expande a un vector. La opción predeterminada es sqrt(eps) para diferencias finitas progresivas y eps^(1/3) para diferencias finitas centrales. Para |
FiniteDifferenceType | Las diferencias finitas, utilizadas para estimar gradientes, son o bien
Para |
FunValCheck | Compruebe si los valores de la función objetivo son válidos. El ajuste predeterminado, |
MaxFunctionEvaluations | Número máximo de evaluaciones de función permitidas, un entero positivo. El valor predeterminado para todos los algoritmos, excepto Para |
MaxIterations | Número máximo de iteraciones permitidas, un entero positivo. El valor predeterminado para todos los algoritmos, excepto Para |
OptimalityTolerance | Tolerancia de terminación en la optimalidad de primer orden (un escalar positivo). La opción predeterminada es Para |
OutputFcn | Especifique una o varias funciones definidas por el usuario a las que una función de optimización llame en cada iteración. Pase un identificador de función o un arreglo de celdas de identificadores de función. La opción predeterminada es ninguno ( |
PlotFcn | Representa varias medidas de progreso mientras el algoritmo se ejecuta; seleccione una de las gráficas predefinidas o escriba la suya propia. Pase un nombre de función de gráfica integrada, un identificador de función o un arreglo de celdas de nombres de función de gráfica integrada o identificadores de función. Para funciones de gráfica personalizadas, pase identificadores de función. La opción predeterminada es ninguno (
Las funciones de gráfica personalizadas utilizan la misma sintaxis que las funciones de salida. Consulte Funciones de salida para Optimization Toolbox y Output Function and Plot Function Syntax. Para |
SpecifyConstraintGradient | Gradiente para las funciones de restricción no lineales definidas por el usuario. Si se establece en el valor predeterminado, Para |
SpecifyObjectiveGradient | Gradiente para la función objetivo definida por el usuario. Consulte la descripción de Para |
StepTolerance | Tolerancia de terminación en Para |
TypicalX | Valores El algoritmo |
UseParallel | Cuando |
Algoritmo trust-region-reflective | |
FunctionTolerance | Tolerancia de terminación en el valor de la función, un escalar positivo. La opción predeterminada es Para |
HessianFcn | En caso de Para |
HessianMultiplyFcn | Función de multiplicación de matriz hessiana, especificada como un identificador de función. Para problemas estructurados a gran escala, esta función calcula el producto de la matriz hessiana W = hmfun(Hinfo,Y) donde El primer argumento es el mismo que el tercer argumento devuelto por la función objetivo [f,g,Hinfo] = fun(x)
Nota Para utilizar la opción Consulte Función de multiplicación de matriz hessiana. Para ver un ejemplo, consulte Minimization with Dense Structured Hessian, Linear Equalities. Para |
HessPattern | Patrón de dispersión de la matriz hessiana para diferenciación finita. Establezca Utilice Cuando la estructura sea desconocida, no establezca |
MaxPCGIter | Número máximo de iteraciones de gradiente conjugado precondicionado (PCG), un escalar positivo. El valor predeterminado es |
PrecondBandWidth | Ancho de banda superior del precondicionador para PCG, un entero no negativo. De forma predeterminada, se utiliza precondicionamiento diagonal (ancho de banda superior de 0). Para algunos problemas, aumentar el ancho de banda reduce el número de iteraciones PCG. Estableciendo |
SubproblemAlgorithm | Determina cómo se calcula el paso de iteración. La opción predeterminada, Para |
TolPCG | Tolerancia de terminación en la iteración PCG, un escalar positivo. La opción predeterminada es |
Algoritmo de conjunto activo | |
FunctionTolerance | Tolerancia de terminación en el valor de la función, un escalar positivo. La opción predeterminada es Para |
MaxSQPIter | Número máximo de iteraciones SQP permitidas, un entero positivo. La opción predeterminada es |
RelLineSrchBnd | Límite relativo (un valor de escalar no negativo real) de la longitud de paso de búsqueda de recta. El desplazamiento total de x satisface |Δx(i)| ≤ relLineSrchBnd· max(|x(i)|,|typicalx(i)|). Esta opción permite controlar la magnitud de los desplazamientos de x en casos en los que el solver dé pasos que se consideren demasiado grandes. El valor predeterminado es sin límites ( |
RelLineSrchBndDuration | Número de iteraciones para el cual debe estar activo el límite que se especifica en |
TolConSQP | Tolerancia de terminación de vulneración de restricciones SQP de iteración interior, un escalar positivo. La opción predeterminada es |
Algoritmo interior-point | |
BarrierParamUpdate | Especifica cómo
Esta opción puede afectar a la velocidad y la convergencia del solver, pero su efecto no es fácil de predecir. |
EnableFeasibilityMode | Cuando es El modo de factibilidad suele funcionar mejor cuando |
HessianApproximation | Especifica cómo
Nota Para utilizar Para |
HessianFcn | En caso de Para |
HessianMultiplyFcn | Función proporcionada por el usuario que proporciona un producto del vector por la matriz hessiana (consulte Función de multiplicación de matriz hessiana). Pase un identificador de función. Nota Para utilizar la opción Para |
HonorBounds | La opción predeterminada Para |
InitBarrierParam | Valor de barrera inicial, un escalar positivo. En ocasiones puede resultar útil probar un valor superior al valor predeterminado |
InitTrustRegionRadius | Radio inicial de la región de confianza, un escalar positivo. En problemas mal escalados puede resultar útil escoger un valor menor que el valor predeterminado , 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; se trata de una iteración interior, no del número de iteraciones del algoritmo. Este entero positivo tiene un valor predeterminado de |
ObjectiveLimit | Una tolerancia (criterio de detención) que es un escalar. Si el valor de la función objetivo es inferior a |
ScaleProblem |
Para |
SubproblemAlgorithm | Determina cómo se calcula el paso de iteración. El valor predeterminado, Para |
TolProjCG | Una tolerancia (criterio de detención) para el algoritmo de gradiente conjugado proyectado; se trata de una iteración interior, no de la iteración del algoritmo. Este escalar positivo tiene un valor predeterminado de |
TolProjCGAbs | Tolerancia absoluta (criterio de detención) para el algoritmo de gradiente conjugado proyectado; se trata de una iteración interior, no de la iteración del algoritmo. Este escalar positivo tiene un valor predeterminado de |
Algoritmos SQP y SQP antiguo | |
ObjectiveLimit | Una tolerancia (criterio de detención) que es un escalar. Si el valor de la función objetivo es inferior a |
ScaleProblem |
Para |
Ejemplo: options = optimoptions('fmincon','SpecifyObjectiveGradient',true,'SpecifyConstraintGradient',true)
problem
— Estructura de problema
estructura
Estructura de problema, especificada como una estructura con los siguientes campos:
Nombre de campo | Entrada |
---|---|
| Función objetivo |
| Punto inicial para x |
| Matriz para restricciones de desigualdad lineales |
| Vector para restricciones de desigualdad lineales |
| Matriz para restricciones de igualdad lineales |
| Vector para restricciones de igualdad lineales |
lb | Vector de límites inferiores |
ub | Vector de límites superiores |
| Función de restricción no lineal |
| 'fmincon' |
| Opciones creadas con optimoptions |
Debe proporcionar al menos los campos objective
, x0
, solver
y options
en la estructura problem
.
Tipos de datos: struct
Argumentos de salida
x
— Solución
vector real | arreglo real
Solución, devuelta como un vector real o un arreglo real. El tamaño de x
es el mismo que el tamaño de x0
. Habitualmente, 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 solver tiene éxito.
fval
— Valor de la función objetivo en la solución
número real
Valor de la función objetivo en la solución, devuelto como un número real. Por lo general, fval
= fun(x)
.
exitflag
— Razón por la que fmincon
se ha detenido
valor entero
Razón por la que fmincon
se ha detenido, devuelta como un entero.
Todos los algoritmos: | |
| La medida de optimalidad de primer orden fue inferior a |
| El número de iteraciones ha sobrepasado |
| Detenido por una función de salida o una función de gráfica. |
| No se ha encontrado ningún punto factible. |
Todos los algoritmos excepto | |
| El cambio en |
Solo el algoritmo | |
| El cambio en el valor de la función objetivo fue inferior a |
Solo el algoritmo | |
| La magnitud de la dirección de búsqueda fue inferior a 2* |
| La magnitud de la derivada direccional en la dirección de búsqueda fue inferior a 2* |
Algoritmos | |
| La función objetivo en la iteración actual ha descendido por debajo de |
output
— Información sobre el proceso de optimización
estructura
Información sobre el proceso de optimización, devuelta como estructura con campos:
iterations | Número de iteraciones realizadas |
funcCount | Número de evaluaciones de función |
lssteplength | Tamaño del paso de búsqueda de recta relativo a la dirección de búsqueda (solo algoritmos |
constrviolation | Máximo de funciones de restricción |
stepsize | Longitud de último desplazamiento en |
algorithm | Algoritmo de optimización utilizado |
cgiterations | Número total de iteraciones PCG (solo algoritmos |
firstorderopt | Medida de optimalidad de primer orden |
bestfeasible | Mejor punto factible (menor función objetivo) encontrado. Una estructura con los siguientes campos:
Si no se encuentra ningún punto factible, el campo El punto |
message | Mensaje de salida |
lambda
— Multiplicadores de Lagrange en la solución
estructura
Multiplicadores de Lagrange en la solución, devueltos como una estructura con campos:
grad
— Gradiente en la solución
vector real
Gradiente en la solución, devuelto como un vector real. grad
indica el gradiente de fun
en el punto x(:)
.
hessian
— Matriz hessiana aproximada
matriz real
Matriz hessiana aproximada, devuelta como una matriz real. Para saber cuál es el significado de hessian
, consulte Salida de matriz hessiana.
Limitaciones
fmincon
es un método basado en gradientes que está diseñado para funcionar con problemas en los que tanto la función objetivo como la de restricción son continuas y tienen primeras derivadas continuas.Para el algoritmo
'trust-region-reflective'
, debe proporcionar el gradiente enfun
y establecer la opción'SpecifyObjectiveGradient'
entrue
.El algoritmo
'trust-region-reflective'
no permite límites superiores e inferiores iguales. Por ejemplo, silb(2)==ub(2)
,fmincon
arroja 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 distintas para pasar una matriz hessiana y dos sintaxis distintas para pasar una función
HessianMultiplyFcn
, una paratrust-region-reflective
y otra parainterior-point
. Consulte Incluir matrices hessianas.Para
trust-region-reflective
, la matriz hessiana del lagrangiano es la misma que la matriz Hessiana de la función objetivo. La matriz hessiana se pasa como la tercera salida de la función objetivo.Para
interior-point
, la matriz hessiana del lagrangiano implica los multiplicadores de Lagrange y las matrices hessianas de las funciones de restricción no lineales. La matriz hessiana se pasa como una función independiente que tiene en cuenta tanto el punto actualx
como la estructura de multiplicadores de Lagrangelambda
.
Cuando el problema no es factible,
fmincon
intenta minimizar el valor de restricción máximo.
Más acerca de
Matriz hessiana como entrada
fmincon
utiliza una matriz hessiana como entrada opcional. Esta matriz hessiana es la matriz de segundas derivadas del lagrangiano (consulte Ecuación 1), en concreto,
(1) |
Para obtener información detallada sobre cómo proporcionar una matriz hessiana a los algoritmos trust-region-reflective
o interior-point
, consulte Incluir matrices hessianas.
Los algoritmos active-set
y sqp
no aceptan una matriz hessiana de entrada. Calculan una aproximación cuasi-Newton a la matriz hessiana del lagrangiano.
El algoritmo interior-point
tiene varias opciones para la opción 'HessianApproximation'
; consulte Escoger una aproximación de matriz hessiana de entrada para fmincon interior-point:
'bfgs'
:fmincon
calcula la matriz hessiana mediante una aproximación cuasi-Newton densa. Se trata de la aproximación predeterminada de la matriz hessiana.'lbfgs'
:fmincon
calcula la matriz hessiana mediante una aproximación cuasi-Newton a gran escala con memoria limitada. Se utiliza la memoria predeterminada de 10 iteraciones.{'lbfgs',positive integer}
:fmincon
calcula la matriz hessiana mediante una aproximación cuasi-Newton a gran escala con memoria limitada. El entero positivo especifica cuántas iteraciones anteriores se deben recordar.'finite-difference'
:fmincon
calcula un producto del vector por la matriz hessiana mediante diferencias finitas del gradiente o los gradientes. Debe proporcionar el gradiente de la función objetivo y gradientes de restricciones no lineales (en caso de haberlos). Establezca la opción'SpecifyObjectiveGradient'
entrue
y, si procede, la opción'SpecifyConstraintGradient'
entrue
. Debe establecer'SubproblemAlgorithm'
en'cg'
.
Función de multiplicación de matriz hessiana
Los algoritmos interior-point
y trust-region-reflective
le permiten proporcionar una función de multiplicación de matriz hessiana. Esta función da el resultado de un producto del vector por la matriz hessiana sin calcular la matriz hessiana directamente. Esto puede ahorrar memoria. Para obtener más detalles, consulte Función de multiplicación de matriz hessiana.
Algoritmos
Seleccionar el algoritmo
Para obtener ayuda a la hora de seleccionar el algoritmo, consulte Algoritmos fmincon. Para establecer el algoritmo, utilice optimoptions
para crear options
y utilice también el par nombre-valor 'Algorithm'
.
El resto de esta sección le ofrece breves resúmenes o referencias a información sobre cada algoritmo.
Optimización interior-point
Este algoritmo se describe en Algoritmo interior-point de fmincon. Hay una descripción más completa en [1], [41] y [9].
Optimización de SQP y de SQP antiguo
Los algoritmos fmincon
'sqp'
y 'sqp-legacy'
son similares al algoritmo 'active-set'
que se describe en Optimización del conjunto activo. Algoritmo SQP de fmincon describe las principales diferencias. En resumen, tales diferencias son las siguientes:
Optimización del 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 de la matriz hessiana del lagrangiano en cada iteración utilizando la fórmula BFGS (consulte fminunc
y las referencias [7] y [8]).
fmincon
realiza una búsqueda de recta utilizando una función de mérito similar a la que proponen [6], [7] y [8]. El subproblema de QP se resuelve utilizando una estrategia de conjunto activo similar a la que se describe en [5]. Algoritmo fmincon Active-Set describe este algoritmo en detalle.
Consulte también Implementación de SQP para obtener más detalles sobre el algoritmo utilizado.
Optimización trust-region-reflective
El algoritmo 'trust-region-reflective'
es un método de región de confianza de subespacio y se basa en el método de Newton de reflejo de punto interior descrito en [3] y [4]. Cada iteración implica la solución aproximada de un sistema lineal amplio utilizando el método de gradientes conjugados precondicionados (PCG). Consulte las descripciones del método trust-region y del gradiente conjugado precondicionado en Algoritmo fmincon trust-region-reflective.
Funcionalidad alternativa
App
La tarea Optimize de Live Editor proporciona una interfaz visual para 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
Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.
Notas y limitaciones de uso:
fmincon
admite generar código utilizando la funcióncodegen
(MATLAB Coder) o la app MATLAB Coder™. Debe disponer de una licencia de MATLAB Coder para generar código.El hardware de destino debe ser compatible con los cálculos estándar de punto flotante de doble precisión. No puede generar código para cálculos de precisión simple o de punto fijo.
Los destinos de generación de código no utilizan las mismas bibliotecas del núcleo matemático que los solvers de MATLAB. Por ello, las soluciones de generación de código pueden variar con respecto a las soluciones de solver, especialmente en problemas que no están bien condicionados.
Todo el código que se vaya a generar debe ser código de MATLAB. En particular, no puede utilizar una función de caja negra personalizada como una función objetivo para
fmincon
. Puede utilizarcoder.ceval
para evaluar una función personalizada con código C o C++. No obstante, la función personalizada debe llamarse en una función de MATLAB.fmincon
no es compatible con el argumentoproblem
para generar código.[x,fval] = fmincon(problem) % Not supported
Debe especificar la función objetivo y todas las funciones de restricción no lineales utilizando identificadores de función, no cadenas ni nombres de caracteres.
x = fmincon(@fun,x0,A,b,Aeq,beq,lb,ub,@nonlcon) % Supported % Not supported: fmincon('fun',...) or fmincon("fun",...)
Todas las matrices de entrada
fmincon
, comoA
,Aeq
,lb
yub
, deben ser matrices llenas, no dispersas. Puede convertir las matrices dispersas en matrices llenas mediante la funciónfull
.Los argumentos
lb
yub
deben tener el mismo número de entradas que el argumentox0
o deben estar vacíos[]
.Si su hardware de destino no admite límites infinitos, utilice
optim.coder.infbound
.Para optimizar código de manera avanzada con procesadores integrados, también necesita una licencia de Embedded Coder®.
Debe incluir opciones para
fmincon
y especificarlas utilizandooptimoptions
. Las opciones deben incluir la opciónAlgorithm
, establecida en'sqp'
o en'sqp-legacy'
.options = optimoptions('fmincon','Algorithm','sqp'); [x,fval,exitflag] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options);
La generación de código es compatible con estas opciones:
Algorithm
: debe ser'sqp'
o'sqp-legacy'
ConstraintTolerance
FiniteDifferenceStepSize
FiniteDifferenceType
MaxFunctionEvaluations
MaxIterations
ObjectiveLimit
OptimalityTolerance
ScaleProblem
SpecifyConstraintGradient
SpecifyObjectiveGradient
StepTolerance
TypicalX
El código generado tiene verificación de errores limitada para opciones. La forma recomendada para actualizar una opción es utilizar
optimoptions
, no notación de puntos.opts = optimoptions('fmincon','Algorithm','sqp'); opts = optimoptions(opts,'MaxIterations',1e4); % Recommended opts.MaxIterations = 1e4; % Not recommended
No cargue opciones desde un archivo, ya que la generación de código podría fallar. En su lugar, cree opciones en el código.
Normalmente, si especifica una opción no compatible, dicha opción se ignora silenciosamente durante la generación de código. No obstante, si especifica una función de gráfica o una función de salida utilizando notación de puntos, la generación de código puede emitir un error. Para una mayor fiabilidad, especifique únicamente opciones compatibles.
Dado que las funciones de salida y las funciones de gráfica no son compatibles,
fmincon
no devuelve el indicador de salida –1.El código generado a partir de
fmincon
no contiene el campobestfeasible
en una estructuraoutput
devuelta.
Para ver un ejemplo, consulte Code Generation for Optimization Basics.
Soporte paralelo automático
Acelere código mediante la ejecución automática de cálculo paralelo mediante Parallel Computing Toolbox™.
Para ejecutar en paralelo, establezca la opción 'UseParallel'
en true
.
options = optimoptions('
solvername
','UseParallel',true)
Para obtener más información, consulte Usar la computación paralela en Optimization Toolbox.
Historial de versiones
Introducido antes de R2006a
Abrir ejemplo
Tiene una versión modificada de este ejemplo. ¿Desea abrir este ejemplo con sus modificaciones?
Comando de MATLAB
Ha hecho clic en un enlace que corresponde a este comando de MATLAB:
Ejecute el comando introduciéndolo en la ventana de comandos de MATLAB. Los navegadores web no admiten comandos de MATLAB.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)