Estou trabalhando para melhorar o processo de otimização de alguns softwares de modelagem demográfica para que ele possa ajustar melhor os modelos demográficos aos dados. Gostaríamos de diminuir o tempo de otimização.
O tempo necessário para avaliar nossa função objetivo varia muito, dependendo dos valores de entrada. A relação entre o tempo para avaliar a função objetivo e a entrada é conhecida. Gostaria de saber se existem métodos de otimização que considerem o custo relativo do tempo da função objetivo ao escolher quais pontos avaliar.
Obrigado!
Atualizar:
Como Paulo solicitou, aqui estão algumas características importantes dessa função objetivo específica:
- O número de parâmetros é moderado (~ 12ish)
- Nosso problema é não convexo, ou pelo menos existem "estrias" estreitas e planas na superfície da função objetivo. No momento, estamos lidando com isso usando várias otimizações de diferentes pontos, mas gostaríamos de fazer melhor.
- A função objetivo é bastante suave, embora apenas possamos calcular aproximações de diferenças finitas para derivadas.
- O custo da avaliação também é uma função suave dos valores dos parâmetros e é bastante previsível. grosso modo, para cada parâmetro, o custo para avaliar é alto em uma extremidade da faixa e baixo na outra extremidade. Portanto, temos grandes regiões de conjuntos de parâmetros caros para avaliar, mas sabemos onde eles estão.
optimization
nova
fonte
fonte
Respostas:
Uma abordagem comum para lidar com funções objetivas caras é criar (por exemplo, modelagem de regressão) um "modelo de superfície de resposta" que se aproxime da função objetivo original e, em seguida, otimizar a superfície de resposta em vez de trabalhar com a função original. Na prática, as superfícies de resposta são tipicamente apenas modelos quadráticos ajustados por regressão, portanto, encontrar um mínimo da superfície de resposta se torna um problema de otimização muito fácil.
Você não disse nada sobre a suavidade ou convexidade de sua função objetiva. Se a função é não suave ou não convexa, isso obviamente se torna muito, muito mais difícil.
Você também não disse nada sobre onde estão os pontos caros no seu espaço de parâmetros. Se eles estiverem distribuídos aleatoriamente por todo o espaço de parâmetros, você poderá usar técnicas de design de experimentos para construir seu modelo de superfície de resposta e evitar os pontos caros. Se houver regiões maiores do espaço de parâmetros em que as avaliações são caras, tente minimizar o número de pontos nas áreas usadas na construção do modelo de superfície de resposta. Obviamente, se o seu ideal estiver localizado no meio dessa região, você estará fadado a avaliar funções na região cara.
fonte
Não conheço métodos que pesem especificamente os custos relativos da avaliação do objetivo em diferentes pontos do estudo, mas se você puder prever com relativa confiabilidade se um candidato será caro para avaliar ou não, sugeriria tentar uma método direto . Os métodos diretos se encaixam na família de métodos sem derivativos. Não é necessariamente uma coisa ruim usá-los, mesmo que você suspeite que o seu problema seja tranquilo, pois eles podem fornecer um certo nível de flexibilidade que os métodos para otimização suave não podem.
A idéia é que os métodos diretos definam uma malha (dependente da iteração) sobre a iteração atual e uma "etapa" da malha (dependente da iteração). Com base nesta etapa da malha, o método determina os pontos de teste na malha que são vizinhos da iteração atual (eles ficam na malha e estão a uma distância definida pela etapa da malha). Em seguida, procederá à avaliação do objetivo nos vizinhos. Assim que um candidato melhor é encontrado, ele se torna a nova iteração atual. À sua escolha, você também pode avaliar todos os vizinhos e escolher o melhor.
No seu caso, pode ser uma boa ideia ordenar os vizinhos com base em sua estimativa do custo de avaliar o objetivo lá. Avalie-os nesta ordem e escolha o primeiro sucesso como a próxima iteração. Intuitivamente, você está favorecendo candidatos baratos. Nos métodos diretos, esses pedidos se encaixam na categoria de modelos substitutos , um conceito que generaliza o de um modelo de superfície de resposta mencionado por Brian.
Aqui está uma excelente implementação de um método direto (em C ++): http://www.gerad.ca/nomad/Project/Home.html
Se isso parece estar dando resultados promissores, sinta-se à vontade para voltar para mim e talvez eu possa sugerir outras melhorias.
Acredito que o NOMAD também tenha recursos para otimização global (como a inicialização múltipla que você está aplicando atualmente) com base no conceito de pesquisa de bairro variável .
fonte