Any help with this error in Scipy minimize function?

  • Context: Python 
  • Thread starter Thread starter member 428835
  • Start date Start date
  • Tags Tags
    Error Function
Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
3 replies · 3K views
member 428835
Hi PF!

When I execute the code below:
Python:
import numpy as np
from scipy.stats import t
import scipy.optimize as optimizeglobal data
data = np.random.normal(loc=50, scale=1, size=(2400, 1)).flatten()

def L(F):
    M = 250
    lmda = 0.97
    sig_0 = F[0]
    for i in range(1, 12):
        sig_0 += F[i]

    number_of_days = len(data)

    sig = np.ones(number_of_days)

    for day in range(M, number_of_days):
        sig[day] = lmda * sig[day - 1] + (1 - lmda) * np.square(data[day - 1]) / F[day % 12] * sig_0

    data_days = np.delete(data, range(M - 1), 0)

    L_mat = np.log(t.pdf(data_days, df=3))
    L_sum = L_mat.sum(axis=0)

    mu = F[12]
    Reg = (F[11] - 2 * F[0] + F[1]) ** 2 + (F[10] - 2 * F[11] + F[0]) ** 2
    for i in range(1, 11):
        Reg += (F[i - 1] - 2 * F[i] + F[i + 1]) ** 2
    Reg *= -1 / sig_0 ** 2
    Reg *= -mu / sig_0 ** 2
    Reg += 12 / 2 * np.log(mu)

    print(F)

    final_L = -(L_sum + Reg)
    return final_L

bnds = [(None, None), (None, None), (None, None), (None, None), (None, None), (None, None), (None, None),
        (None, None), (None, None), (None, None), (None, None), (None, None), (2, 100)]
IC = 3*np.ones(13)
result = optimize.minimize(L, method='TNC', bounds=bnds, x0=IC)
print(result.F)

I get an error after many iterations that says:

Code:
Traceback (most recent call last):  File "/usr/local/lib/python3.9/site-packages/scipy/optimize/_optimize.py", line 124, in __getattr__    return self[name]KeyError: 'F'The above exception was the direct cause of the following exception:Traceback (most recent call last):  File "/Users/joshmccraney/Desktop/ewma/test_seas_ewma.py", line 45, in <module>    print(result.F)  File "/usr/local/lib/python3.9/site-packages/scipy/optimize/_optimize.py", line 126, in __getattr__    raise AttributeError(name) from eAttributeError: F
Do you know why this error is being thrown? I know the code below is messy, but this is the simplest I could make it to produce the error.
 
on Phys.org
pasmith said:
The OptimizeResult returned by scipy.optimize.minimize has no 'F' attribute. You want the value of its 'x' attribute.
Or just print(result) and then you will (i) see what attributes it does have, and (ii) gain other useful information about the optimization.
 
Reply
  • Like
Likes   Reactions: member 428835