У меня есть функция, которая на самом деле является вызовом другой программы (некоторый код Fortran). Когда я вызываю эту функцию (run_moog
), я могу анализировать 4 переменные, и она возвращает 6 значений. Все эти значения должны быть близки к 0 (чтобы минимизировать). Однако я объединил их так: np.sum(results**2)
. Теперь у меня есть скалярная функция. Я хотел бы минимизировать эту функцию, т.е. максимально приблизить np.sum(results**2)
к нулю.
Примечание: когда эта функция (run_moog
) принимает 4 входных параметра, она создает входной файл для Код Fortran, зависящий от этих параметров.
Я пробовал несколько способов оптимизировать это из scipy docs. Но ни один из них не работает должным образом. Минимизация должна иметь ограничения на 4 переменные. Вот попытка:
from scipy.optimize import minimize # Tried others as well from the docs
x0 = 4435, 3.54, 0.13, 2.4
bounds = [(4000, 6000), (3.00, 4.50), (-0.1, 0.1), (0.0, None)]
a = minimize(fun_mmog, x0, bounds=bounds, method='L-BFGS-B') # I've tried several different methods here
print a
Тогда это дает мне
status: 0
success: True
nfev: 5
fun: 2.3194639999999964
x: array([ 4.43500000e+03, 3.54000000e+00, 1.00000000e-01,
2.40000000e+00])
message: 'CONVERGENCE: NORM_OF_PROJECTED_GRADIENT_<=_PGTOL'
jac: array([ 0., 0., -54090399.99999981, 0.])
nit: 0
Третий параметр меняется незначительно, остальные точно такие же. Также было 5 вызовов функций (nfev
), но без итераций (nit
). Здесь показаны выходные данные scipy.
options={'epsilon': 1e-4}
сmethod='L-BFGS-B'
или какое-нибудь большее значение (по умолчанию1e-8
), пока в матрице Якоби не будет нулей. - person rth   schedule 24.04.2015BFGS
,L-BFGS-B
,SLSQP
). Итак, установивeps: 1e0
, он запускается, но в какой-то момент я выхожу за пределы установленных ограничений. Единственное, что добавлено из OP, - это, options={'eps': 1e+0})
в функцииminimize
. - person Daniel Thaagaard Andreasen   schedule 25.04.20151e4
, а остальные - порядок 1. Может лиepsilon
быть списком значений? - person Daniel Thaagaard Andreasen   schedule 25.04.2015