Critério de parada para Nelder Mead

11

Estou tentando implementar o algoritmo Nelder-Mead para otimizar uma função. A página da Wikipedia sobre Nelder-Mead é surpreendentemente clara sobre todo o algoritmo, exceto por seu critério de parada. Lá, infelizmente, diz:

Verifique a convergência [esclarecimentos necessários] .

Eu mesmo tentei e testei alguns critérios:

  • Pare se onde é pequeno e onde é o ésimo vértice do simplex, ordenado de baixo ( ) para alto ( ) valores da função. Em outras palavras, quando o valor máximo do simplex é quase igual ao valor mínimo. Descobri que isso não funcionava corretamente, pois isso não garante o que a função faz dentro do simplex. Exemplo, considere a função: Isso é trivial para otimizar, mas digamos que fazemos isso com NM e deixemos nossos dois pontos simplex serem e£ x i i f ( x 1 ), f ( x N + 1 ) f ( x ) = x 2 x 1 = - 1 x 2 = 1f(xN+1)f(x1)<ϵϵxiif(x1)f(xN+1)

    f(x)=x2
    x1=1x2=1. O algoritmo convergiria aqui sem encontrar o ideal.
  • A segunda opção envolve a avaliação do centróide do simplex: stop if . Isso pressupõe que, se o ponto mais baixo do simplex e o centróide tiverem valores semelhantes, o simplex é suficientemente pequeno para chamar convergência.|f(x1)f(xc)|<ϵ

Essa é uma maneira adequada de verificar a convergência? Ou existe uma maneira estabelecida de verificar isso? Não consegui encontrar nenhuma fonte sobre isso, pois a maioria dos hits da pesquisa se concentra na complexidade do algoritmo.

JAD
fonte
1. Não está claro para mim por que você está comparando o que acontece em com ; certamente você deseja compará-lo com o que acontece em . 2. as verificações de convergência são uma área particularmente complicada em muita otimização; você precisa que a função não esteja mudando muito, mas se os argumentos estiverem mudando rapidamente (mesmo que a função esteja apenas mudando), talvez você não tenha convergido, então as pessoas costumam usar critérios que consideram os dois. Há também a questão de se você usa um critério relativo ou absoluto (nenhum é suficiente - por exemplo, um teste relativo quando você está muito próximo de 0 não será acionado) x 1 x NxN+1x1xN
Glen_b -Reinstate Monica
3
O melhor critério de parada para o Nelder Mead é antes de você começar.
Mark L. Stone
Só para evitar confusão na notação escrita no comentário do @ Glen_b ... Eu acredito que os subscritos aqui se referem aos vértices do simplex, não à iteração do algoritmo. Para que o primeiro critério de convergência proposto nesta questão compare os valores mais baixos e mais altos de função dos vértices no espaço de parâmetros dimensionais ... não é explicitamente declarado na pergunta, mas a descrição do algoritmo na página da wikipedia vinculada ( e no papel original) ordene os vértices do valor mais baixo da função para o mais alto. N + 1NN+1
Nate Pope
@NatePope Essa era minha intenção, sim, acrescentarei esclarecimentos à questão. \
JAD

Respostas:

6

A descrição desse "algoritmo simplex em declive" nas versões originais das Receitas Numéricas é particularmente lúcida e útil. Por isso, citarei partes relevantes. Aqui está o plano de fundo:

Na minimização unidimensional, foi possível agrupar um mínimo .... Ai! Não há procedimento análogo no espaço multidimensional. ... O melhor que podemos fazer é dar ao nosso algoritmo um palpite inicial; isto é, um vetor de variáveis ​​independentes como o primeiro ponto a tentar. Supõe-se que o algoritmo faça seu próprio caminho ladeira abaixo através da complexidade inimaginável de uma topografia dimensional até encontrar um mínimo (pelo menos local).NNN

O método simplex em declive deve ser iniciado não apenas com um único ponto, mas com pontos , definindo um simplex inicial. [Você pode considerar esses pontos como um ponto inicial inicial junto com] que os são vetores de unidade e onde é uma constante que é seu palpite da escala de comprimento característica do problema. ...P 0 P i = P 0 + λ e i e i N λN+1P0

(10.4.1)Pi=P0+λei
eiNλ

A maioria das etapas apenas [move] o ponto do simplex onde a função é maior ("ponto mais alto") pela face oposta do simplex para um ponto mais baixo. ...

Agora, para o problema em questão, encerrando o algoritmo. Observe a generalidade da conta: os autores fornecem conselhos intuitivos e úteis para encerrar qualquer otimizador multidimensional e, em seguida, mostram especificamente como ele se aplica a esse algoritmo específico. O primeiro parágrafo responde à pergunta diante de nós:

Os critérios de rescisão podem ser delicados. Normalmente, podemos identificar um "ciclo" ou "etapa" do nosso algoritmo multidimensional. É então possível terminar quando a distância do vetor movida nesse passo é fracionariamente menor em magnitude do que alguma tolerância TOL. Como alternativa, poderíamos exigir que a diminuição no valor da função na etapa final fosse fracionariamente menor que alguma tolerância FTOL. ...

Observe bem que um dos critérios acima pode ser enganado por uma única etapa anômala que, por um motivo ou outro, não conseguiu chegar a lugar algum. Portanto, frequentemente é uma boa idéia reiniciar uma rotina de minimização multidimensional em um ponto em que afirma ter encontrado um mínimo. Para esta reinicialização, você deve reinicializar qualquer quantidade de entrada auxiliar. No método simplex em declive, por exemplo, você deve reinicializar dos vértices do simplex novamente pela equação , com sendo um dos vértices do mínimo reivindicado.N + 1 ( 10.4.1 ) P 0NN+1(10.4.1)P0

As reinicializações nunca devem ser muito caras; afinal, seu algoritmo converge para o ponto de reinicialização uma vez e agora você está iniciando o algoritmo já existente.

[Páginas 290-292.]

O código que acompanham este texto, em Numerical Recipes esclarece o significado de "fraccionadamente menor": a diferença entre os valores de e (tanto valores do argumento ou valores da função) é "fraccionadamente menor" do que um limiar quandoy T > 0xyT>0

(1)|x||y|f(x,y)=2|x||y||x|+|y|<T

com .f(x,y)=(|x|+|y|)/2

O lado esquerdo de às vezes é conhecido como "diferença absoluta relativa". Em alguns campos, é expresso como uma porcentagem, onde é chamado de "erro percentual relativo". Consulte o artigo da Wikipedia sobre Mudança e diferença relativa para obter mais opções e terminologia.(1)

Referência

William H. Press et al. , Receitas Numéricas: A Arte da Computação Científica. Cambridge University Press (1986). Visite http://numerical.recipes/ para obter as edições mais recentes.

whuber
fonte
11
Obrigado pela compreensão sobre como reiniciar. Eu pensei que isso estava apenas executando o algoritmo de diferentes pontos de partida, mas na verdade parece haver mais do que isso.
JAD
Eu não tinha pensado antes sobre os possíveis significados de "reiniciar". No contexto atual, eu poderia ter usado um termo como "polimento" para o "reinício", mas talvez isso também não esteja certo. O tipo de "reinício" preconizado pelo método simplex pode ser bastante especial para ele.
whuber
9

Não é uma resposta completa, mas é muito longa para um comentário e pode colocá-lo no caminho certo.

Este tópico é tratado brevemente na página 171 de "Métodos numéricos compactos para computadores" 2nd Ed., Por John C. Nash. E passa a ser a referência citada para a rotina Nelder-Mead implementada na optim()função de R. Citando a parte relevante:

A questão mais espinhosa sobre algoritmos de minimização deve, portanto, ser abordada: quando foi encontrado o mínimo? Nelder e Mead sugerem o 'erro padrão' dos valores da função: Onde

test=[(i=1n+1[S(bi)S¯]2)/n]1/2
S¯=i=1n+1S(bi)/(n+1).

Vou interromper para esclarecer que É a função que está sendo minimizada, são os pontos que definem o simplex dimensional; o ponto com o valor mais alto da função é e o ponto com o valor mais baixo da função é . Nash continua:S(.)bn+1nbHbL

O procedimento é considerado convergente quando o valor do teste cai abaixo de uma tolerância pré-atribuída. Nas aplicações estatísticas que interessaram Nelder e Mead, essa abordagem é razoável. No entanto, o autor descobriu que esse critério pode causar o término prematuro do procedimento em problemas com áreas bastante planas na superfície da função. Em um contexto estatístico, pode-se querer parar se tal região for encontrada, mas, presumindo-se o mínimo, parece lógico usar o teste mais simples de igualdade entre e , ou seja, um teste para a mesma altura de todos os pontos no simplex.S ( b H )S(bL)S(bH)

Uma rápida olhada na fonte optim()indica que ela usa a diferença entre os valores de função mais alto e mais baixo (dos pontos que definem o simplex) para determinar a convergência: if (VH <= VL + convtol || VL <= abstol) break;Onde VHestá o valor alto e VLo valor baixo. Isso vem com a ressalva de que dei uma olhada muito rápida na fonte e provavelmente estou perdendo alguma coisa.

Agora, sua opção (1) parece ser a segunda abordagem defendida por Nash. Ele também discute o problema que você encontrou:

Finalmente, ainda é possível convergir em um ponto que não é o mínimo. Se, por exemplo, os pontos do simplex estão todos em um plano (que é uma linha em duas dimensões), o simplex só pode se mover nas direções no espaço dimensional e pode não conseguir avançar para o mínimo. O'Neill (1971), em uma implementação FORTRAN das idéias de Nelder-Mead, testa o valor da função em ambos os lados do suposto mínimo ao longo de cada um dos eixos de parâmetros. Se qualquer valor da função for encontrado abaixo do mínimo suposto atual, o procedimento será reiniciado.( n - 1 ) n(n+1)(n1)n

As referências originais às quais Nash se refere aqui são:

Nelder JA, Mead R. 1965. Um método simplex para minimização de funções. The Computer Journal 7: 308-313.

O'Neill R. 1971. Algoritmo AS 47: Minimização de funções usando um procedimento simplex. Estatística Aplicada 20: 338-345.

Nate Pope
fonte
3

Um homem de palha: rastreie apenas o canto mais baixo com a regra de parada "paciência" :

fmin(t)minall corners f(Xi,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

O monitoramento de todos os cantos é definitivamente útil na verificação de escala de coordenadas razoável, restrições e NM simplex inicial. Se o rastreamento de todos os cantos pode melhorar a combinação den+1

  1. o problema: terreno acidentado, talvez com escala ruim ou restrições tolas
  2. o algoritmo, equilibrando a exploração e a movimentação (e a complexidade do software)
  3. a regra de parada adequada

continua a ser visto - casos de teste reais são bem-vindos.

(Uma Stopiterclasse real tem muitas condições de parada, além de patience; a mais simples é a hora do relógio de parede.)

Veja também:
NLopt : muitos algoritmos, incluindo Nelder-Mead, fáceis de comparar. Veja especialmente as notas sobre Comparando algoritmos
Downhill : parando a paciência commin_improvement

denis
fonte