Несколько переменных и аргументов в SciPy's optimize.fmin - PullRequest
0 голосов
/ 22 февраля 2019

Я хочу использовать функцию 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 для нескольких переменных, а также предоставить моей функции дополнительные аргументы?

...