Параллельная многомерная оптимизация

Я строю сценарий, который генерирует входные данные [параметры] для другой программы для расчета. Я хотел бы оптимизировать полученные данные. Ранее я использовал оптимизацию NumPy Powell. Код псевдо выглядит примерно так.

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

scipy.optimize.fmin_powell(value,param) 

Это прекрасно работает; однако, это невероятно медленно, поскольку каждая итерация программы может занять несколько дней. То, что я хотел бы сделать, это грубое зерно распараллелить это. Таким образом, вместо запуска одной итерации за раз она будет выполняться (количество параметров) * 2 за раз. Например:

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

Число переменных может варьироваться от 3 до 12, поэтому что-то подобное может ускорить выполнение кода с года до недели. Все переменные зависят друг от друга, и я только ищу локальные минимумы из первоначального предположения. Я начал реализацию, используя гессианские матрицы; однако, это довольно сложно. Есть ли что-нибудь, что либо делает это, есть более простой способ, или какие-либо предложения, чтобы начать?

Итак, основной вопрос заключается в следующем: существует ли алгоритм, который принимает начальное предположение, генерирует несколько догадок, затем использует эти множественные догадки для создания нового догадки и повторяется до тех пор, пока не будет найден порог. Доступны только аналитические производные. Какой хороший способ сделать это, есть ли что-то уже построенное, что делает это, есть ли другие варианты?

Спасибо за ваше время.

В качестве небольшого обновления у меня действительно есть эта работа, вычисляя простые параболы через три точки каждого измерения, а затем используя минимумы в качестве следующего предположения. Кажется, это работает прилично, но не оптимально. Я все еще ищу дополнительные варианты.

Наилучшая текущая реализация - распараллеливание внутреннего цикла Пауэлла.с метод.

Спасибо всем за ваши комментарии. К сожалению, похоже, что на эту конкретную проблему просто нет четкого ответа. Если я займусь реализацией чего-то, что делает это, я вставлю это сюда; однако, так как проект не особенно важен или необходимость получения результатов не заставит себя ждать, я, скорее всего, буду доволен тем, что он некоторое время будет занимать узел.

Ответы на вопрос(7)

Ваш ответ на вопрос