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.

Restricciones no lineales

Varios solucionadores de optimización aceptan restricciones no lineales, incluyendo,,, y elfminconfseminffgoalattainfminimax Global Optimization Toolbox solucionadores,,,,, y.gagamultiobjpatternsearchparetosearchGlobalSearchMultiStart 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.cceq Devuelva una entrada vacía para una restricción inexistente.[]

Por ejemplo, supongamos que tiene las siguientes desigualdades como restricciones:

x129+x2241,x2x121.

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

Incluir degradados en funciones de restricción

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

gradci, j = [∂ ()/∂cjXi].

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

Funciones de restricción no lineal anónimas

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

x129+x2241,x2x121.

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:nonlinfcnfmincon

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:znonlinfcn

[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,.zConstraintTolerance1e-6

Consulte también

| | | | |

Temas relacionados