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.
Busque el mínimo de función multivariable no lineal restringida
Solucionador de programación no lineal.
Busca el mínimo de un problema especificado por
y son vectores, y son matrices, () y () son funciones que devuelven vectores, y () es una función que devuelve un escalar. (), () y () pueden ser funciones no lineales.bbeqAAeqcxceqxfxfxcxceqx
, y se pueden pasar como vectores o matrices; Ver.xlbubArgumentos de matriz
comienza e intenta encontrar un minimizador de la función descrita en sujeto a las desigualdades lineales. puede ser un escalar, un vector o una matriz.x
= fmincon(fun
,x0
,A
,b
)x0
x
fun
A*x ≤ b
x0
Nota
explica cómo pasar parámetros adicionales a la función objetiva y a las funciones de restricción no lineal, si es necesario.Pasar parámetros adicionales
define un conjunto de límites inferior y superior en las variables de diseño, de modo que la solución esté siempre en el rango ≤ ≤.x
= fmincon(fun
,x0
,A
,b
,Aeq
,beq
,lb
,ub
)x
lb
x
ub
Si no existen ecualidades, establezca y.Aeq = []
beq = []
Si se deslimita a continuación, se establece, y si se encuentra sin delimitar, se establece.x(i)
lb(i) = -Inf
x(i)
ub(i) = Inf
Nota
Si los límites de entrada especificados para un problema son incoherentes, se produce un error.fmincon
En este caso, la salida es y es.x
x0
fval
[]
Para el algoritmo predeterminado, establece los componentes de que infringen los límites, o son iguales a un límite, al interior de la región enlazada.'interior-point'
fmincon
x0
lb ≤ x ≤ ub
Para el algoritmo, establece la infracción de componentes en el interior de la región enlazada.'trust-region-reflective'
fmincon
Para otros algoritmos, establece la infracción de componentes en el límite más cercano.fmincon
Los componentes que respetan los límites no se modifican. Ver.Las iteraciones pueden violar restricciones
encuentra el mínimo para, donde se describe una estructura.x
= fmincon(problem
)problem
problem
Argumentos de entrada Cree la estructura exportando un problema desde la aplicación de optimización, como se describe en.problem
Exportar su trabajo
Encuentra el valor mínimo de la función de Rosenbrock cuando hay una restricción de desigualdad lineal.
Establecer la función objetivo de ser la función de Rosenbrock.fun
La función de Rosenbrock es bien conocida por ser difícil de minimizar. Tiene su valor objetivo mínimo de 0 en el punto (1, 1). Para obtener más información, consulte.Resuelva un problema no lineal restringido, basado en Solver
fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
Encuentre el valor mínimo a partir del punto, restringido para tener[-1,2]
Ax <= b
A = [1,2]
b = 1
Tenga en cuenta que esta restricción significa que la solución no estará en la solución sin restricciones (1, 1), porque en ese momento
x0 = [-1,2]; A = [1,2]; b = 1; x = fmincon(fun,x0,A,b)
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance.
x = 1×2
0.5022 0.2489
Encuentra el valor mínimo de la función de Rosenbrock cuando hay una restricción de desigualdad lineal y una restricción de igualdad lineal.
Establecer la función objetivo de ser la función de Rosenbrock.fun
fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
Encuentre el valor mínimo a partir del punto, restringido para tener[0.5,0]
Exprese la restricción de desigualdad lineal en el formulario tomando y.A*x <= b
A = [1,2]
b = 1
Exprese la restricción de igualdad lineal en el formulario tomando y.Aeq*x = beq
Aeq = [2,1]
beq = 1
x0 = [0.5,0]; A = [1,2]; b = 1; Aeq = [2,1]; beq = 1; x = fmincon(fun,x0,A,b,Aeq,beq)
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance.
x = 1×2
0.4149 0.1701
Encuentre el mínimo de una función objetiva en presencia de restricciones enlazadas.
La función objetiva es una simple función algebraica de dos variables.
fun = @(x)1+x(1)/(1+x(2)) - 3*x(1)*x(2) + x(2)*(1+x(1));
Mira en la región donde tiene valores positivos,x
x(1) ≤ 1Y x(2) ≤ 2.
lb = [0,0]; ub = [1,2];
No hay restricciones lineales, así que establezca esos argumentos en.[]
A = []; b = []; Aeq = []; beq = [];
Pruebe un punto inicial en el centro de la región. Encuentre el mínimo de, sujeto a las restricciones enlazadas.fun
x0 = [0.5,1]; x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the default value of the function tolerance, and constraints are satisfied to within the default value of the constraint tolerance. <stopping criteria details>
x = 1.0000 2.0000
Un punto inicial diferente puede conducir a una solución diferente.
x0 = x0/5; x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the default value of the function tolerance, and constraints are satisfied to within the default value of the constraint tolerance. <stopping criteria details>
x = 1.0e-06 * 0.4000 0.4000
Para ver qué solución es mejor, vea.Obtenga el valor de función objetiva
Encuentre el mínimo de una función sujeta a restricciones no lineales
Encuentra el punto donde la función de Rosenbrock se minimiza dentro de un círculo, también sujeto a restricciones enlazadas.
fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;
Mira dentro de la región ,
.
lb = [0,0.2]; ub = [0.5,0.8];
También mire dentro del círculo centrado en [1/3, 1/3] con radio 1/3. Copie el código siguiente en un archivo de la ruta de acceso de MATLAB® denominada.circlecon.m
% Copyright 2015 The MathWorks, Inc. function [c,ceq] = circlecon(x) c = (x(1)-1/3)^2 + (x(2)-1/3)^2 - (1/3)^2; ceq = [];
No hay restricciones lineales, así que establezca esos argumentos en.[]
A = []; b = []; Aeq = []; beq = [];
Elija un punto inicial que satisfaga todas las restricciones.
x0 = [1/4,1/4];
Resuelve el problema.
nonlcon = @circlecon; x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance. x = 0.5000 0.2500
Configure las opciones para ver las iteraciones a medida que ocurren y para utilizar un algoritmo diferente.
Para observar el proceso de solución, establezca la opción en.fmincon
Display
'iter'
Además, pruebe el algoritmo, que a veces es más rápido o más preciso que el algoritmo predeterminado.'sqp'
'interior-point'
options = optimoptions('fmincon','Display','iter','Algorithm','sqp');
Encuentre el mínimo de la función de Rosenbrock en el disco de la unidad, . En primer lugar, cree una función que represente la restricción no lineal. Guárdelo como un archivo denominado en su ruta de acceso de MATLAB®.
unitdisk.m
function [c,ceq] = unitdisk(x) c = x(1)^2 + x(2)^2 - 1; ceq = [];
Cree las especificaciones de problemas restantes. Entonces corre.fmincon
fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2; A = []; b = []; Aeq = []; beq = []; lb = []; ub = []; nonlcon = @unitdisk; x0 = [0,0]; x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
Iter Func-count Fval Feasibility Step Length Norm of First-order step optimality 0 3 1.000000e+00 0.000e+00 1.000e+00 0.000e+00 2.000e+00 1 12 8.913011e-01 0.000e+00 1.176e-01 2.353e-01 1.107e+01 2 22 8.047847e-01 0.000e+00 8.235e-02 1.900e-01 1.330e+01 3 28 4.197517e-01 0.000e+00 3.430e-01 1.217e-01 6.172e+00 4 31 2.733703e-01 0.000e+00 1.000e+00 5.254e-02 5.705e-01 5 34 2.397111e-01 0.000e+00 1.000e+00 7.498e-02 3.164e+00 6 37 2.036002e-01 0.000e+00 1.000e+00 5.960e-02 3.106e+00 7 40 1.164353e-01 0.000e+00 1.000e+00 1.459e-01 1.059e+00 8 43 1.161753e-01 0.000e+00 1.000e+00 1.754e-01 7.383e+00 9 46 5.901600e-02 0.000e+00 1.000e+00 1.547e-02 7.278e-01 10 49 4.533081e-02 2.898e-03 1.000e+00 5.393e-02 1.252e-01 11 52 4.567454e-02 2.225e-06 1.000e+00 1.492e-03 1.679e-03 12 55 4.567481e-02 4.405e-12 1.000e+00 2.095e-06 1.502e-05 13 58 4.567481e-02 2.220e-16 1.000e+00 2.442e-09 1.287e-05 Local minimum possible. Constraints satisfied. fmincon stopped because the size of the current step is less than the value of the step size tolerance and constraints are satisfied to within the value of the constraint tolerance. x = 0.7864 0.6177
Incluya la evaluación de gradiente en la función objetivo para cálculos más rápidos o más fiables.
Incluya la evaluación de degradado como una salida condicionado en el archivo de función objetiva. Para obtener más información, consulte.Incluyendo gradientes y hessianos La función objetiva es la función de Rosenbrock,
que tiene gradiente
function [f,g] = rosenbrockwithgrad(x) % Calculate objective f f = 100*(x(2) - x(1)^2)^2 + (1-x(1))^2; if nargout > 1 % gradient required g = [-400*(x(2)-x(1)^2)*x(1)-2*(1-x(1)); 200*(x(2)-x(1)^2)]; end
Guarde este código como un archivo denominado en la ruta de acceso de MATLAB®.rosenbrockwithgrad.m
Cree opciones para utilizar el degradado de función objetiva.
options = optimoptions('fmincon','SpecifyObjectiveGradient',true);
Cree las otras entradas para el problema. Entonces llama.fmincon
fun = @rosenbrockwithgrad; x0 = [-1,2]; A = []; b = []; Aeq = []; beq = []; lb = [-2,-2]; ub = [2,2]; nonlcon = []; x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance. x = 1.0000 1.0000
Resuelva el mismo problema que en el uso de una estructura problemática en lugar de argumentos separados.Opciones no predeterminadas
Cree las opciones y una estructura problemática. Consulte los nombres de campo y los campos obligatorios.problem
options = optimoptions('fmincon','Display','iter','Algorithm','sqp'); problem.options = options; problem.solver = 'fmincon'; problem.objective = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2; problem.x0 = [0,0];
Cree un archivo de función para la función de restricción no lineal que represente norm(x)2 ≤ 1.
function [c,ceq] = unitdisk(x) c = x(1)^2 + x(2)^2 - 1; ceq = [ ];
Guárdalo como un archivo llamado en tu ruta.unitdisk.m
MATLAB®
Incluya la función de restricción no lineal en.problem
problem.nonlcon = @unitdisk;
Resuelve el problema.
x = fmincon(problem)
Iter Func-count Fval Feasibility Step Length Norm of First-order step optimality 0 3 1.000000e+00 0.000e+00 1.000e+00 0.000e+00 2.000e+00 1 12 8.913011e-01 0.000e+00 1.176e-01 2.353e-01 1.107e+01 2 22 8.047847e-01 0.000e+00 8.235e-02 1.900e-01 1.330e+01 3 28 4.197517e-01 0.000e+00 3.430e-01 1.217e-01 6.172e+00 4 31 2.733703e-01 0.000e+00 1.000e+00 5.254e-02 5.705e-01 5 34 2.397111e-01 0.000e+00 1.000e+00 7.498e-02 3.164e+00 6 37 2.036002e-01 0.000e+00 1.000e+00 5.960e-02 3.106e+00 7 40 1.164353e-01 0.000e+00 1.000e+00 1.459e-01 1.059e+00 8 43 1.161753e-01 0.000e+00 1.000e+00 1.754e-01 7.383e+00 9 46 5.901602e-02 0.000e+00 1.000e+00 1.547e-02 7.278e-01 10 49 4.533081e-02 2.898e-03 1.000e+00 5.393e-02 1.252e-01 11 52 4.567454e-02 2.225e-06 1.000e+00 1.492e-03 1.679e-03 12 55 4.567481e-02 4.406e-12 1.000e+00 2.095e-06 1.501e-05 13 58 4.567481e-02 0.000e+00 1.000e+00 2.158e-09 1.511e-05 Local minimum possible. Constraints satisfied. fmincon stopped because the size of the current step is less than the value of the step size tolerance and constraints are satisfied to within the value of the constraint tolerance. <stopping criteria details>
x = 0.7864 0.6177
La pantalla iterativa y la solución son las mismas que en.Opciones no predeterminadas
Llame con la salida para obtener el valor de la función objetiva en la solución.fmincon
fval
El ejemplo muestra dos soluciones.Restricciones enlazadas ¿Cuál es mejor? Ejecute el ejemplo que solicita la salida, así como la solución.fval
fun = @(x)1+x(1)./(1+x(2)) - 3*x(1).*x(2) + x(2).*(1+x(1)); lb = [0,0]; ub = [1,2]; A = []; b = []; Aeq = []; beq = []; x0 = [0.5,1]; [x,fval] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the default value of the function tolerance, and constraints are satisfied to within the default value of the constraint tolerance. <stopping criteria details>
x = 1.0000 2.0000 fval = -0.6667
Ejecute el problema con un punto de partida diferente.x0
x0 = x0/5; [x2,fval2] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the default value of the function tolerance, and constraints are satisfied to within the default value of the constraint tolerance. <stopping criteria details>
x2 = 1.0e-06 * 0.4000 0.4000 fval2 = 1.0000
Esta solución tiene un valor de función objetivo, que es mayor que el primer valor.fval2 = 1
fval = -0.6667
La primera solución tiene un valor de función objetivo mínimo local menor.x
Para examinar fácilmente la calidad de una solución, solicite las salidas y.exitflag
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. Guárdelo como un archivo denominado en su ruta de acceso de MATLAB®.
unitdisk.m
function [c,ceq] = unitdisk(x) c = x(1)^2 + x(2)^2 - 1; ceq = [];
Cree las especificaciones de problemas restantes.
fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2; nonlcon = @unitdisk; A = []; b = []; Aeq = []; beq = []; lb = []; ub = []; x0 = [0,0];
Llame usando el,, y las salidas.fmincon
fval
exitflag
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: '...'
El valor indica que la solución es un mínimo local.exitflag
1
La estructura informa de varias estadísticas sobre el proceso de solución.output
En particular, da el número de iteraciones en, número de evaluaciones de función en, y la viabilidad en.output.iterations
output.funcCount
output.constrviolation
Opcionalmente devuelve varias salidas que puede usar para analizar la solución notificada.fmincon
Configure el problema de minimizar la función de Rosenbrock en el disco de la unidad. En primer lugar, cree una función que represente la restricción no lineal. Guárdelo como un archivo denominado en su ruta de acceso de MATLAB®.unitdisk.m
function [c,ceq] = unitdisk(x) c = x(1)^2 + x(2)^2 - 1; ceq = [];
Cree las especificaciones de problemas restantes.
fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2; nonlcon = @unitdisk; A = []; b = []; Aeq = []; beq = []; lb = []; ub = []; x0 = [0,0];
Solicite todas las salidas.fmincon
[x,fval,exitflag,output,lambda,grad,hessian] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
Local minimum found that satisfies the constraints. Optimization completed because the objective function is non-decreasing in feasible directions, to within the value of the optimality tolerance, and constraints are satisfied to within the value of the constraint tolerance. x = 0.7864 0.6177 fval = 0.0457 exitflag = 1 output = struct with fields: iterations: 24 funcCount: 84 constrviolation: 0 stepsize: 6.9162e-06 algorithm: 'interior-point' firstorderopt: 2.4373e-08 cgiterations: 4 message: '...' lambda = struct with fields: eqlin: [0x1 double] eqnonlin: [0x1 double] ineqlin: [0x1 double] lower: [2x1 double] upper: [2x1 double] ineqnonlin: 0.1215 grad = -0.1911 -0.1501 hessian = 497.2903 -314.5589 -314.5589 200.2392
La salida muestra que la restricción no lineal está activa en la solución y da el valor del multiplicador de Lagrange asociado.lambda.ineqnonlin
La salida proporciona el valor del degradado de la función objetiva en la solución.grad
x
La salida se describe en.hessian
fmincon hessian
fun
— Función para minimizarFunción para minimizar, especificada como un identificador de función o un nombre de función. es una función que acepta un vector o array y devuelve un escalar real, la función objetiva evaluada en.fun
x
f
x
Especifique como un identificador de función para un archivo:fun
x = fmincon(@myfun,x0,A,b)
donde se encuentra una función comomyfun
MATLAB
function f = myfun(x) f = ... % Compute function value at x
También puede especificar como un identificador de función para una función anónima:fun
x = fmincon(@(x)norm(x)^2,x0,A,b);
Si puede calcular el degradado de la opción se establece en, como se establece por entonces debe devolver el vector de degradado en el segundo argumento de salida.fun
andSpecifyObjectiveGradient
true
options = optimoptions('fmincon','SpecifyObjectiveGradient',true)
fun
g(x)
Si también puede calcular la matriz Hessiana, la opción se establece a través de la opción es, debe devolver el valor hessian, una matriz simétrica, en un tercer argumento de salida. puede dar un hessian escaso.andHessianFcn
'objective'
optimoptions
andAlgorithm
'trust-region-reflective'
fun
H(x)
fun
Ver para más detalles.Hessian para fminunc confianza-región o fmincon confianza-región-reflexivo algoritmos
Si también puede calcular la matriz Hessiana y la opción está configurada, hay una manera diferente de pasar el hessian a.Algorithm
'interior-point'
fmincon
Para obtener más información, consulte.Hessian para el algoritmo de punto interior de fmincon Para obtener un ejemplo de uso para calcular el degradado y hessian, consulte.Symbolic Math Toolbox™Calcula gradientes y hessianosSymbolic Math Toolbox
Los algoritmos y permiten suministrar una función de multiplicar de hessian.interior-point
trust-region-reflective
Esta función da el resultado de un producto vectorial de hessian-Times sin computar el hessian directamente. Esto puede ahorrar memoria. Ver.Función de multiplicar de hessian
Ejemplo: fun = @(x)sin(x(1))*cos(x(2))
Tipos de datos: char
| function_handle
| string
x0
— Punto inicialPunto inicial, especificado como un vector real o una matriz real. Solvers utilizan el número de elementos en, y el tamaño de, para determinar el número y el tamaño de las variables que acepta.x0
fun
algoritmo: Si la opción es (predeterminada), restablece los componentes que están en los límites o fuera de ellos o a los valores estrictamente entre los límites.'interior-point'
HonorBounds
true
fmincon
x0
lb
ub
algoritmo: restablece los componentes infactibles para que sean factibles con respecto a los límites o las equalidades lineales.'trust-region-reflective'
fmincon
x0
, o algoritmo: restablece los componentes que están fuera de los límites a los valores de los límites correspondientes.'sqp'
'sqp-legacy'
'active-set'
fmincon
x0
Ejemplo: x0 = [1,2,3,4]
Tipos de datos: double
A
— Las restricciones de desigualdad linealesRestricciones de desigualdad lineales, especificadas como una matriz real. es un-por-matriz, donde es el número de desigualdades, y es el número de variables (número de elementos en).A
M
N
M
N
x0
Para problemas grandes, pase como una matriz dispersa.A
codifica las desigualdades linealesA
M
,A*x <= b
donde está el vector de columna de variables, y es un vector de columna con elementos.x
N
x(:)
b
M
Por ejemplo, para especificar
x1 + 2x2 ≤ 10 3
x1 + 4x2 ≤ 20 5
x1 + 6x2 ≤ 30,
Ingrese estas restricciones:
A = [1,2;3,4;5,6]; b = [10;20;30];
Ejemplo: Para especificar que los componentes x suman 1 o menos, utilice y.A = ones(1,N)
b = 1
Tipos de datos: double
b
— Las restricciones de desigualdad linealesRestricciones de desigualdad lineales, especificadas como un vector real. es un vector de elemento relacionado con la matriz.b
M
A
Si se pasa como un vector de fila, los solucionadores se convierten internamente al vector de columna.b
b
b(:)
Para problemas grandes, pase como un vector disperso.b
codifica las desigualdades linealesb
M
,A*x <= b
donde está el vector de columna de variables, y es una matriz de tamaño por.x
N
x(:)
A
M
N
Por ejemplo, para especificar
x1 + 2x2 ≤ 10 3
x1 + 4x2 ≤ 20 5
x1 + 6x2 ≤ 30,
Ingrese estas restricciones:
A = [1,2;3,4;5,6]; b = [10;20;30];
Ejemplo: Para especificar que los componentes x suman 1 o menos, utilice y.A = ones(1,N)
b = 1
Tipos de datos: double
Aeq
— Las restricciones de igualdad linealesRestricciones de igualdad lineales, especificadas como una matriz real. es un-por-matriz, donde es el número de ecualidades, y es el número de variables (número de elementos en).Aeq
Me
N
Me
N
x0
Para problemas grandes, pase como una matriz dispersa.Aeq
codifica las equalidades linealesAeq
Me
,Aeq*x = beq
donde está el vector de columna de variables, y es un vector de columna con elementos.x
N
x(:)
beq
Me
Por ejemplo, para especificar
x1 + 2x2 + 3x3 = 10 2
x1 + 4x2 +x3 = 20,
Ingrese estas restricciones:
Aeq = [1,2,3;2,4,1]; beq = [10;20];
Ejemplo: Para especificar que los componentes x suman 1, utilice y.Aeq = ones(1,N)
beq = 1
Tipos de datos: double
beq
— Las restricciones de igualdad linealesRestricciones de igualdad lineales, especificadas como un vector real. es un vector de elemento relacionado con la matriz.beq
Me
Aeq
Si se pasa como un vector de fila, los solucionadores se convierten internamente al vector de columna.beq
beq
beq(:)
Para problemas grandes, pase como un vector disperso.beq
codifica las equalidades linealesbeq
Me
,Aeq*x = beq
donde está el vector de columna de variables, y es una matriz de tamaño por.x
N
x(:)
Aeq
Me
N
Por ejemplo, para especificar
x1 + 2x2 + 3x3 = 10 2
x1 + 4x2 +x3 = 20,
Ingrese estas restricciones:
Aeq = [1,2,3;2,4,1]; beq = [10;20];
Ejemplo: Para especificar que los componentes x suman 1, utilice y.Aeq = ones(1,N)
beq = 1
Tipos de datos: double
lb
— Los límites inferioresLímites inferiores, especificados como un vector real o una matriz real. Si el número de elementos en es igual al número de elementos en, a continuación, especifica quex0
lb
lb
para todos.x(i) >= lb(i)
i
Si, a continuación, especifica quenumel(lb) < numel(x0)
lb
Para.x(i) >= lb(i)
1 <= i <= numel(lb)
Si hay menos elementos en que in, los solucionadores emiten una advertencia.lb
x0
Ejemplo: Para especificar que todos los componentes x son positivos, utilice.lb = zeros(size(x0))
Tipos de datos: double
ub
— Los límites superioresLímites superiores, especificados como un vector real o una matriz real. Si el número de elementos en es igual al número de elementos en, a continuación, especifica quex0
ub
ub
para todos.x(i) <= ub(i)
i
Si, a continuación, especifica quenumel(ub) < numel(x0)
ub
Para.x(i) <= ub(i)
1 <= i <= numel(ub)
Si hay menos elementos en que in, los solucionadores emiten una advertencia.ub
x0
Ejemplo: Para especificar que todos los componentes x son inferiores a 1, utilice.ub = ones(size(x0))
Tipos de datos: double
nonlcon
— Las restricciones no linealesRestricciones no lineales, especificadas como un identificador de función o un nombre de función. es una función que acepta un vector o array y devuelve dos matrices, y.nonlcon
x
c(x)
ceq(x)
es la matriz de restricciones de desigualdad no lineal en. intenta satisfacerc(x)
x
fmincon
para todas las entradas de.c(x) <= 0
c
es la matriz de restricciones de igualdad no lineal en. intenta satisfacerceq(x)
x
fmincon
para todas las entradas de.ceq(x) = 0
ceq
Por ejemplo,
x = fmincon(@myfun,x0,A,b,Aeq,beq,lb,ub,@mycon)
donde es una función como si los degradados de las restricciones también se pueden calcular la opción es, como se establece por entonces también debe devolver, en el tercer y cuarto argumentos de salida, el degradado de, y, el degradado de. y puede ser escasa o densa.mycon
MATLAB
function [c,ceq] = mycon(x) c = ... % Compute nonlinear inequalities at x. ceq = ... % Compute nonlinear equalities at x.
SpecifyConstraintGradient
true
options = optimoptions('fmincon','SpecifyConstraintGradient',true)
nonlcon
GC
c(x)
GCeq
ceq(x)
GC
GCeq
Si es grande, con relativamente pocas entradas que no sean de cero, Ahorre tiempo de ejecución y memoria en el algoritmo representándolos como matrices dispersas.GC
GCeq
interior-point
Para obtener más información, consulte.Restricciones no lineales
Tipos de datos: char
| function_handle
| string
options
— Las opciones de optimizaciónoptimoptions
| estructura, como las devolucionesoptimset
Opciones de optimización, especificadas como la salida de o una estructura como devoluciones.optimoptions
optimset
Algunas opciones se aplican a todos los algoritmos, y otras son relevantes para determinados algoritmos. Consulte para obtener información detallada.Opciones de optimización referencia
Algunas opciones están ausentes en la pantalla.optimoptions
Estas opciones aparecen en cursiva en la tabla siguiente. Para obtener más información, consulte.Ver opciones
All Algorithms | |
Algorithm | Elija el algoritmo de optimización:
Para obtener información sobre cómo elegir el algoritmo, consulte.Elegir el algoritmo El algoritmo requiere:
Si selecciona el algoritmo y no se satisfacen todas estas condiciones, se produce un error. Los algoritmos, y no son de gran escala. |
CheckGradients | Compare los derivados suministrados por el usuario (degradados de objetivos o restricciones) con los derivados de diferenciación finita. Las opciones son (predeterminado) o. Para, el nombre es y los valores son o. |
ConstraintTolerance | Tolerancia en la infracción de restricción, un escalar positivo. El valor predeterminado es. El nombre es. |
Diagnostics | Mostrar información de diagnóstico sobre la función que se debe minimizar o resolver. Las opciones son (predeterminado) o. |
DiffMaxChange | Cambio máximo en las variables para los degradados de diferencias finitas (un escalar positivo). El valor predeterminado es. |
DiffMinChange | Cambio mínimo en las variables para los degradados de diferencias finitas (un escalar positivo). El valor predeterminado es. |
Display | Nivel de visualización (ver):Visualización iterativa
|
FiniteDifferenceStepSize |
Factor de tamaño de paso escalar o vectorial para diferencias finitas. Cuando se establece en un vector, las diferencias finitas de avance son
sign′(x) = sign(x) sign′(0) = 1 Las diferencias finitas centrales son
FiniteDifferenceStepSize El valor predeterminado es para las diferencias finitas de avance y para las diferencias finitas centrales.sqrt(eps) eps^(1/3)
El nombre es. |
FiniteDifferenceType | Las diferencias finitas, que se utilizan para estimar degradados, son (predeterminadas) o (centradas). toma el doble de evaluaciones de funciones, pero debe ser más precisa. es cuidadoso de obedecer los límites al estimar ambos tipos de diferencias finitas. El nombre es. |
FunValCheck | Compruebe si los valores de función objetiva son válidos. La configuración predeterminada, no realiza una comprobación. |
MaxFunctionEvaluations | Número máximo de evaluaciones de funciones permitidas, un entero positivo. El valor predeterminado para todos los algoritmos excepto is; para el algoritmo el valor predeterminado es. El nombre es. |
MaxIterations | Número máximo de iteraciones permitidas, un entero positivo. El valor predeterminado para todos los algoritmos excepto is; para el algoritmo el valor predeterminado es. El nombre es. |
OptimalityTolerance |
Tolerancia de terminación en la optimalidad de primer orden (un escalar positivo). El valor predeterminado es. El nombre es. |
OutputFcn | Especifique una o varias funciones definidas por el usuario a las que llama una función de optimización en cada iteración. Pasar un identificador de función o una matriz de celdas de identificadores de función. El valor predeterminado es None (). |
PlotFcn | Traza varias medidas de progreso mientras se ejecuta el algoritmo; seleccionar de parcelas predefinidas o escribir las suyas propias. Pase un nombre de función de trazado integrado, un identificador de función o una matriz de celdas de nombres de función de trazado integrados o identificadores de función. Para las funciones de trazado personalizadas, pase los identificadores de función. El valor predeterminado es None ():
Para obtener información sobre cómo escribir una función de trazado personalizada, consulte.Sintaxis de función de trazado El nombre es. |
SpecifyConstraintGradient | Degradado para las funciones de restricción no lineal definidas por el usuario. Cuando se establece en el valor predeterminado, se estiman los degradados de las restricciones no lineales por diferencias finitas. Para, el nombre es y los valores son o. |
SpecifyObjectiveGradient | Gradiente para la función objetiva definida por el usuario. Consulte la descripción para ver cómo definir el degradado. Para, el nombre es y los valores son o. |
StepTolerance | Tolerancia de terminación activada, un escalar positivo. El nombre es. |
TypicalX | Valores típicos. El algoritmo utiliza sólo para la opción. |
UseParallel | Cuando, estima los degradados en paralelo. |
Trust-Region-Reflective Algorithm | |
FunctionTolerance | Tolerancia de terminación en el valor de la función, un escalar positivo. El valor predeterminado es. El nombre es. |
HessianFcn | Si (por defecto), se aproxima al Hessiano usando diferencias finitas, o utiliza una función de multiplicar de hessian (con opción). El nombre es. |
HessianMultiplyFcn | Función de multiplicación de hessian, especificada como un manejador de funciones. Para problemas estructurados a gran escala, esta función calcula el producto de matriz de Hessian sin formar realmente. W = hmfun(Hinfo,Y) donde contiene una matriz utilizada para computar. El primer argumento es el mismo que el tercer argumento devuelto por la función objetiva, por ejemplo [f,g,Hinfo] = fun(x) es una matriz que tiene el mismo número de filas que hay dimensiones en el problema. Nota Para usar la opción, debe establecerse en y debe ser (predeterminado). Ver.Función de multiplicar de hessian Vea por un ejemplo.Minimización con hessian estructurado denso, Equalidades lineales El nombre es. |
HessPattern | Patrón de la Sparsity del hessian para la diferenciación finita. Establecer cuando puede tener ∂ Se usa cuando es incómodo calcular la matriz de hessian, pero se puede determinar (digamos, por inspección) cuando el componente th del gradiente de depende. puede aproximarse a través de diferencias finitas dispersas (del degradado) si proporciona el valor para. Cuando se desconoce la estructura, no se establece. |
MaxPCGIter | Número máximo de iteraciones de degradado conjugada preacondicionadas (PCG), un escalar positivo. El valor predeterminado es para problemas con restricciones de límite y es para problemas con restricciones de igualdad. |
PrecondBandWidth | Ancho de banda superior del preacondicionador para PCG, un entero no negativo. De forma predeterminada, se utiliza el preacondicionamiento diagonal (ancho de banda superior de 0). Para algunos problemas, el aumento del ancho de banda reduce el número de iteraciones PCG. Ajuste a utiliza una factorización directa (Cholesky) en lugar de los degradados conjugados (CG). |
SubproblemAlgorithm | Determina cómo se calcula el paso de iteración. El valor predeterminado, toma un paso más rápido pero menos preciso que. |
TolPCG | Tolerancia de terminación en la iteración PCG, un escalar positivo. El valor predeterminado es. |
Active-Set Algorithm | |
FunctionTolerance | Tolerancia de terminación en el valor de la función, un escalar positivo. El valor predeterminado es. El nombre es. |
MaxSQPIter | Número máximo de iteraciones SQP permitidas, un entero positivo. El valor predeterminado es. |
RelLineSrchBnd | Límite relativo (un valor escalar real no negativo) en la longitud del paso de búsqueda de línea. El desplazamiento total en satisfacex |Δx(i)| ≤ relLineSrchBnd· max(|x(i)|,|typicalx(i)|). Esta opción proporciona control sobre la magnitud de los desplazamientos en los casos en los que el solucionador toma pasos que se consideran demasiado grandes.x El valor predeterminado es no Bounds (). |
RelLineSrchBndDuration | Número de iteraciones para las que el enlazado especificado en debe estar activo (el valor predeterminado es). |
TolConSQP | Tolerancia de terminación en la infracción de restricción SQP de iteración interna, un escalar positivo. El valor predeterminado es. |
Interior-Point Algorithm | |
HessianApproximation | Elige cómo calcula el Hessiano (ver).
Nota Para utilizar, ambas y deben ser entradas vacías (). Para, el nombre es y los valores son,,,,, o. |
HessianFcn | Si (por defecto), se aproxima al hessian utilizando diferencias finitas, o utiliza un suministrado. El nombre es. |
HessianMultiplyFcn | Función suministrada por el usuario que da un producto de vectores de tiempo de hessian (ver).Función de multiplicar de hessian Pasar un identificador de función. Nota Para utilizar la opción, debe establecerse en y debe ser. El nombre es. |
HonorBounds | El valor predeterminado garantiza que las restricciones enlazadas se satisfacen en cada iteración. Para, el nombre es y los valores son o. |
InitBarrierParam | Valor de barrera inicial, un escalar positivo. A veces puede ser de ayuda probar un valor por encima del predeterminado, especialmente si las funciones de objetivo o restricción son grandes. |
InitTrustRegionRadius | Radio inicial de la región de confianza, un escalar positivo. En problemas mal escalados podría ayudar a elegir un valor menor que el predeterminado , donde está el número de variables.n |
MaxProjCGIter | Una tolerancia (criterio de parada) para el número de iteraciones de degradado de conjugada proyectadas; Esta es una iteración interna, no el número de iteraciones del algoritmo. Este entero positivo tiene un valor predeterminado de. |
ObjectiveLimit | Una tolerancia (criterio de detención) que es un escalar. Si el valor de la función objetiva va por debajo y la iteración es factible, las iteraciones se detienen, porque el problema es presumiblemente ilimitado. |
ScaleProblem | hace que el algoritmo normalice todas las restricciones y la función objetiva. Para, los valores son o. |
SubproblemAlgorithm | Determina cómo se calcula el paso de iteración. El valor por defecto, es generalmente más rápido que (gradiente conjugada), aunque puede ser más rápido para grandes problemas con los hessianos densos. |
TolProjCG | Una tolerancia relativa (criterio de detención) para el algoritmo de degradado de conjugada proyectado; Esto es para una iteración interna, no para la iteración del algoritmo. Este escalar positivo tiene un valor predeterminado de. |
TolProjCGAbs | Tolerancia absoluta (criterio de parada) para el algoritmo de gradiente conjugada proyectado; Esto es para una iteración interna, no para la iteración del algoritmo. Este escalar positivo tiene un valor predeterminado de. |
SQP and SQP Legacy Algorithms | |
ObjectiveLimit | Una tolerancia (criterio de detención) que es un escalar. Si el valor de la función objetiva va por debajo y la iteración es factible, las iteraciones se detienen, porque el problema es presumiblemente ilimitado. |
ScaleProblem |
hace que el algoritmo normalice todas las restricciones y la función objetiva. Para, los valores son o. |
Ejemplo: options = optimoptions('fmincon','SpecifyObjectiveGradient',true,'SpecifyConstraintGradient',true)
problem
— Estructura problemáticaEstructura problemática, especificada como estructura con los siguientes campos:
Nombre de campo | Entrada |
---|---|
| Función objetiva |
| Punto inicial parax |
| Matriz para las restricciones de desigualdad lineal |
| Vector para las restricciones de desigualdad lineal |
| Matriz para las restricciones de igualdad lineal |
| Vector para las restricciones de igualdad lineales |
lb | Vector de los límites inferiores |
ub | Vector de los límites superiores |
| Función de restricción no lineal |
| 'fmincon' |
| Las opciones creadas conoptimoptions |
Debe suministrar al menos los campos, y, en la estructura.Objetivo
x0
solver
Opciones
problem
La forma más sencilla de obtener una estructura es exportar el problema desde la aplicación de optimización.problem
Tipos de datos: struct
x
— SoluciónSolución, devuelta como un vector real o una matriz real. El tamaño de es el mismo que el tamaño de.x
x0
Normalmente, es una solución local para el problema cuando es positivo.x
exitflag
Para obtener información sobre la calidad de la solución, consulte.Cuando el Solver se ejecuta correctamente
fval
— Valor de función objetiva en la soluciónValor de la función objetiva en la solución, devuelto como un número real. Generalmente, =.fval
fun(x)
exitflag
— La razón parófmincon
Motivo detenido, devuelto como un entero.fmincon
Todos los algoritmos: | |
| La medida de optimalidad de primer orden era menor que, y la infracción de restricción máxima era menor que. |
| Número de iteraciones superada o número de evaluaciones de función superada. |
| Detenido por una función de salida o una función de trazado. |
| No se encontró ningún punto factible. |
Todos los algoritmos excepto: | |
| El cambio en fue menor que y la violación de restricción máxima fue menor que. |
algoritmo solamente: | |
| El cambio en el valor de la función objetiva fue menor que y la infracción de restricción máxima fue menor que. |
algoritmo solamente: | |
| La magnitud de la dirección de búsqueda era menor que 2 * y la infracción de restricción máxima era menor que. |
| La magnitud del derivado direccional en la dirección de búsqueda era menor que 2 * y la infracción de restricción máxima era menor que. |
, y algoritmos: | |
| La función objetiva en la iteración actual fue inferior y la violación de restricción máxima fue menor que. |
output
— La información sobre el proceso de optimizaciónInformación sobre el proceso de optimización, devuelta como una estructura con campos:
iterations | Número de iteraciones tomadas |
funcCount | Número de evaluaciones de funciones |
lssteplength | Tamaño del paso de búsqueda de línea en relación con la dirección de búsqueda (y algoritmos solamente) |
constrviolation | Máximo de funciones de restricción |
stepsize | Longitud del último desplazamiento en (no en el algoritmo) |
algorithm | Algoritmo de optimización utilizado |
cgiterations | Número total de iteraciones PCG (y algoritmos) |
firstorderopt | Medida de la optimalidad de primer orden |
message | Mensaje de salida |
lambda
— Los multiplicadores de Lagrange en la soluciónLos multiplicadores de Lagrange en la solución, devueltos como una estructura con campos:
grad
— Gradiente en la soluciónDegradado en la solución, devuelto como un vector real. da el gradiente de en el punto.grad
fun
x(:)
hessian
— Aproximado hessianHessian aproximado, devuelto como una matriz real. Para el significado de. ver.hessian
Hessian
es un método basado en gradiente que está diseñado para trabajar en problemas donde las funciones objetivo y restricción son continuas y tienen primeros derivados continuos.fmincon
Para el algoritmo, debe proporcionar el degradado y establecer la opción.'trust-region-reflective'
fun
'SpecifyObjectiveGradient'
true
El algoritmo no permite los límites superior e inferior iguales.'trust-region-reflective'
Por ejemplo, si, da este error:lb(2)==ub(2)
fmincon
Equal upper and lower bounds not permitted in trust-region-reflective algorithm. Use either interior-point or SQP algorithms instead.
Hay dos sintaxis diferentes para pasar un hessian, y hay dos sintaxis diferentes para pasar una función; uno para, y otro para.HessianMultiplyFcn
trust-region-reflective
interior-point
Ver.Incluidos los hessianos
Porque el Hessiano del Lagrangio es el mismo que el Hessiano de la función objetiva.trust-region-reflective
Se pasa que hessian como la tercera salida de la función objetiva.
Porque el Hessiano del Lagrangio involucra a los multiplicadores de Lagrange y a los hessianos de las funciones de restricción no lineal.interior-point
Se pasa el hessian como una función separada que tiene en cuenta tanto el punto actual y la estructura del multiplicador de Lagrange.x
lambda
Cuando el problema es inviable, intenta minimizar el valor máximo de restricción.fmincon
utiliza un hessian como una entrada opcional.fmincon
Este hessian es la matriz de los segundos derivados del Lagrangio (ver), a saber,Ecuación 1
(1) |
Para obtener más información sobre cómo suministrar un hessian a los algoritmos o, vea.trust-region-reflective
interior-point
Incluidos los hessianos
Los algoritmos y no aceptan una entrada hessian.active-set
sqp
Calculan una aproximación cuasi-Newton al Hessiano de los Lagrangios.
El algoritmo tiene varias opciones para la opción; Ver:interior-point
'HessianApproximation'
Elija INPUT hessian aproximación para fmincon de punto interior
— calcula el Hessiano mediante una densa aproximación cuasi-Newton.'bfgs'
fmincon
Esta es la aproximación de hessian por defecto.
— calcula el Hessiano mediante una aproximación de cuasi Newton de memoria limitada y a gran escala.'lbfgs'
fmincon
Se utiliza la memoria predeterminada, 10 iteraciones.
— calcula el Hessiano mediante una aproximación de cuasi Newton de memoria limitada y a gran escala.{'lbfgs',positive integer}
fmincon
El entero positivo especifica cuántas iteraciones pasadas se deben recordar.
— calcula un producto vectorial de tiempos de hessian por diferencias finitas de los degradados.'finite-difference'
fmincon
Debe suministrar el degradado de la función objetiva y también gradientes de restricciones no lineales (si existen). Establezca la opción en y, si corresponde, la opción para.'SpecifyObjectiveGradient'
true
'SpecifyConstraintGradient'
true
Debe establecer el a.'SubproblemAlgorithm'
'cg'
Los algoritmos y permiten suministrar una función de multiplicar de hessian.interior-point
trust-region-reflective
Esta función da el resultado de un producto vectorial de hessian-Times, sin computar el hessian directamente. Esto puede ahorrar memoria. Para obtener más información, consulte.Función de multiplicar de hessian
Para obtener ayuda para elegir el algoritmo, consulte.Algoritmos de fmincon Para establecer el algoritmo, utilice para crear y utilizar el par nombre-valor.optimoptions
Opciones
'Algorithm'
El resto de esta sección proporciona breves resúmenes o punteros a la información sobre cada algoritmo.
Este algoritmo se describe en.Algoritmo de punto interior de fmincon Hay una descripción más extensa en,, y.[1][41][9]
Los algoritmos y son similares al algoritmo descrito en. describe las principales diferencias.fmincon
'sqp'
'sqp-legacy'
'active-set'
Active-Set OptimizationAlgoritmo de fmincon SQP En Resumen, estas diferencias son:
utiliza unfmincon
método de programación cuadrática secuencial (SQP). En este método, la función resuelve un subproblema de programación cuadrática (QP) en cada iteración. actualiza una estimación del Hessiano del Lagrangio en cada iteración utilizando la fórmula BFGS (ver y referencias y).fmincon
fminunc
[7][8]
realiza una búsqueda de línea utilizando una función de mérito similar a la propuesta por, y.fmincon
[6][7][8] El subproblema de QP se resuelve utilizando una estrategia de conjunto activa similar a la descrita en. describe detalladamente este algoritmo.[5]fmincon Active Set Algorithm
Vea también para más detalles sobre el algoritmo usado.Implementación de SQP
El algoritmo es un método de región de confianza subespacial y se basa en el método de Newton interior-reflectante descrito en y.'trust-region-reflective'
[3][4] Cada iteración implica la solución aproximada de un gran sistema lineal utilizando el método de gradientes conjugados preacondicionados (PCG). Consulte la región de confianza y las descripciones del método de degradado conjugada precondicionada.Algoritmo reflexivo de la región Trust de fmincon
[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.
Para ejecutar en paralelo, establezca la opción en.'UseParallel'
true
options = optimoptions('
solvername
','UseParallel',true)
Para obtener más información, consulte.Uso de la computación paralela enOptimization Toolbox
fminbnd
| fminsearch
| fminunc
| optimoptions
| optimtool
Existe una versión modificada de este ejemplo en su sistema. ¿Prefiere abrir esta versión?
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.
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: .
Select web siteYou can also select a web site from the following list:
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.