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.

Cuando el solucionador pudo haber tenido éxito

Punto final es igual a punto inicial

El punto inicial parece ser un mínimo local o una solución porque la medida de optimalidad de primer orden está cerca de 0. Es posible que no esté contento con este resultado, ya que el solucionador no mejora su punto inicial.

Si no está seguro de que el punto inicial es realmente un mínimo local, intente:

  1. A partir de diferentes puntos — ver.Cambie el punto inicial

  2. Comprobando que el objetivo y las restricciones están definidos correctamente (por ejemplo, ¿devuelven los valores correctos en algunos puntos?) — ver.Compruebe las funciones de objetivo y restricción Compruebe que un punto no factible no provoque un error en sus funciones; Ver.Las iteraciones pueden violar restricciones

  3. Cambio de tolerancias, como, y-ver.OptimalityToleranceConstraintToleranceStepToleranceUtilice tolerancias apropiadas

  4. Escalar el problema para que cada coordenada tenga el mismo efecto, vea.Reescalar el problema

  5. Proporcionar información de gradiente y hessian — ver y.Proporcionar gradientes analíticos o JacobianosProporcionar un hessian

Mínimo local posible

El solucionador puede haber alcanzado un mínimo local, pero no puede ser seguro porque la medida de optimalidad de primer orden no es menor que la tolerancia.OptimalityTolerance (Para obtener más información sobre la medida de optimalidad de primer orden, consulte.)Medida de optimalidad de primer orden Para ver si la solución notificada es confiable, tenga en cuenta las siguientes sugerencias.

1. funciones no lisas
2. volver a iniciar en el punto final
3. Pruebe con un algoritmo diferente
4. cambiar tolerancias
5. reescalar el problema
6. comprobar puntos cercanos
7. cambiar opciones de diferenciación finita
8. proporcionar gradientes analíticos o Jacobianos
9. proveer un hessian

1. funciones no lisas

Si intenta minimizar una función no suavizada, o tiene restricciones no lisas, "local Minimum posible" puede ser el mejor mensaje de salida. Esto se debe a que las condiciones de optimalidad de primer orden no se aplican en un punto no suavizado.

Para cerciorarse de que la solución es adecuada, intente.Comprobar puntos cercanos

2. volver a iniciar en el punto final

Reiniciar una optimización en el punto final puede conducir a una solución con una mejor medida de optimalidad de primer orden. Una mejor (menor) medida de optimalidad de primer orden le da más razones para creer que la respuesta es confiable.

Por ejemplo, considere el siguiente problema de minimización, tomado del ejemplo:Uso de matemáticas simbólicas con Optimization Toolbox™ Solvers

options = optimoptions('fminunc','Algorithm','quasi-newton'); funh = @(x)log(1 + (x(1) - 4/3)^2 + 3*(x(2) - (x(1)^3 - x(1)))^2); [xfinal fval exitflag] = fminunc(funh,[-1;2],options)  Local minimum possible.  fminunc stopped because it cannot decrease the  objective function along the current search direction.  xfinal =     1.3333     1.0370  fval =   8.5265e-014  exitflag =      5

El valor de la marca de salida indica que la medida de optimalidad de primer orden estaba por encima de la tolerancia de función.5 Ejecute la minimización de nuevo a partir de:xfinal

[xfinal2 fval2 exitflag2] = fminunc(funh,xfinal,options)  Local minimum found.  Optimization completed because the size of the gradient is  less than the default value of the function tolerance.  xfinal2 =     1.3333     1.0370  fval2 =   6.5281e-014  exitflag2 =      1

El mínimo local es "encontrado", no "posible", y el exitflag es, no.15 Las dos soluciones son prácticamente idénticas. Sin embargo, la segunda ejecución tiene un mensaje de salida más satisfactorio, ya que la medida de optimalidad de primer orden era lo suficientemente baja:, en lugar de.7.5996e-0073.9674e-006

3. Pruebe con un algoritmo diferente

Muchos solucionadores le dan una opción de algoritmo. Diferentes algoritmos pueden conducir a la utilización de diferentes criterios de detención.

Por ejemplo, devuelve exitflag desde la primera ejecución.Volver a iniciar en punto final5 Esta ejecución utiliza el algoritmo.quasi-newton

El algoritmo de la región de confianza requiere un degradado proporcionado por el usuario. contiene un cálculo de la función objetiva y el degradado:betopt.m

function [f gradf] = betopt(x)  g = 1 + (x(1)-4/3)^2 + 3*(x(2) - (x(1)^3-x(1)))^2; f = log(g); gradf(1) = 2*(x(1)-4/3) + 6*(x(2) - (x(1)^3-x(1)))*(1-3*x(1)^2); gradf(1) = gradf(1)/g; gradf(2) = 6*(x(2) - (x(1)^3 -x(1)))/g;

La ejecución de la optimización utilizando el algoritmo da como resultado un exitflag diferente:trust-region

options = optimoptions('fminunc','Algorithm','trust-region','SpecifyObjectiveGradient',true); [xfinal3 fval3 exitflag3] = fminunc(@betopt,[-1;2],options)  Local minimum possible.  fminunc stopped because the final change in function value  relative to its initial value is less than the default value  of the function tolerance.  xfinal3 =     1.3333     1.0370  fval3 =   7.6659e-012  exitflag3 =      3

La condición de salida es mejor que la condición, aunque todavía no es la mejor.quasi-newton Volver a ejecutar el algoritmo desde el punto final produce un mejor punto, con extremadamente pequeña medida de optimalidad de primer orden:

[xfinal4 fval4 eflag4 output4] = fminunc(@betopt,xfinal3,options)  Local minimum found.  Optimization completed because the size of the gradient is  less than the default value of the function tolerance.  xfinal4 =      1.3333     1.0370  fval4 =      0  eflag4 =      1  output4 =           iterations: 1           funcCount: 2        cgiterations: 1       firstorderopt: 7.5497e-11           algorithm: 'trust-region'             message: 'Local minimum found.  Optimization completed because the size o...'     constrviolation: []

4. cambiar tolerancias

A veces, apretar o aflojar las tolerancias conduce a un resultado más satisfactorio. Por ejemplo, elija un valor más pequeño de la sección:OptimalityTolerancePruebe con un algoritmo diferente

options = optimoptions('fminunc','Algorithm','trust-region',...     'OptimalityTolerance',1e-8,'SpecifyObjectiveGradient',true); % default=1e-6 [xfinal3 fval3 eflag3 output3] = fminunc(@betopt,[-1;2],options)  Local minimum found.  Optimization completed because the size of the gradient is  less than the selected value of the function tolerance.  xfinal3 =     1.3333     1.0370  fval3 =      0  eflag3 =      1  output3 =           iterations: 15           funcCount: 16        cgiterations: 12       firstorderopt: 7.5497e-11           algorithm: 'trust-region'             message: 'Local minimum found.  Optimization completed because the size...'     constrviolation: []

tomó una iteración más que antes, llegando a una mejor solución.fminunc

5. reescalar el problema

Intente que cada coordenada dé el mismo efecto en las funciones objetivo y restricción mediante el escalado y centrado. Para ver ejemplos, vea.Centrar y escalar su problema

6. comprobar puntos cercanos

Evalúe su función objetiva y las restricciones, si existen, en los puntos cercanos al punto final. Si el punto final es un mínimo local, los puntos factibles cercanos tienen valores de función objetivo más grandes. Vea por un ejemplo.Comprobar puntos cercanos

Si tiene un Global Optimization Toolbox licencia, intente ejecutar el solucionador desde el punto final. examina los puntos cercanos y acepta todos los tipos de restricciones.patternsearchpatternsearch

7. cambiar opciones de diferenciación finita

Las diferencias finitas centrales requieren más tiempo para evaluar, pero son mucho más precisas. Utilice las diferencias centrales cuando el problema pueda tener una curvatura alta.

Para elegir las diferencias centrales en la línea de comandos, use para establecer en, en lugar del valor predeterminado.optimoptions'FiniteDifferenceType''central''forward'

Para elegir las diferencias centrales en la aplicación de optimización, establezcaOptions > Approximated derivatives > Type central differences.

8. proporcionar gradientes analíticos o Jacobianos

Si no proporciona gradientes o Jacobianos, los solucionadores estiman gradientes y Jacobianos por diferencias finitas. Por lo tanto, proporcionar estos derivados puede ahorrar tiempo de cálculo y puede conducir a una mayor precisión.

Para problemas restringidos, 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.

Proporcionar gradientes o Jacobianos en los archivos para su función objetiva y funciones de restricción no lineal. Para obtener información detallada sobre la sintaxis, vea y.Escribir funciones de objetivo escalarEscritura de funciones de objetivo vectorial y matrizRestricciones no lineales

Para comprobar que la función de degradado o jacobiana es correcta, utilice la opción, como se describe en.CheckGradientsComprobación de la validez de gradientes o Jacobianos

Si tiene una licencia, puede calcular gradientes y Hessios mediante programación.Symbolic Math Toolbox™ Para ver un ejemplo, vea.Calcula gradientes y hessianosSymbolic Math Toolbox

Para ver ejemplos con degradados y Jacobianos, vea,,, y.Minimización con gradiente y hessianRestricciones no lineales con degradadosCalcula gradientes y hessianosSymbolic Math ToolboxEcuaciones no lineales con analítica jacobianaEcuaciones no lineales con

9. proveer un hessian

Los solvers a menudo funcionan de forma más fiable y con menos iteraciones cuando se suministra un hessian.

Los siguientes solucionadores y algoritmos aceptan los hessianos:

Si tiene una licencia, puede calcular gradientes y Hessios mediante programación.Symbolic Math Toolbox Para ver un ejemplo, vea.Calcula gradientes y hessianosSymbolic Math Toolbox

El ejemplo en espectáculos que toma 77 iteraciones sin un hessian, pero sólo 19 iteraciones con un hessian.Calcula gradientes y hessianosSymbolic Math Toolboxfmincon