Scipy最小化错误:“ numpy.float64”对象不可调用

时间:2019-01-26 16:33:09

标签: python python-3.x class methods scipy

我已经定义了一个类,以最小化称为 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()中发送数据。基本上是正确的。

1 个答案:

答案 0 :(得分:3)

first parameter用于:

_getch

是一个可调用。这基本上意味着您需要传递可以由优化代码调用的函数或方法。但是,您通过了:

CTRL_C_EVENT

已被调用,您需要:

scipy.optimize.minimize()

此外,您的self.rosen(self.x) 方法不返回任何内容,应该看起来像这样:

self.rosen