Main Content

Sintaxis de función de salida y función de gráfica

¿Qué son las funciones de salida y las funciones de gráfica?

Para ver ejemplos de funciones de salida y funciones de gráfica, consulte Funciones de salida para Optimization Toolbox y Funciones de gráfica.

La opción OutputFcn especifica una o varias funciones a las que una función de optimización llama en cada iteración. Por lo general, puede utilizar una función de salida para representar puntos en cada iteración o para mostrar cantidades de optimización del algoritmo. Utilizando una función de salida se pueden ver las cantidades de optimización, pero no se pueden establecer. También puede detener la ejecución de un solver de acuerdo con las condiciones que establece; consulte Estructura de la función de salida o la función de gráfica.

Del mismo modo, la opción PlotFcn especifica una o varias funciones a las que una función de optimización llama en cada iteración y puede detener el solver. La diferencia entre una función de gráfica y una función de salida es doble:

  • Existen funciones de gráfica predefinidas para la mayoría de solvers, lo que permite obtener gráficas típicas con facilidad.

  • Una función de gráfica envía una salida a una ventana con los botones Pause y Stop, lo que permite detener el solver temprano sin perder información.

Precaución

Las funciones de salida y las funciones de gráfica intlinprog difieren de las de otros solvers. Consulte intlinprog Output Function and Plot Function Syntax.

Para configurar una función de salida o una función de gráfica, proceda de la siguiente forma:

  1. Escriba la función como un archivo de función o una función local.

  2. Utilice optimoptions para establecer el valor de OutputFcn o PlotFcn de modo que sea un identificador de función, es decir, el nombre de la función precedido por el símbolo @. Por ejemplo, si la función de salida es outfun.m, el comando

     options = optimoptions(@solvername,'OutputFcn',@outfun);

    especifica OutputFcn como identificador de outfun. Para especificar más de una función de salida o función de gráfica, utilice la sintaxis

     options = optimoptions('solvername','OutputFcn',{@outfun, @outfun2});

    Para utilizar la finalización con tabulación para ayudar a seleccionar un nombre de función de gráfica integrada, utilice comillas en lugar de un identificador de función.

    Tab-completion list

  3. Llame a la función de optimización con options como argumento de entrada.

Pasar parámetros adicionales explica cómo pasar parámetros o datos a la función de salida o función de gráfica, si fuera necesario.

Estructura de la función de salida o la función de gráfica

La línea de definición de función de la función de salida o de la función de gráfica tiene el siguiente formato:

stop = outfun(x,optimValues,state)

donde

  • x es el punto calculado por el algoritmo en la iteración actual.

  • optimValues es una estructura que contiene datos de la iteración actual. Campos de optimValues describe la estructura en detalle.

  • state es el estado actual del algoritmo. Estados del algoritmo enumera los valores posibles.

  • stop es un indicador que es true o false dependiendo de si la rutina de optimización debe detenerse (true) o continuar (false). Para obtener más detalles, consulte Indicador Stop.

La función de optimización pasa los valores de los argumentos de entrada a outfun en cada iteración.

Campos de optimValues

La siguiente tabla muestra los campos de la estructura optimValues. Una función de optimización concreta devuelve valores únicamente para algunos de estos campos. Para cada campo, la columna Devuelto por las funciones de la tabla muestra las funciones que devuelven el campo.

Argumentos de salida correspondientes

Algunos de los campos de optimValues corresponden a argumentos de salida de la función de optimización. Después de la iteración final del algoritmo de optimización, el valor de este tipo de campo es igual al argumento de salida correspondiente. Por ejemplo, optimValues.fval corresponde al argumento de salida fval. Por lo tanto, si llama a fmincon con una función de salida y devuelve fval, el valor final de optimValues.fval es igual a fval. La columna Descripción de la siguiente tabla muestra los campos que tienen un argumento de salida correspondiente.

Visualización en la línea de comandos

Los valores de algunos campos de optimValues se muestran en la línea de comandos cuando llama a la función de optimización con el campo Display de options establecido en 'iter', como se describe en Visualización iterativa. Por ejemplo, optimValues.fval se muestra en la columna f(x). La columna Visualización en la línea de comandos de la siguiente tabla muestra los campos que se pueden visualizar en la línea de comandos.

Algunos campos optimValues se aplican únicamente a algoritmos específicos:

  • AS: active-set

  • D: trust-region-dogleg

  • IP: interior-point

  • LM: levenberg-marquardt

  • Q: quasi-newton

  • SQP: sqp

  • TR: trust-region

  • TRR: trust-region-reflective

Algunos campos optimValues existen en determinados solvers o algoritmos, pero siempre están rellenados con valores vacíos o de cero, por lo que son irrelevantes. Estos campos incluyen:

  • constrviolation para fminunc TR y fsolve TRR.

  • procedure para fmincon TRR y SQP, y para fminunc.

Campos optimValues

Campo OptimValues (optimValues.field)DescripciónDevuelto por las funcionesVisualización en la línea de comandos

attainfactor

Factor de consecución para problema multiobjetivo. Para obtener más detalles, consulte Goal Attainment Method.

fgoalattain

Ninguna

cgiterations

Número de iteraciones de gradiente conjugado en la iteración de optimización actual.

fmincon (IP, TRR), fminunc (TR), fsolve (TRR), lsqcurvefit (TRR), lsqnonlin (TRR)

CG-iterations

Consulte Visualización iterativa.

constrviolation

Vulneración de restricciones máxima.

fgoalattain, fmincon, fminimax, fseminf

fminunc TR y fsolve TRR proporcionan valores de campo en blanco.

Max constraint o Feasibility

Consulte Visualización iterativa.

degenerate

Medida de degeneración. Un punto es degenerado si:

  • La derivada parcial con respecto a una de las variables es 0 en el punto y

  • Hay un límite de restricción activo para esa variable en el punto.

Consulte Degeneración.

fmincon (TRR), lsqcurvefit (TRR), lsqnonlin (TRR)

Ninguna

directionalderivative

Derivada direccional en la dirección de búsqueda.

fgoalattain, fmincon (AS), fminimax, fminunc (Q), fseminf, fsolve (LM), lsqcurvefit (LM), lsqnonlin (LM)

Directional derivative

Consulte Visualización iterativa.

firstorderopt

Optimalidad de primer orden (depende del algoritmo). El valor final es igual a la salida de función de optimización output.firstorderopt.

fgoalattain, fmincon, fminimax, fminunc, fseminf, fsolve, lsqcurvefit, lsqnonlin

First-order optimality

Consulte Visualización iterativa.

funccount

Número acumulativo de evaluaciones de función. El valor final es igual a la salida de función de optimización output.funcCount.

fgoalattain, fminbnd, fmincon, fminimax, fminsearch, fminunc, fsolve, fzero, fseminf, lsqcurvefit, lsqnonlin

F-count o Func-count

Consulte Visualización iterativa.

fval

Valor de función en el punto actual. El valor final es igual a la salida de función de optimización fval.

Para fsolve, fval es el valor de función vectorial y la visualización iterativa f(x) es la norma cuadrada de este vector.

fgoalattain, fminbnd, fmincon, fminimax, fminsearch, fminunc, fseminf, fsolve, fzero

f(x)

Consulte Visualización iterativa.

gradient

Gradiente actual de la función objetivo: o el gradiente analítico si lo proporciona o la aproximación de diferencias finitas. El valor final es igual a la salida de función de optimización grad.

fgoalattain, fmincon, fminimax, fminunc, fseminf, fsolve, lsqcurvefit, lsqnonlin

Ninguna

iteration

Número de iteraciones: comienza en 0. El valor final es igual a la salida de función de optimización output.iterations.

fgoalattain, fminbnd, fmincon, fminimax, fminsearch, fminunc, fsolve, fseminf, fzero, lsqcurvefit, lsqnonlin

Iteration

Consulte Visualización iterativa.

lambda

El parámetro Levenberg-Marquardt, lambda, en la iteración actual. Consulte Método de Levenberg-Marquardt.

fsolve (LM), lsqcurvefit (LM), lsqnonlin (LM)

Lambda

lssteplength

Longitud de paso actual dividida por la longitud de paso prevista inicialmente

fmincon (AS, SQP), fminunc (Q)

Steplength o Line search steplength o Step-size

Consulte Visualización iterativa.

maxfval

Valor máximo de la función

fminimax

Ninguna

positivedefinite

0 si el algoritmo detecta una curvatura negativa mientras se calcula el paso de Newton.

De lo contrario, 1.

fmincon (TRR), fminunc (TR), fsolve (TRR), lsqcurvefit (TRR), lsqnonlin (TRR)

Ninguna

procedure

Mensajes de procedimiento.

fgoalattain, fminbnd, fmincon (AS), fminimax, fminsearch, fseminf, fzero

fmincon TRR y SQP, y fminunc proporcionan valores de campo en blanco.

Procedure

Consulte Visualización iterativa.

ratio

La relación de cambio en la función objetivo para cambiar a la aproximación cuadrática.

fmincon (TRR), fminunc (TR), fsolve (TRR), lsqcurvefit (TRR), lsqnonlin (TRR)

Ninguna

residual

El vector residual.

lsqcurvefit, lsqnonlin,

Residual

Consulte Visualización iterativa.

resnorm

La norma euclídea del valor residual al cuadrado.

lsqcurvefit, lsqnonlin

Resnorm

Consulte Visualización iterativa.

searchdirection

Dirección de búsqueda.

fgoalattain, fmincon (AS, SQP), fminimax, fminunc (Q), fseminf, fsolve (LM), lsqcurvefit (LM), lsqnonlin (LM)

Ninguna

stepaccept

Estado del paso trust-region actual. Devuelve true si el paso trust-region actual se ha realizado correctamente y false si el paso trust-region actual no se ha realizado correctamente.

fsolve (D)

Ninguna

stepsize

Tamaño de paso actual (desplazamiento en x). El valor final es igual a la salida de función de optimización output.stepsize.

fgoalattain, fmincon, fminimax, fminunc, fseminf, fsolve, lsqcurvefit, lsqnonlin

Step-size o Norm of Step

Consulte Visualización iterativa.

trustregionradius

Radio de la región de confianza.

fmincon (IP, TRR), fminunc (TR), fsolve (D, TRR), lsqcurvefit (TRR), lsqnonlin (TRR)

Trust-region radius

Consulte Visualización iterativa.

Degeneración

El valor del campo degenerate, que mide la degeneración del punto de optimización x actual, se define de la siguiente forma. Primero, defina un vector r, del mismo tamaño que x, para el que r(i) sea la distancia mínima desde x(i) hasta las i-ésimas entradas de los límites inferior y superior, lb y ub. Es decir,

r = min(abs(ub-x, x-lb))

Entonces el valor de degenerate es la entrada mínima del vector r + abs(grad), donde grad es el gradiente de la función objetivo. El valor de degenerate es 0 si hay un índice i para el se cumplen las dos condiciones siguientes:

  • grad(i) = 0

  • x(i) es igual a la i-ésima entrada del límite superior o el límite inferior.

Estados del algoritmo

La siguiente tabla muestra los valores posibles de state:

EstadoDescripción

'init'

El algoritmo se encuentra en el estado inicial antes de la primera iteración.

'interrupt'

El algoritmo se encuentra en alguna parte computacionalmente costosa de la iteración. En este estado, la función de salida puede interrumpir la iteración actual de la optimización. En este momento, los valores de x y optimValues son los mismos que en la última llamada a la función de salida en la que state=='iter'.

'iter'

El algoritmo se encuentra al final de una iteración.

'done'

El algoritmo se encuentra en el estado final después de la última iteración.

El estado 'interrupt' tiene lugar únicamente en el algoritmo fmincon 'active-set' y los solvers fgoalattain, fminimax y fseminf. En este caso, el estado puede tener lugar antes de una solución de subproblema de programación cuadrática o una búsqueda de recta.

El siguiente código muestra cómo la función de salida puede usar el valor de state para decidir qué tareas realizar en la iteración actual:

switch state
    case 'iter'
          % Make updates to plot or guis as needed
    case 'interrupt'
          % Probably no action here. Check conditions to see  
          % whether optimization should quit.
    case 'init'
          % Setup for plots or guis
    case 'done'
          % Cleanup of plots, guis, or final plot
otherwise
end

Indicador Stop

El argumento de salida stop es un indicador que es true o false. El indicador notifica a la función de optimización si la optimización debe detenerse (true) o continuar (false). Los siguientes ejemplos muestran formas típicas de utilizar el indicador stop.

Detener una optimización basándose en datos de optimValues

La función de salida o la función de gráfica puede detener una optimización en cualquier iteración basándose en los datos actuales de optimValues. Por ejemplo, el siguiente código establece stop en true, deteniendo la optimización, cuando el tamaño de la derivada direccional es menor que .01:

function stop = outfun(x,optimValues,state)
stop = false;
% Check whether directional derivative norm is less than .01.
if norm(optimValues.directionalderivative) < .01
    stop = true;
end 

Detener una optimización basándose en una entrada de interfaz gráfica

Si diseña una interfaz gráfica para realizar optimizaciones, puede hacer que la función de salida detenga una optimización cuando un usuario haga clic en un botón Stop de la interfaz gráfica. El siguiente código muestra cómo hacerlo, suponiendo que el callback del botón Stop almacena el valor true en el campo optimstop de una estructura handles llamada hObject:

function stop = outfun(x,optimValues,state)
stop = false;
% Check if user has requested to stop the optimization.
stop = getappdata(hObject,'optimstop');

Temas relacionados