Tengo un no-convexa función 2-D acotada, que me gustaría encontrar el mínimo de. La función es bastante suave. Evaluar es costoso. Un error aceptable es de aproximadamente 3% del dominio de la función en cada eje.
He intentado ejecutar la implementación del algoritmo DIRECTO en la biblioteca NLOPT, pero no se dio una mejora considerable sobre búsqueda de fuerza bruta en términos de la cantidad de evaluaciones de funciones necesarias para la precisión requerida y había algunos valores atípicos.
¿Qué otros solucionadores de optimización global debería tener en cuenta?
optimization
Victor mayo
fuente
fuente
Respuestas:
Me gustaría sugerir un enfoque algo diferente en comparación con las otras respuestas, aunque @barron ha discutido indirectamente a la misma cosa.
En lugar de optimizar su función directamente, es decir, al evaluarla en una serie de puntos puntos que (con suerte) convergen a un óptimo (local), podría usar el concepto de modelado sustituto , que es muy adecuado para problemas del tipo que describe (alto costo, suave, acotado, de baja dimensión, es decir, menos de 20 incógnitas).X1, x2, ... , xk modelado sustituto
Específicamente, el modelado sustituto funciona mediante el establecimiento de una función de modelo de de su verdadera función f ∈ R d → R . La clave es que, si bien c, por supuesto, no representa perfectamente a f , es mucho más barato evaluarlo.c ∈ Rre→ R F∈ Rre→ R C F
Entonces, un proceso de optimización típico sería el siguiente:
En general, esto es lo que se entiende por EGO, Efficient Global Optimization, como sugirió @barron. Me gustaría enfatizar que para su aplicación, esto parece perfectamente adecuado: obtiene un modelo sorprendentemente preciso basado en relativamente pocas evaluaciones de , y luego puede usar el algoritmo de optimización que desee. Lo que a menudo también interesante es que ahora se puede evaluar C en una malla y la trama de ella, obteniendo con ello una idea de la apariencia general de f . Otro punto interesante es que la mayoría de las técnicas de modelado sustituto también proporcionan estimaciones estadísticas de error, lo que permite la estimación de la incertidumbre.F C F
Cómo construir es, por supuesto, una cuestión abierta, pero a menudo se utilizan los llamados modelos de mapeo espacial o Kriging.C
Por supuesto, todo esto es un poco de trabajo de codificación, pero mucha otra gente ha hecho muy buenas implementaciones. En Matlab, solo conozco la caja de herramientas del software DACE DACE es gratis. TOMLAB también podría ofrecer un paquete de Matlab, pero cuesta dinero; sin embargo, creo que también funciona en C ++ y tiene muchas más capacidades que las que tendrá DACE. (Nota: Soy uno de los desarrolladores de la nueva versión de DACE, que pronto se lanzará, que ofrecerá soporte adicional para EGO).
Espero que esta descripción general te haya ayudado, por favor haz preguntas si hay puntos que se pueden aclarar más o cosas que me he perdido, o si deseas más material sobre el tema.
fuente
Ver
LM Rios y NV Sahinidis, Optimización sin derivados: una revisión de algoritmos y comparación de implementaciones de software
para una comparación reciente muy útil de solucionadores.
DOI: 10.1007 / s10898-012-9951-y
fuente
Para una función suave, el método eficiente optimización global debe realizar bastante bien y sea dramáticamente más eficiente que DIRECTO. Las implementaciones están disponibles en TOMLAB (no lo he usado yo mismo) y DAKOTA (con el que he tenido éxito).
fuente
Como la función es fluida, el método de Newton será el método más abrumadoramente eficiente para encontrar un mínimo. Dado que la función no es convexa, deberá aplicar los trucos habituales para hacer que el método de Newton converja (modificación de Levenberg-Marquardt, búsqueda de línea o región de confianza para globalizar). Si no puede obtener derivados de su función, intente calcularla a través de diferencias finitas o usar una actualización BFGS. Si sospecha que el problema tiene más de un mínimo local, uno simplemente comenzaría el método de Newton a partir de un grupo de puntos elegidos al azar o no elegidos al azar y vería dónde convergen.
fuente
Debido a que sus evaluaciones son caros, lo que necesita para tomar ventaja de ejecutar evaluaciones de la función sevaral en paralelo.
Te recomendaría que eches un vistazo a este código . La matemática detrás se describe aquí .
fuente