Optimización paralela de muchas dimensiones.

Estoy creando un script que genera datos de entrada [parámetros] para que otro programa los calcule. Me gustaría optimizar los datos resultantes. Anteriormente he estado usando la optimización numpy powell. El código psuedo se ve algo así.

def value(param):
     run_program(param)
     #Parse output
     return value

scipy.optimize.fmin_powell(value,param) 

Esto funciona muy bien; sin embargo, es increíblemente lento ya que cada iteración del programa puede tardar días en ejecutarse. Lo que me gustaría hacer es hacer un grano grueso en paralelo. Entonces, en lugar de ejecutar una única iteración a la vez, se ejecutaría (número de parámetros) * 2 a la vez. Por ejemplo:

Initial guess: param=[1,2,3,4,5]

#Modify guess by plus minus another matrix that is changeable at each iteration
jump=[1,1,1,1,1]
#Modify each variable plus/minus jump.
for num,a in enumerate(param):
    new_param1=param[:]
    new_param1[num]=new_param1[num]+jump[num]
    run_program(new_param1)
    new_param2=param[:]
    new_param2[num]=new_param2[num]-jump[num]
    run_program(new_param2)

#Wait until all programs are complete -> Parse Output
Output=[[value,param],...]
#Create new guess
#Repeat

El número de variables puede variar de 3 a 12, por lo que algo como esto podría acelerar el código de un año a una semana. Todas las variables dependen unas de otras y solo estoy buscando mínimos locales a partir de la estimación inicial. He comenzado una implementación utilizando matrices hessianas; Sin embargo, eso es bastante complicado. ¿Hay algo por ahí que haga esto, hay una forma más simple o alguna sugerencia para comenzar?

Por lo tanto, la pregunta principal es la siguiente: ¿existe un algoritmo que tome una conjetura inicial, genere múltiples conjeturas, luego use esas múltiples conjeturas para crear una nueva conjetura y repita hasta que se encuentre un umbral? Sólo los derivados analíticos están disponibles. ¿Cuál es una buena manera de hacer esto? ¿Ya hay algo construido que hace esto? ¿Hay otras opciones?

Gracias por tu tiempo.

Como una pequeña actualización, tengo este trabajo calculando parábolas simples a través de los tres puntos de cada dimensión y luego utilizando los mínimos como la próxima estimación. Esto parece funcionar decentemente, pero no es óptimo. Todavía estoy buscando opciones adicionales.

La mejor implementación actual es paralelizar el bucle interno del método de Powell.

Gracias a todos por sus comentarios. Desafortunadamente, parece que simplemente no hay una respuesta concisa a este problema en particular. Si logro implementar algo que haga esto, lo pegaré aquí; sin embargo, como el proyecto no es particularmente importante o la necesidad de resultados presionados, probablemente estaré contento al dejar que ocupe un nodo por un tiempo.