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, ... , xkmodelado 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→ RF∈ Rre→ RCF
Entonces, un proceso de optimización típico sería el siguiente:
- Evalúe en un conjunto de j puntos iniciales x 1 , x 2 , ... , x j . Tenga en cuenta que los derivados no son necesarios. También tenga en cuenta que estos puntos deben distribuirse de manera uniforme en todo el espacio de búsqueda, por ejemplo, mediante Latin Hypercube Sampling o un diseño similar que llene espacios.FjX1, x2, ... , xj
- En base a este conjunto de datos original, cree una función de modelo . Se podría utilizar la validación cruzada para validar su modelo (es decir, utilizar sólo un subconjunto de los originales j puntos para crear c y, a continuación, utilizar el resto del conjunto de datos para comprobar qué tan bien c predice esos valores)CjCC
- Utilice un criterio como el criterio de Mejora esperada (EI) para averiguar dónde "rellenar" más muestras para hacer que más preciso mediante el muestreo de f . En realidad, esto está mucho mejor estudiado teóricamente de lo que parece, y el criterio de la IE está muy bien investigado. El criterio EI tampoco es un criterio codicioso, por lo que ambos obtienen una buena mejora general de la precisión del modelo, al tiempo que priorizan la precisión cerca de los óptimos potenciales.CF
- Si el modelo no es suficientemente preciso, repita el paso 3, de lo contrario usar su rutina de optimización preferido para encontrar el óptimo de , que será muy barato para evaluar (lo que podría utilizar cualquier rutina que desea, otros aún que requiere derivados, o simplemente evaluar la función en una malla fina).C
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.FCF
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.