Parece que hay dos tipos principales de función de prueba para optimizadores no derivados:
- frases simples como la función Rosenbrock ff., con puntos de inicio
- conjuntos de puntos de datos reales, con un interpolador
¿Es posible comparar digamos 10d Rosenbrock con algún problema real de 10d?
Se podría comparar de varias maneras: describir la estructura de los mínimos locales,
o ejecutar optimizadores ABC en Rosenbrock y algunos problemas reales;
pero ambos parecen difíciles.
(Tal vez los teóricos y los experimentadores son solo dos culturas bastante diferentes, ¿entonces estoy pidiendo una quimera?)
Ver también:
- Pregunta de scicomp.SE: ¿Dónde se pueden obtener buenos conjuntos de datos / problemas de prueba para probar algoritmos / rutinas?
- Hooker, "Probar heurística: lo tenemos todo mal" es mordaz: "el énfasis en la competencia ... nos dice qué algoritmos son mejores pero no por qué".
(Agregado en septiembre de 2014):
la siguiente gráfica compara 3 algoritmos DFO en 14 funciones de prueba en 8d desde 10 puntos de inicio aleatorios: BOBYQA PRAXIS SBPLX de NLOpt 14 funciones de prueba N-dimensionales, Python bajo gist.github de este Matlab por A Hedar 10 puntos de inicio aleatorios uniformes en el cuadro delimitador de cada función.
×
En Ackley, por ejemplo, la fila superior muestra que SBPLX es mejor y PRAXIS terrible; en Schwefel, el panel inferior derecho muestra que SBPLX encuentra un mínimo en el 5º punto de inicio aleatorio.
En general, BOBYQA es el mejor en 1, PRAXIS en 5 y SBPLX (~ Nelder-Mead con reinicios) en 7 de 13 funciones de prueba, con Powersum un cambio. YMMV! En particular, Johnson dice: "Le aconsejaría que no utilice valores de función (ftol) o tolerancias de parámetros (xtol) en la optimización global".
Conclusión: no ponga todo su dinero en un caballo o en una función de prueba.
fuente
La ventaja de los casos de prueba sintéticos como la función de Rosenbrock es que existe literatura existente para comparar, y existe un sentido en la comunidad sobre cómo se comportan los buenos métodos en tales casos de prueba. Si todos usaran su propio caso de prueba, sería mucho más difícil llegar a un consenso sobre qué métodos funcionan y cuáles no.
fuente
(Espero que no haya ninguna objeción a que agregue al final de esta discusión. Soy nuevo aquí, ¡así que avíseme si he transgredido!)
Las funciones de prueba para algoritmos evolutivos ahora son mucho más complicadas de lo que eran incluso hace 2 o 3 años, como pueden ver las suites utilizadas en competiciones en conferencias como el (muy reciente) Congreso de Computación Evolutiva de 2015. Ver:
http://www.cec2015.org/
Estas suites de prueba ahora incluyen funciones con varias interacciones no lineales entre variables. El número de variables puede ser tan grande como 1000, y supongo que podría aumentar en el futuro cercano.
Otra innovación muy reciente es una "Competencia de optimización de Black Box". Ver: http://bbcomp.ini.rub.de/
Un algoritmo puede consultar el valor f (x) para un punto x, pero no obtiene información de gradiente y, en particular, no puede hacer suposiciones sobre la forma analítica de la función objetivo.
En cierto sentido, esto podría estar más cerca de lo que usted llamó un "problema real", pero en un entorno organizado y objetivo.
fuente
Puedes tener lo mejor de los dos mundos. El NIST tiene una serie de problemas para los minimizadores, como ajustar este polinomio de décimo grado , con los resultados e incertidumbres esperados. Por supuesto, demostrar que estos valores son la mejor solución real, o la existencia y las propiedades de otros mínimos locales es más difícil que en una expresión matemática controlada.
fuente