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.

Resolución de problemas y consejos de optimización

Esta tabla describe los problemas de optimización habituales y ofrece recomendaciones para resolverlos.

Problema

Recomendación

La solución encontrada por fminbnd o fminsearch no es un mínimo global. Un mínimo global tiene el menor valor de la función objetiva entre todos los puntos en el espacio de búsqueda.

No hay ninguna garantía de que una solución sea un mínimo global a no ser que el problema sea continuo y solo tenga un mínimo. Para buscar un mínimo global, comience la optimización a partir de múltiples puntos de inicio (o intervalos, en el caso de fminbnd).

Es imposible evaluar la función objetiva f(x) en algunos puntos x. Dichos puntos se llaman inviables.

Modifique la función para que devuelva un gran valor positivo para f(x) en los puntos inviables x.

La rutina de minimización parece entrar en un bucle infinito o devuelve una solución que no es un mínimo (o no es un cero, en el caso de fzero).

Su función objetiva quizás devuelva NaN o valores complejos. Los solvers solo esperan valores reales de la función objetiva. Cualquier otro tipo de valores pueden provocar resultados inesperados. Para determinar si hay NaN o valores complejos, establezca

options = optimset('FunValCheck','on')

y llame a la función de optimización con options como argumento de entrada. Si una función objetiva devuelve un NaN o valor complejo, esta configuración hace que el solver arroje un error.

El solver lleva mucho tiempo.

La mayoría de problemas de optimización se benefician de buenos puntos de inicio. Pruebe puntos de inicio al azar en una región que pueda estar cerca de una solución, según las características de su problema.

Algunas veces podrá resolver un problema complicado con un enfoque evolutivo. Primero, resuelva problemas con un menor número de variables independientes. Utilice soluciones a partir de estos problemas más sencillos como puntos de inicio para problemas más complicados con una aplicación apropiada. Además, a veces también podrá acelerar la solución si utiliza funciones objetivas más simples y condiciones de parada menos estrictas en las fases iniciales de un problema de optimización.

No está claro qué hace el solver.

Para ver qué hace el solver mientras itera:

fminsearch no encuentra una solución.

Hay varias razones por las que fminsearch podría no encontrar una solución.

  • Escalado deficiente. Si su problema no está debidamente centrado y escalado, puede que el solver no converja correctamente. Intente hacer que cada coordenada genere aproximadamente el mismo efecto en la función objetiva y asegúrese de que la escala de cada coordenada junto a una posible solución no es demasiado grande ni demasiado pequeña. Para ello, edite la función objetiva y añada o multiplique las constantes correspondientes para cada coordenada.

  • Criterio de parada inapropiado. Si el valor que especifica para TolFun o TolX es demasiado pequeño, puede que fminsearch no se dé cuenta cuando alcance una solución. Si el valor es demasiado grande, fminsearch puede detenerse lejos de una solución.

  • Punto inicial deficiente. Intente iniciar fminsearch desde varios puntos iniciales.

  • Iteraciones insuficientes. Si el solver agota las iteraciones o se atasca, intente reiniciar fminsearch desde el punto final para alcanzar una mejor solución. A veces, fminsearch alcanza una mejor solución cuando aumenta el valor de las opciones MaxFunEvals y MaxIter desde su valor predeterminado de 200*length(x0).

Temas relacionados