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?
optimization
Victor May
fonte
fonte
Respostas:
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,…,xk surrogate 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.c∈Rd→R f∈Rd→R c f
Portanto, um processo típico de otimização seria o seguinte:
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.
fonte
Vejo
LM Rios e NV Sahinidis, otimização sem derivados: uma revisão de algoritmos e comparação de implementações de software
para uma comparação recente muito útil de solucionadores.
DOI: 10.1007 / s10898-012-9951-y
fonte
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).
fonte
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.
fonte
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 .
fonte