Оптимизация (scipy.optimize) Оболочка L-BFGS-B рассматривает элементы массива как одну переменную - PullRequest
0 голосов
/ 03 марта 2020

Я не могу понять источник этой ошибки:

строка 327 в функции возврата функции_wrapper (* (wrapper_args + args)) TypeError: SSVOptionPriceObjFun c () отсутствует 1 обязательный позиционный аргумент: ' marketVolSurface '

Соответствующий код указан ниже:

x0 = [1.0, 0.0] # (lambda0, rho)
x0 = np.asarray(x0)
args = (spot, 0.01*r, daysInYear, mktPrices, volSurface)
# constraints: lambd0 >0, -1<= rho <=1
boundsHere = ((0, None), (-1, 1))
res = minimize(SSVOptionPriceObjFunc, x0, args, method='L-BFGS-B', jac=None, 
bounds=boundsHere,options={'xtol': 1e-8, 'disp': True})

Ниже приведена минимизируемая функция. Первые два аргумента являются свободными переменными, а остальные пять фиксируются как параметры.

def SSVOptionPriceObjFunc(lambda0, rho, spot, spotInterestRate, daysInYear, marketPrices, 
marketVolSurface):

Я хочу найти (lambd0, ​​rho), дающий минимум. Из отладчика кажется, что мое первоначальное предположение x0 интерпретируется как одна переменная, а не как вектор, что дает ошибку об отсутствующем позиционном аргументе. Я попытался передать x0 в виде списка, кортежа и ndarray; все терпят неудачу. Может кто-то заметить ошибку или предложить обходной путь? Заранее спасибо.

Обновление: я нашел решение: используйте функцию-обертку из пакета functools, чтобы установить параметры. импортировать functools как ft SSVOptionPriceObjFuncWrapper = ft.partial (SSVOptionPriceObjFun c, spot = spot, spotInterestRate = 0.01 * r, daysInYear = daysInYear, marketPrices = mktPrices, marketVolSurface = volSurface) 101Процентное сальдо по объему * 1013 args = Нет

Спасибо за ответы.

1 Ответ

0 голосов
/ 03 марта 2020

Серьезно относитесь к документированным minimize входам. Ваша задача - написать функцию, которая соответствует тому, что делает minimize, а не наоборот.

scipy.optimize.minimize(fun, x0, args=(), 
    fun: callable
    The objective function to be minimized.

    fun(x, *args) -> float

    where x is an 1-D array with shape (n,) and args is a tuple of the fixed 
    parameters needed to completely specify the function.
...