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.c∈Rd→Rf∈Rd→Rcf
Portanto, um processo típico de otimização seria o seguinte:
- 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
- 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
- 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
- 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.