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:
Escriba la función como un archivo de función o una función local.
Utilice
optimoptions
para establecer el valor deOutputFcn
oPlotFcn
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 esoutfun.m
, el comandooptions = optimoptions(@solvername,'OutputFcn',@outfun);
especifica
OutputFcn
como identificador deoutfun
. Para especificar más de una función de salida o función de gráfica, utilice la sintaxisoptions = 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.
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 estrue
ofalse
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
parafminunc
TR
yfsolve
TRR
.procedure
parafmincon
TRR
ySQP
, y parafminunc
.
Campos optimValues
Campo OptimValues (optimValues.field) | Descripción | Devuelto por las funciones | Visualización en la línea de comandos |
---|---|---|---|
| Factor de consecución para problema multiobjetivo. Para obtener más detalles, consulte Goal Attainment Method. | Ninguna | |
| Número de iteraciones de gradiente conjugado en la iteración de optimización actual. |
|
Consulte Visualización iterativa. |
| Vulneración de restricciones máxima. |
|
Consulte Visualización iterativa. |
| Medida de degeneración. Un punto es degenerado si:
Consulte Degeneración. |
| Ninguna |
| Derivada direccional en la dirección de búsqueda. |
|
Consulte Visualización iterativa. |
| Optimalidad de primer orden (depende del algoritmo). El valor final es igual a la salida de función de optimización |
|
Consulte Visualización iterativa. |
| Número acumulativo de evaluaciones de función. El valor final es igual a la salida de función de optimización |
|
Consulte Visualización iterativa. |
| Valor de función en el punto actual. El valor final es igual a la salida de función de optimización Para |
|
Consulte Visualización iterativa. |
| 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 |
| Ninguna |
| Número de iteraciones: comienza en |
|
Consulte Visualización iterativa. |
| El parámetro Levenberg-Marquardt, | |
|
| Longitud de paso actual dividida por la longitud de paso prevista inicialmente |
Consulte Visualización iterativa. | |
| Valor máximo de la función | fminimax | Ninguna |
|
De lo contrario, |
| Ninguna |
| Mensajes de procedimiento. |
|
Consulte Visualización iterativa. |
| La relación de cambio en la función objetivo para cambiar a la aproximación cuadrática. |
| Ninguna |
| El vector residual. |
Consulte Visualización iterativa. | |
| La norma euclídea del valor residual al cuadrado. |
Consulte Visualización iterativa. | |
| Dirección de búsqueda. |
| Ninguna |
| 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. | | Ninguna |
| Tamaño de paso actual (desplazamiento en |
|
Consulte Visualización iterativa. |
| Radio de la región de confianza. |
|
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
:
Estado | Descripción |
---|---|
| El algoritmo se encuentra en el estado inicial antes de la primera iteración. |
| 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 |
| El algoritmo se encuentra al final de una iteración. |
| 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');