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.
Varios solucionadores de optimización aceptan restricciones no lineales, incluyendo,,, y elfmincon
fseminf
fgoalattain
fminimax
Global Optimization Toolbox solucionadores,,,,, y.ga
(Global Optimization Toolbox)gamultiobj
(Global Optimization Toolbox)patternsearch
(Global Optimization Toolbox)paretosearch
(Global Optimization Toolbox)GlobalSearch
(Global Optimization Toolbox)MultiStart
(Global Optimization Toolbox) Las restricciones no lineales le permiten restringir la solución a cualquier región que se pueda describir en términos de funciones suaves.
Las restricciones de desigualdad no lineales tienen la forma c(x) ≤ 0, donde se encuentra un vector de restricciones, un componente para cada restricción.c Del mismo modo, las restricciones de igualdad no lineales son de la forma ceq(x) = 0.
Nota
Las funciones de restricción no lineal deben devolver ambas y las funciones de restricción de desigualdad e igualdad, incluso si no existen ambas.c
ceq
Devuelva una entrada vacía para una restricción inexistente.[]
Por ejemplo, supongamos que tiene las siguientes desigualdades como restricciones:
Escriba estas restricciones en un archivo de función de la siguiente manera: devuelve una entrada vacía para la función de igualdad no lineal.
function [c,ceq]=ellipseparabola(x) c(1) = (x(1)^2)/9 + (x(2)^2)/4 - 1; c(2) = x(1)^2 - x(2) - 1; ceq = []; end
ellipseparabola
[]
ceq
Además, ambas desigualdades se pusieron en forma ≤ 0.Minimice la función sujeta a las restricciones.exp(x(1) + 2*x(2))
ellipseparabola
fun = @(x)exp(x(1) + 2*x(2)); nonlcon = @ellipseparabola; x0 = [0 0]; A = []; % No other constraints b = []; Aeq = []; beq = []; lb = []; ub = []; 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.2500 -0.9375
Si proporciona gradientes para y, el solucionador puede ejecutarse más rápido y dar resultados más fiables.cceq
Proporcionar un degradado tiene otra ventaja. Un solucionador puede alcanzar un punto tal que sea factible, pero las diferencias finitas alrededor siempre conducen a un punto inviable.x
x
x
En este caso, un solucionador puede fallar o detenerse prematuramente. Proporcionar un degradado permite que un solucionador proceda.
Para incluir información de degradado, escriba una función condicionado de la siguiente manera:
function [c,ceq,gradc,gradceq]=ellipseparabola(x) c(1) = x(1)^2/9 + x(2)^2/4 - 1; c(2) = x(1)^2 - x(2) - 1; ceq = []; if nargout > 2 gradc = [2*x(1)/9, 2*x(1); ... x(2)/2, -1]; gradceq = []; end
Consulte para obtener información sobre las funciones condicionados.Escribir funciones de objetivo escalar La matriz de degradado tiene la forma
gradc
i, j = [∂ ()/∂c
jXi].
Se asocia la primera columna de la matriz de degradado y se asocia la segunda columna.c(1)
c(2)
Esta es la transposición de la forma de los Jacobianos.
Para que un solucionador utilice degradados de restricciones no lineales, indique que existen mediante:optimoptions
options = optimoptions(@fmincon,'SpecifyConstraintGradient',true);
Asegúrese de pasar la estructura de opciones al solucionador:
[x,fval] = fmincon(@myobj,x0,A,b,Aeq,beq,lb,ub, ... @ellipseparabola,options)
Si tiene una licencia, puede calcular gradientes y hessianos automáticamente, como se describe en.Symbolic Math Toolbox™Calcula gradientes y hessianosSymbolic Math Toolbox
Para obtener información sobre las funciones objetivas anónimas, consulte.Objetivos de función anónima
Las funciones de restricción no lineal deben devolver dos salidas. La primera salida corresponde a desigualdades no lineales, y la segunda corresponde a ecualidades no lineales.
Las funciones anónimas devuelven solo una salida. Entonces, ¿cómo puede escribir una función anónima como una restricción no lineal?
La función distribuye varias salidas.deal
Por ejemplo, supongamos que sus desigualdades no lineales son
Supongamos que la igualdad no lineal es
x2 = tanh (x1).
Escriba una función de restricción no lineal como sigue:
c = @(x)[x(1)^2/9 + x(2)^2/4 - 1; x(1)^2 - x(2) - 1]; ceq = @(x)tanh(x(1)) - x(2); nonlinfcn = @(x)deal(c(x),ceq(x));
Para minimizar la función cosh(x1) + sinh(x2) sujeto a las restricciones en, utilice:nonlinfcn
fmincon
obj = @(x)cosh(x(1))+sinh(x(2)); opts = optimoptions(@fmincon,'Algorithm','sqp'); z = fmincon(obj,[0;0],[],[],[],[],[],[],nonlinfcn,opts) 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. z = -0.6530 -0.5737
Para comprobar qué tan bien el punto resultante satisface las restricciones, utilice:z
nonlinfcn
[cout,ceqout] = nonlinfcn(z) cout = -0.8704 0 ceqout = 0
de hecho satisface todas las restricciones dentro del valor predeterminado de la tolerancia de restricción,.z
ConstraintTolerance
1e-6
fgoalattain
| fmincon
| ga
(Global Optimization Toolbox) | GlobalSearch
(Global Optimization Toolbox) | MultiStart
(Global Optimization Toolbox) | patternsearch
(Global Optimization Toolbox)