Criterio de detención para Nelder Mead

11

Estoy tratando de implementar el algoritmo Nelder-Mead para optimizar una función. La página de Wikipedia sobre Nelder-Mead es sorprendentemente clara sobre todo el algoritmo, excepto por su criterio de detención. Ahí dice tristemente:

Verifique la convergencia [se necesita aclaración] .

Probé y probé un par de criterios yo mismo:

  • Deténgase si donde es pequeño y donde es el -ésimo vértice del simplex, ordenado de bajo ( ) a alto ( ) valores de función. En otras palabras, cuando el valor máximo del simplex es casi igual al valor mínimo. Descubrí que esto no funcionaba correctamente, ya que esto no garantiza lo que hace la función dentro del simplex. Ejemplo, considere la función: Esto es, por supuesto, trivial para optimizar, pero digamos que hacemos esto con NM, y que nuestros dos puntos simplex sean yϵ x i i f ( x 1 ) f ( x N + 1 ) f ( x ) = x 2 x 1 = - 1 x 2 = 1F(Xnorte+1)-F(X1)<ϵϵXyoyoF(X1)F(Xnorte+1)

    F(X)=X2
    X1=-1X2=1. El algoritmo convergería aquí sin encontrar su óptimo.
  • La segunda opción implica evaluar el centroide del símplex: detener si . Esto supone que si el punto más bajo del simplex y el centroide tienen valores similares, el simplex es lo suficientemente pequeño como para llamar a la convergencia.El |F(X1)-F(XC)El |<ϵ

¿Es esta una forma adecuada de verificar la convergencia? ¿O hay una forma establecida de verificar esto? No pude encontrar ninguna fuente sobre esto, ya que la mayoría de los resultados de búsqueda se centran en la complejidad del algoritmo.

JAD
fuente
1. No me queda claro por qué estás comparando lo que sucede en con ; seguramente querrás compararlo con lo que sucede en . 2. las comprobaciones de convergencia son un área particularmente complicada en mucha optimización; necesita que la función no cambie mucho, pero si los argumentos cambian rápidamente (incluso si la función apenas cambia) es posible que no haya convergido, por lo que las personas a menudo usan criterios que analizan ambos. También está la cuestión de si se utiliza un pariente o un criterio absoluto (ni es suficiente - por ejemplo, un ensayo con relación cuando estás muy cerca de 0, no se disparará) x 1 x NXnorte+1X1Xnorte
Glen_b -Reinstate Mónica
3
El mejor criterio de detención para Nelder Mead es antes de comenzar.
Mark L. Stone
Solo para evitar confusión, la notación de wrt en el comentario de @ Glen_b ... Creo que los subíndices aquí se refieren a los vértices del símplex, no a la iteración del algoritmo. Para que el primer criterio de convergencia propuesto en esta pregunta, compare los valores de función más altos y más bajos de los vértices en el espacio de parámetros dimensionales ... no se establece explícitamente en la pregunta, sino la descripción del algoritmo en la página de Wikipedia vinculada ( y en papel original) ordene los vértices desde el valor de función más bajo hasta el más alto. N + 1nortenorte+1
Nate Pope el
@NatePope Esa fue mi intención, sí, agregaré una aclaración a la pregunta. \
JAD

Respuestas:

6

La explicación de este "algoritmo simplex de descenso" en las versiones originales de Numerical Recipes es particularmente lúcida y útil. Por lo tanto, citaré partes relevantes de la misma. Aquí está el fondo:

En la minimización unidimensional, fue posible poner entre corchetes un mínimo .... ¡Pobre de mí! No existe un procedimiento análogo en el espacio multidimensional. ... Lo mejor que podemos hacer es darle a nuestro algoritmo una suposición inicial; es decir, un vector de variables independientes como primer punto a intentar. Se supone que el algoritmo se abrirá camino cuesta abajo a través de la complejidad inimaginable de una topografía dimensional hasta que encuentre un mínimo (al menos local).Nnortenorte

El método de descenso simplex debe iniciarse no solo con un solo punto, sino con puntos, definiendo un simplex inicial. [Puede tomar estos puntos como un punto de partida inicial junto con] donde los son vectores de unidades y donde es una constante, lo cual es su conjetura de la escala de longitud característica del problema. ...P 0 P i = P 0 + λ e i e i N λnorte+1PAG0 0

(10.4.1)PAGyo=PAG0 0+λmiyo
miyonorteλ

La mayoría de los pasos simplemente [mueven] el punto del símplex donde la función es más grande ("punto más alto") a través de la cara opuesta del símplex a un punto más bajo. ...

Ahora para el problema en cuestión, terminando el algoritmo. Tenga en cuenta la generalidad de la cuenta: los autores proporcionan consejos intuitivos y útiles para terminar cualquier optimizador multidimensional y luego muestran específicamente cómo se aplica a este algoritmo en particular. El primer párrafo responde a la pregunta que tenemos ante nosotros:

Los criterios de terminación pueden ser delicados .... Por lo general, podemos identificar un "ciclo" o "paso" de nuestro algoritmo multidimensional. Entonces es posible terminar cuando la distancia del vector movida en ese paso es fraccionalmente menor en magnitud que alguna tolerancia TOL. Alternativamente, podríamos requerir que la disminución en el valor de la función en el paso de terminación sea fraccionalmente menor que alguna tolerancia FTOL. ...

Tenga en cuenta que cualquiera de los criterios anteriores puede ser engañado por un solo paso anómalo que, por una razón u otra, no pudo llegar a ninguna parte. Por lo tanto, con frecuencia es una buena idea reiniciar una rutina de minimización multidimensional en un punto donde afirma haber encontrado un mínimo. Para este reinicio, debe reinicializar cualquier cantidad de entrada auxiliar. En el método simplex de descenso, por ejemplo, debe reinicializar de los vértices del simplex nuevamente por la ecuación , con siendo uno de los vértices del mínimo reclamado.N + 1 ( 10.4.1 ) P 0nortenorte+1(10.4.1)PAG0 0

Los reinicios nunca deberían ser muy caros; después de todo, su algoritmo convergió al punto de reinicio una vez, y ahora ya está comenzando el algoritmo allí.

[Páginas 290-292.]

XyT>0 0

(1)El |XEl |-El |yEl |F(X,y)=2El |XEl |-El |yEl |El |XEl |+El |yEl |<T

f(X,y)=(El |XEl |+El |yEl |)/2

(1)

Referencia

William H. Press y col. , Recetas Numéricas: El Arte de la Computación Científica. Cambridge University Press (1986). Visite http://numerical.recipes/ para ver las últimas ediciones.

whuber
fuente
1
Gracias por la información sobre reiniciar. Pensé que esto solo estaba ejecutando el algoritmo desde diferentes puntos de partida, pero en realidad parece haber más que eso.
JAD
No había pensado antes en los posibles significados de "reiniciar". En el contexto actual, podría haber usado un término como "pulido" para el "reinicio", pero tal vez tampoco sea del todo correcto. El tipo de "reinicio" recomendado para el método simplex puede ser bastante especial para él.
whuber
9

No es una respuesta completa, pero es demasiado larga para un comentario y puede ponerlo en el camino correcto.

Este tema se trata brevemente en la página 171 de "Métodos numéricos compactos para computadoras", segunda edición, de John C. Nash. Y resulta ser la referencia citada para la rutina Nelder-Mead implementada en la optim()función de R. Citando la parte relevante:

tmist=[(yo=1norte+1[S(siyo)-S¯]2)/ /norte]1/ /2
S¯=yo=1norte+1S(siyo)/ /(norte+1).

S(.)sinorte+1nortesiHsiL

S(siL)S(siH)

Un vistazo rápido a la fuente de optim()indica que utiliza la diferencia entre los valores de función más altos y más bajos (de los puntos que definen el símplex) para determinar la convergencia: if (VH <= VL + convtol || VL <= abstol) break;¿Dónde VHestá el valor alto y VLel valor bajo? Esto viene con la advertencia de que eché un vistazo muy rápido a la fuente, y probablemente me falta algo.

Ahora, su opción (1) parece ser el segundo enfoque defendido por Nash. También habla sobre el problema que encontraste:

(norte+1)(norte-1)norte

Las referencias originales a las que Nash se refiere aquí son:

Nelder JA, Mead R. 1965. Un método simplex para la minimización de funciones. The Computer Journal 7: 308-313.

O'Neill R. 1971. Algoritmo AS 47: minimización de funciones utilizando un procedimiento simplex. Estadística Aplicada 20: 338-345.

Papa Nate
fuente
3

Fmin(t)mintodos los rincones F(Xyo,t)
# stop when you run out of patience, no improvement for say 10 iterations in a row:
if t > tbest + patience:
    message = "iter %d: f %g >= fbest %g" ...
    return message, fbest, xbest

norte+1

  1. El problema: terreno irregular, tal vez con escalas deficientes o restricciones tontas
  2. el algoritmo, equilibrando la exploración y el movimiento (y la complejidad del software)
  3. la regla de detención propiamente dicha

queda por ver - bienvenidos casos de prueba reales.

( StopiterAdemás, una clase real tiene muchas condiciones de parada patience; la más simple es la hora del reloj de pared).

Ver también:
NLopt : muchos algoritmos, incluido Nelder-Mead, fáciles de comparar. Consulte especialmente las notas sobre Comparación de algoritmos
cuesta abajo : la paciencia se detiene conmin_improvement

denis
fuente