我已经定义了一个类,以最小化称为 rosen 的标准函数,以最小化 rosen , scipy.minimize函数需要反复调用 rosen 以将其最小化。
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()
产生
TypeError:“ numpy.float64”对象不可调用
这是我第一次学习Python OOP。我在这里做错了什么?我正在调用该函数,而不是仅在minimal()中发送数据。基本上是正确的。
答案 0 :(得分:3)
_getch
是一个可调用。这基本上意味着您需要传递可以由优化代码调用的函数或方法。但是,您通过了:
CTRL_C_EVENT
已被调用,您需要:
scipy.optimize.minimize()
此外,您的self.rosen(self.x)
方法不返回任何内容,应该看起来像这样:
self.rosen