Main Content

Indicadores de salida y mensajes de salida

Indicadores de salida

Cuando un solver de optimización completa su tarea, establece un indicador de salida. Un indicador de salida es un entero que codifica la razón por la que el solver detuvo sus iteraciones. En general:

  • Los indicadores de salida positivos corresponden a resultados exitosos.

  • Los indicadores de salida negativos corresponden a resultados no exitosos.

  • El indicador de salida cero corresponde a la detención del solver por sobrepasar un límite de iteraciones o un límite del número de evaluaciones de función (consulte Iteraciones y recuentos de la función y también Tolerancias y criterios de detención).

Esta tabla contiene enlaces a la descripción del indicador de salida de cada solver.

Indicador de salida por solver

coneprog exitflag

fgoalattain exitflag

fminbnd exitflag

fmincon exitflag

fminimax exitflag

fminsearch exitflag

fminunc exitflag

fseminf exitflag

fsolve exitflag

fzero exitflag

intlinprog exitflag

linprog exitflag

lsqcurvefit exitflag

lsqlin exitflag

lsqnonlin exitflag

lsqnonneg exitflag

quadprog exitflag

 

Nota

Los indicadores de salida no son guías infalibles de la calidad de una solución. Muchos otros factores, como los ajustes de la tolerancia, pueden afectar a que una solución sea o no satisfactoria. Le corresponde a usted decidir si un solver devuelve una respuesta satisfactoria o no. En ocasiones, un indicador de salida negativo no corresponde a una solución "mala". De forma similar, en ocasiones, un indicador de salida positivo no corresponde a una solución "buena".

Obtiene un indicador de salida llamando a un solver con la sintaxis exitflag. La sintaxis depende del solver. Para obtener más detalles, consulte las páginas de referencia de la función del solver. Por ejemplo, para fsolve, la sintaxis de llamada para obtener un indicador de salida es

[x,fval,exitflag] = fsolve(...)

El siguiente ejemplo utiliza esta sintaxis. Suponga que desea resolver el sistema de ecuaciones no lineales

2x1x2=ex1x1+2x2=ex2.

Escriba estas ecuaciones como una función anónima que da un vector cero en una solución:

myfcn = @(x)[2*x(1) - x(2) - exp(-x(1));
      -x(1) + 2*x(2) - exp(-x(2))];

Llame a fsolve con la sintaxis exitflag en el punto inicial [-5 5]:

[xfinal fval exitflag] = fsolve(myfcn,[-5 -5])
Equation solved.

fsolve completed because the vector of function values is near zero
as measured by the value of the function tolerance, and
the problem appears regular as measured by the gradient.

xfinal =
    0.5671    0.5671

fval =
  1.0e-06 *
   -0.4059
   -0.4059

exitflag =
     1

En la tabla para la sintaxis exitflag de fsolve, encuentra que el valor de un identificador de salida 1 significa “La función ha convergido a una solución x”. En otras palabras, fsolve informa de que myfcn está cerca de cero en x = [0.5671 0.5671].

Mensajes de salida

Cada solver genera un mensaje en la ventana de comandos de MATLAB® al final de sus iteraciones. Este mensaje explica brevemente por qué se detuvo el solver. Es posible que el mensaje dé más detalles que el indicador de salida.

Muchos ejemplos de esta documentación muestran mensajes de salida, como Definir y resolver un problema en la línea de comandos. El ejemplo de la sección anterior, Indicadores de salida, muestra el siguiente mensaje de salida:

Equation solved.

fsolve completed because the vector of function values is near zero
as measured by the value of the function tolerance, and
the problem appears regular as measured by the gradient.

Este mensaje es más informativo que el indicador de salida. El mensaje indica que el gradiente es relevante. El mensaje también expone que la tolerancia de la función controla lo cerca de 0 que debe estar el vector de los valores de la función para que fsolve considere la solución como completada.

Mensajes de salida aumentados

Algunos solvers tienen mensajes de salida que contienen enlaces para obtener más información. Hay dos tipos de enlaces:

  • Enlaces en palabras o frases. Si hace clic en un enlace de este tipo, se abre una ventana que muestra una definición del término o da otra información. La ventana nueva puede contener enlaces a las páginas de documentación online para obtener información más detallada.

  • Un enlace como la última línea de la pantalla que indica <stopping criteria details>. Si hace clic en este enlace, MATLAB muestra más detalles sobre la razón por la que se detuvo el solver.

El solver fminunc tiene mensajes de salida aumentados:

opts = optimoptions(@fminunc,'Algorithm','quasi-newton'); % 'trust-region' needs gradient
[xfinal fval exitflag] = fminunc(@sin,0,opts)

Así se obtienen los siguientes resultados:

Cada una de las palabras o frases subrayadas contiene un enlace que proporciona más información.

  • El enlace <stopping criteria details> imprime lo siguiente en la línea de comandos de MATLAB:

    Optimization completed: The first-order optimality measure, 0.000000e+00, is less 
    than options.OptimalityTolerance = 1.000000e-06.
  • Los otros enlaces abren una ventana de ayuda con definiciones de términos. Por ejemplo, haciendo clic en el enlace Local minimum found se abre la siguiente ventana:

    Haciendo clic en el enlace de ampliación first-order optimality measure se abre la definición de la medida de optimalidad de primer orden para fminunc:

    El enlace de ampliación es una manera de obtener más información en la misma ventana. Haciendo clic en el enlace de ampliación first-order optimality measure de nuevo se cierra la definición.

  • Los otros enlaces abren la vista de ayuda.

Opciones de los mensajes de salida

Establezca la opción Display para controlar la apariencia tanto de los mensajes de salida como de la visualización iterativa. Para obtener más información, consulte Visualización iterativa. La siguiente tabla muestra el efecto de los diferentes ajustes de la opción Display.

Valor de la opción DisplaySalida en la ventana de comandos
Mensaje de salidaVisualización iterativa
'none' o el sinónimo 'off'NingunoNinguna
'final' (valor predeterminado para la mayoría de solvers)Valor predeterminadoNinguna
'final-detailed'DetalladoNinguna
'iter'Valor predeterminado
'iter-detailed'Detallado
'notify'Valor predeterminado solo si exitflag ≤ 0Ninguna
'notify-detailed'Detallado solo si exitflag ≤ 0Ninguna

Por ejemplo:

opts = optimoptions(@fminunc,'Display','iter-detailed','Algorithm','quasi-newton');
[xfinal fval] = fminunc(@cos,1,opts);

genera la siguiente visualización:

Temas relacionados