Я хочу использовать функцию scipy optimize.fmin, чтобы найти минимум функции, которая является функцией обеих переменных, над которыми я хочу минимизировать, и параметров, которые не изменяются (не оптимизируются).
Я могу сделать это при оптимизации по одной переменной здесь:
from scipy import optimize
c1=4
c2=-1
def f(x,c1,c2):
return x**2+c1+c2
guess_f=1
minimum = optimize.fmin(f,guess_f,args=(c1,c2),maxfun=400,maxiter=400,ftol=1e-2,xtol=1e-4)
Однако я не могу заставить это работать, когда я добавляю другую переменную, чтобы свести к минимуму:
def g(x,y,c1,c2):
return x*y+c1+c2
guess_g=[1,1]
minimum2= optimize.fmin(g,guess_g,args=(c1,c2),maxfun=400,maxiter=400,ftol=1e-2,xtol=1e-4)
Я получаю следующее сообщение об ошибке:
TypeError: g() missing 1 required positional argument: 'c2'
Я нашел Несколько переменных в SciPy's optimize.minimize , и здесь представлено решение, в котором необходимо оптимизировать переменные, по которымсгруппированы как их собственный массив.Я пытаюсь что-то вроде этого ниже:
def g(params,c1,c2):
x,y=params
# print(params)
return x*y+c1*x+c2
guess_g=[1,1]
minimum2= optimize.fmin(g,guess_g,args=(c1,c2),maxfun=4000,maxiter=4000,ftol=1e-2,xtol=1e-4)
Я не получаю TypeError, но я получаю «Предупреждение: превышено максимальное количество оценок функций».сообщение вместе с RuntimeWarning: переполнение обнаружилось в double_scalars после удаления cwd из sys.path.(кроме того, я попытался использовать команду optimize.minimize для того же, но не смог заставить ее работать при добавлении дополнительных аргументов, но я не публикую этот код здесь, так как вопрос уже становится длинным).
Так что, похоже, это неправильный способ сделать это.
Как мне оптимизировать функцию optimize.fmin для нескольких переменных, а также предоставить моей функции дополнительные аргументы?