Antecedentes: Estoy escribiendo un software que se ejecuta en un cluster HPC de nivel medio, para realizar una optimización automática de parámetros.
Digamos que tengo una función f(x). Necesito encontrar x que minimice f(x). Para nuestros propósitos consideraremos que f(x) es una función desconocida, suave y cóncava de una variable. En la realidad podría no ser tan buena y probablemente tendré que escribir una implementación hiperdimensional, pero para la pregunta vamos a considerar una dimensión. Normalmente usaría el método de Newton o algo similar, pero aquí hay una trampa: No puedo evaluar realmente f(x). En su lugar, debo sondear f(x) mediante un proceso que devuelve un valor extraído de una distribución [que se supone normal]. Además, cada sondeo tiene un coste real y significativo, digamos una hora de CPU, así que necesito una implementación lo más eficiente posible. La única ventaja que tengo es que x está acotado -- a<x<b, para a y b suministrados.
Mi idea era interpolar linealmente entre los puntos: empezar muestreando en x=a y x=b, y x=(a+b)/2 (posiblemente más, en la práctica obtendré más de una muestra en paralelo). Luego, utilizando algún tipo de interpolación, "adivinaría" qué lado es mejor para mi siguiente prueba. Esta es la parte difícil: Me gustaría sondear la ubicación de las desviaciones estándar mínimas de la expectativa-3. (Es decir, probará las áreas con alta incertidumbre:llenando los vacíos--y las áreas de bajo valor: la búsqueda de la meta). Sin embargo, no tengo ni idea de cómo obtener una desviación estándar esperada de los puntos que se encuentran en diferentes valores de x, y haciendo cada sonda suficientes veces para obtener una desviación estándar utilizable en cada punto es demasiado caro. Estaba considerando hacer un ajuste local por mínimos cuadrados a una cuadrática sobre el punto de prueba y usar la desviación de eso o algo así, pero realmente no estoy seguro de si / cómo va a funcionar, o si repetidamente haciendo esto será demasiado caro. Puedo permitirme un tiempo bastante largo (cifra de segundos de tiempo de cálculo) decidiendo dónde sondear a continuación, pero no que largo.
¿Alguna idea sobre cómo predecir el valor y el error de un valor interpolado, o sobre una forma mejor de implementarlo?