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.

Comprobación de la validez de gradientes o Jacobianos

Comprobar degradado o jacobiano en función objetiva

Muchos solucionadores permiten suministrar una función que calcula los primeros derivados (gradientes o Jacobianos) de funciones objetivas o de restricción. Puede comprobar si los derivados calculados por su función coinciden con las aproximaciones de diferencias finitas. Esta comprobación puede ayudarle a diagnosticar si su función derivada es correcta.

  • Si un componente de la función de degradado es menor que, "coincidencia" significa la diferencia absoluta de la función de degradado y la aproximación de la diferencia finita de ese componente es menor que.11e-6

  • De lo contrario, "match" significa que la diferencia relativa es menor que.1e-6

La opción hace que el solucionador Compruebe el derivado suministrado frente a una aproximación de diferencias finitas en un solo punto.CheckGradients Si la diferencia finita y los derivados suministrados no coinciden, los errores del solucionador. Si los derivados coinciden con el interior, el solucionador notifica las diferencias calculadas y continúa iterando sin más comprobaciones derivadas.1e-6 Los solucionadores verificaron la coincidencia en un punto que es una pequeña perturbación aleatoria del punto inicial, modificada para estar dentro de los límites.x0 Los solucionadores no incluyen los cálculos para el recuento de funciones; Ver.CheckGradientsIteraciones y recuentos de funciones

Cómo comprobar derivados

  • En la línea de comando:MATLAB®

    1. Configure las opciones o las que desee utilizar.SpecifyObjectiveGradientSpecifyConstraintGradienttrueoptimoptions Asegúrese de que sus funciones objetivo o de restricción suministran los derivados apropiados.

    2. Establezca la opción en.CheckGradientstrue

  • Uso de la aplicación Optimization:

    1. En el panel, elija::Problem Setup and ResultsDerivativesObjective function Gradient supplied O::Nonlinear constraint functionDerivatives Gradient supplied. Asegúrese de que sus funciones objetivo o de restricción suministran los derivados apropiados.

    2. En el panel, compruebeOptionsUser-supplied derivatives > Validate user-supplied derivatives

Las diferencias finitas centrales son más precisas que las diferencias finitas adelantas predeterminadas. Para utilizar diferencias finitas centrales:

  • En la línea de comandos, establezca la opción de usar.MATLABFiniteDifferenceType'central'optimoptions

  • Con la aplicación de optimización, en el panel, establezcaApproximated derivativesType central differences.

Ejemplo: comprobación de derivados de funciones objetivas y de restricción

Funciones objetivas y de restricción

Considere el problema de minimizar la función de Rosenbrock dentro del disco de la unidad como se describe en.Resuelva un problema no lineal restringido, basado en Solver La función calcula la función objetiva y su gradiente:rosenboth

function [f g H] = rosenboth(x)  f = 100*(x(2) - x(1)^2)^2 + (1-x(1))^2;  if nargout > 1     g = [-400*(x(2)-x(1)^2)*x(1)-2*(1-x(1));         200*(x(2)-x(1)^2)];          if nargout > 2         H = [1200*x(1)^2-400*x(2)+2, -400*x(1);             -400*x(1), 200];       end end

calcula el Hessiano, también, pero este ejemplo no utiliza el hessian.rosenboth

La función calcula correctamente la función de restricción y su degradado:unitdisk2

function [c,ceq,gc,gceq] = unitdisk2(x) c = x(1)^2 + x(2)^2 - 1; ceq = [ ];  if nargout > 2     gc = [2*x(1);2*x(2)];     gceq = []; end

La función calcula incorrectamente el degradado de la función de restricción:unitdiskb

function [c ceq gc gceq] = unitdiskb(x) c = x(1)^2 + x(2)^2 - 1; ceq = [ ];  if nargout > 2     gc = [x(1);x(2)]; % Gradient incorrect: off by a factor of 2     gceq = []; end

Comprobación de derivados en la línea de comando

  1. Defina las opciones para utilizar el algoritmo de punto interior, el degradado de las funciones objetivo y de restricción, y la opción:CheckGradients

    % For reproducibility--CheckGradients randomly perturbs the initial point rng(0,'twister');  options = optimoptions(@fmincon,'Algorithm','interior-point',...     'CheckGradients',true,'SpecifyObjectiveGradient',true,'SpecifyConstraintGradient',true);
  2. Resuelva la minimización con el uso de la función de restricción errónea:fminconunitdiskb

    [x fval exitflag output] = fmincon(@rosenboth,...    [-1;2],[],[],[],[],[],[],@unitdiskb,options); ____________________________________________________________    Derivative Check Information    Objective function derivatives: Maximum relative difference between user-supplied  and finite-difference derivatives = 1.84768e-008.  Nonlinear inequality constraint derivatives: Maximum relative difference between user-supplied  and finite-difference derivatives = 1.  User-supplied constraint derivative element (2,1):     1.99838  Finite-difference constraint derivative element (2,1): 3.99675 ____________________________________________________________  Error using validateFirstDerivatives Derivative Check failed: User-supplied and forward finite-difference derivatives do not match within 1e-006 relative tolerance.  Error in fmincon at 805     validateFirstDerivatives(funfcn,confcn,X, ...

    La función de restricción no coincide con el degradado calculado, lo que le anima a comprobar la función de un error.

  3. Reemplace la función de restricción con y ejecute la minimización de nuevo:unitdiskbunitdisk2

    [x fval exitflag output] = fmincon(@rosenboth,...    [-1;2],[],[],[],[],[],[],@unitdisk2,options);  ____________________________________________________________    Derivative Check Information    Objective function derivatives: Maximum relative difference between user-supplied  and finite-difference derivatives = 1.28553e-008.  Nonlinear inequality constraint derivatives: Maximum relative difference between user-supplied  and finite-difference derivatives = 1.46443e-008.  Derivative Check successfully passed. ____________________________________________________________   Local minimum found that satisfies the constraints...

Comprobación de derivados con la aplicación de optimización

Nota

La aplicación Optimization advierte que se eliminará en una versión futura.

Para configurar el ejemplo utilizando las funciones derivadas correctas, pero a partir de, utilizando la aplicación de optimización:[0 0]

  1. Inicie la aplicación Optimization entrando en la línea de comandos.optimtool

  2. Establezca el panel para que coincida con la siguiente figura:Problem Setup and Results

  3. Establezca el panel para que coincida con la siguiente figura:Options

  4. Presione el botón debajo.StartRun solver and view results

    La pantalla de salida muestra

    La aproximación de la diferencia finita delantera es bastante inexacta cerca de que la verificación derivada falla.[0 0]

  5. Para utilizar las diferencias centrales más precisas, seleccione central differences en el panel:Approximated derivatives > Type

  6. Haga clic, entonces.Run solver and view results > Clear ResultsStart Esta vez la verificación derivada es acertada:

La comprobación derivada también se realiza correctamente cuando se selecciona el punto inicial o la mayoría de los puntos aleatorios.[-1 2]