Encontrar um mínimo global de uma função 2D suave, limitada, não convexa e dispendiosa para avaliar

17

Eu tenho uma função 2D não-convexa limitada que eu gostaria de encontrar o mínimo de. A função é bastante suave. Avaliando é caro. Um erro aceitável é de cerca de 3% do domínio da função em cada eixo.

Tentei executar a implementação do algoritmo DIRECT na biblioteca NLOPT, mas não proporcionou uma melhoria considerável em relação à pesquisa de força bruta em termos da quantidade de avaliações de funções necessárias para a precisão necessária e houve alguns discrepâncias.

Quais outros solucionadores de otimização global devo considerar?

Victor May
fonte
Você pode calcular gradientes ou precisá-los de aproximá-los por quocientes de diferença?
Arnold Neumaier
Preciso aproximá-los por quocientes de diferença.
213 May Victor
Nesse caso, o método de Newton não pode ser recomendado, pois as segundas derivadas numéricas são numericamente muito instáveis ​​e difíceis de ajustar para trabalhar com segurança.
Arnold Neumaier
@ Victor May, com o que você acabou? (. Se você pudesse postar uma função semelhante à sua, que realmente ajuda as pessoas a comparar e ajustar diferentes algoritmos)
denis
@ Denis, eu estava tentando obter mais velocidade de um algoritmo para rastrear um objeto em vídeo. A saída do algoritmo foi uma estimativa de probabilidade para cada local da imagem conter o objeto rastreado. A imagem que contém essas estimativas de probabilidade é a função que eu estava tentando otimizar. Acabei com força bruta em várias etapas de resolução. Para obter mais informações sobre o algoritmo de rastreamento em questão, leia o artigo "Rastreamento baseado em fragmentos robustos usando o histograma integral".
Victor May

Respostas:

12

Gostaria de sugerir uma abordagem um pouco diferente em comparação com as outras respostas, embora o @barron tenha discutido indiretamente a mesma coisa.

Em vez de otimizar sua função diretamente, ou seja, avaliando-a em uma série de pontos pontos que (esperamos) convergem para um (local) ideal, você pode usar o conceito de , que é muito adequado para problemas do tipo que você descreve (alto custo, suave, limitado, de baixa dimensão, ou seja, menos de 20 incógnitas).x1,x2,,xksurrogate modelling

Especificamente, a modelagem substituta funciona configurando uma função de modelo da sua verdadeira função . A chave é que, embora obviamente não represente perfeitamente , é muito mais barato avaliar.cRdRfRdRcf

Portanto, um processo típico de otimização seria o seguinte:

  1. Avalie em um conjunto de j pontos iniciais x 1 , x 2 , , x j . Observe que derivativos não são necessários. Observe também que esses pontos devem ser distribuídos uniformemente por todo o espaço de pesquisa, por exemplo, pela Latin Hypercube Sampling ou por um design similar de preenchimento de espaço.fjx1,x2,,xj
  2. Com base nesse conjunto de dados original, crie uma função de modelo . Você pode usar a validação cruzada para validar seu modelo (ou seja, usar apenas um subconjunto dos pontos j originais para criar c e, em seguida, usar o restante do conjunto de dados para verificar quão bem c prediz esses valores)cjcc
  3. Use um critério como o critério de melhoria esperada (EI) para descobrir onde '' preencher '' mais amostras para tornar mais preciso amostrando f . Na verdade, isso é muito melhor estudado teoricamente do que parece, e o critério EI é muito bem pesquisado. O critério EI também não é um critério ganancioso, portanto, você obtém uma boa melhoria geral da precisão do modelo, priorizando a precisão perto de possíveis ótimos.cf
  4. c

fcf

c

Obviamente, isso tudo é um trabalho de codificação, mas muitas outras pessoas fizeram implementações muito boas. No Matlab, eu sei apenas da caixa de ferramentas do software DACE que o DACE é gratuito. O TOMLAB também pode oferecer um pacote Matlab, mas custa dinheiro - no entanto, acredito que também funciona em C ++ e tem muito mais recursos do que o DACE já terá. (Observação: sou um dos desenvolvedores da nova versão do DACE, que será lançada em breve, e oferecerá suporte adicional ao EGO.)

Espero que esta visão geral o tenha ajudado, faça perguntas se houver pontos que possam ser esclarecidos ou coisas que eu perdi, ou se você quiser mais material sobre o assunto.

OscarB
fonte
Fwiw, google surrogate-model apresenta um Laboratório de Modelagem de Substitutos na Universidade de Ghent e um livro Engineering Design via Surrogate Modeling , 2008 228p 0470770791. Um problema com qualquer abordagem muito geral é que você logo terá uma pia de cozinha cheia de variantes de métodos, mais do que funções de teste reais .
Denis
3

Para uma função suave, o método de Otimização Global Eficiente deve ter um desempenho muito bom e ser muito mais eficiente que o DIRECT. As implementações estão disponíveis no TOMLAB (ainda não o usei) e no DAKOTA (com o qual tive algum sucesso).

Barron
fonte
1

Como a função é suave, o método de Newton será o método mais eficiente para encontrar o mínimo. Como a função não é convexa, você terá que aplicar os truques usuais para convergir o método de Newton (modificação de Levenberg-Marquardt, pesquisa de linha ou região de confiança para globalizar). Se você não pode obter derivadas de sua função, tente calculá-la através de diferenças finitas ou usar uma atualização BFGS. Se você suspeitar que o problema tem mais de um mínimo local, basta iniciar o método de Newton a partir de vários pontos escolhidos aleatoriamente ou não tão aleatoriamente e ver para onde eles convergem.

Wolfgang Bangerth
fonte
Meu problema realmente tem mínimos locais. Que métodos existem para escolher os pontos de partida?
213 May Victor
11
A menos que você saiba algo sobre o problema, a amostragem estatística é essencialmente sua única opção.
Wolfgang Bangerth 17/05
@ Wolfgang: Alguma idéia de como abordar a "amostragem estatística"? Apenas tente 10, 100, ... suposições iniciais aleatórias? Existem abordagens "mais rigorosas"? Eu pergunto, porque eu tenho mais ou menos um problema semelhante (ver scicomp.stackexchange.com/q/4708/1789 )
André
Tudo depende do que você sabe sobre a função. Se você conhece algo como uma "escala típica de comprimento" para sua função, isso indicaria a que distância os extremos locais seriam separados. Isso também lhe dará uma indicação de quantos pontos você pode ter para começar e a que distância eles devem ser escolhidos um do outro.
Wolfgang Bangerth
0

Como suas avaliações são caras, você precisa tirar vantagem da execução de avaliações da função sevaral em paralelo.

Eu recomendo que você dê uma olhada neste código . A matemática por trás é descrita aqui .

Paulo
fonte
11
este código e artigo foram escritos por você? Em caso afirmativo, você pode dizê-lo explicitamente em sua resposta? Além disso, agora, você pode melhorar a resposta, fornecendo uma descrição da sua sugestão.
nicoguaro