I have defined a Class to minimize a standard function called rosen, in order to minimize rosen, the scipy.minimize function needs to call rosen repeatedly to minimize it.
from scipy.optimize import minimize
import numpy as np
class LocalMultivariateOptimization:
def __init__(self, initial_guess_parameters, xtol, method):
self.xtol = xtol
self.method = method
self.x = initial_guess_parameters
def minimize(self):
res = minimize(self.rosen(self.x), self.x, method=self.method, options={'xtol': self.xtol, 'disp': True})
def rosen(self, x):
return sum(100.0 * (x[1:] - x[:-1] ** 2.0) ** 2.0 + (1 - x[:-1]) ** 2.0)
args0 = np.array([1.3, 0.7, 0.8, 1.9, 1.2])
xtol = 1e-8
method = 'nelder-mead'
LocalMultivariateOptimizationObject = LocalMultivariateOptimization(args0, xtol, method)
LocalMultivariateOptimizationObject.minimize()
results in
TypeError: 'numpy.float64' object is not callable
This is my first learning attempt at OOP in Python. What am I doing wrong here? I am calling the function instead of sending just the data in minimize(). Which is basically correct.
res = minimize(self.rosen(self.x),...you wantres = minimize(self.rosen,...