Parece haver dois tipos principais de função de teste para otimizadores sem derivação:
- one-liners como a função Rosenbrock ff., com pontos de partida
- conjuntos de pontos de dados reais, com um interpolador
É possível comparar, digamos, a 10d Rosenbrock com algum problema 10d real?
Pode-se comparar de várias maneiras: descrever a estrutura dos mínimos locais
ou executar os otimizadores ABC em Rosenbrock e alguns problemas reais;
mas ambos parecem difíceis.
(Talvez teóricos e experimentadores sejam apenas duas culturas bem diferentes, então estou pedindo uma quimera?)
Veja também:
- pergunta scicomp.SE: Onde podemos obter bons conjuntos de dados / problemas de teste para testar algoritmos / rotinas?
- Hooker, "Testando heurísticas: temos tudo errado", é contundente: "a ênfase na competição ... nos diz quais algoritmos são melhores, mas não o porquê".
(Adicionado em setembro de 2014):
O gráfico abaixo compara 3 algoritmos DFO em 14 funções de teste em 8d a partir de 10 pontos de início aleatórios: BOBYQA PRAXIS SBPLX de NLOpt 14 funções de teste N-dimensionais, Python sob o gist.github deste Matlab por A Hedar 10 pontos de início aleatórios uniformes na caixa delimitadora de cada função.
Em Ackley, por exemplo, a linha superior mostra que SBPLX é melhor e PRAXIS terrível; em Schwefel, o painel inferior direito mostra o SBPLX encontrando um mínimo no quinto ponto inicial aleatório.
No geral, BOBYQA é melhor em 1, PRAXIS em 5 e SBPLX (~ Nelder-Mead com reinicializações) em 7 de 13 funções de teste, com Powersum um lançamento. YMMV! Em particular, Johnson diz: "Eu aconselho você a não usar valor de função (ftol) ou tolerâncias de parâmetro (xtol) na otimização global".
Conclusão: não coloque todo o seu dinheiro em um cavalo ou em uma função de teste.
fonte
A vantagem de casos de teste sintéticos, como a função Rosenbrock, é que existe literatura existente para comparar e existe um senso na comunidade de como os métodos se comportam nesses casos. Se todos usassem seu próprio caso de teste, seria muito mais difícil chegar a um consenso sobre quais métodos funcionam e quais não.
fonte
(Espero que não haja nenhuma objeção em relação ao final desta discussão. Sou novo aqui, por favor, deixe-me saber se transgredi!)
As funções de teste para algoritmos evolutivos agora são muito mais complicadas do que eram há 2 ou 3 anos, como pode ser visto pelas suítes usadas em competições em conferências como o (muito recente) Congresso de 2015 em Computação Evolucionária. Vejo:
http://www.cec2015.org/
Esses conjuntos de testes agora incluem funções com várias interações não lineares entre variáveis. O número de variáveis pode ser tão grande quanto 1000, e eu acho que isso pode aumentar no futuro próximo.
Outra inovação muito recente é uma "Competição de otimização de caixa preta". Veja: http://bbcomp.ini.rub.de/
Um algoritmo pode consultar o valor f (x) para obter um ponto x, mas não obtém informações de gradiente e, em particular, não pode fazer nenhuma suposição sobre a forma analítica da função objetivo.
Em certo sentido, isso pode estar mais próximo do que você chamou de "problema real", mas em um ambiente organizado e objetivo.
fonte
Você pode ter o melhor dos dois mundos. O NIST tem um conjunto de problemas para minimizadores, como ajustar esse polinômio de 10º grau , com resultados esperados e incertezas. Evidentemente, provar que esses valores são a melhor solução real ou a existência e propriedades de outros mínimos locais é mais difícil do que em uma expressão matemática controlada.
fonte