Ошибка минимизации Scipy: объект 'numpy.float64' не вызывается - PullRequest
0 голосов
/ 26 января 2019

Я определил класс для минимизации стандартной функции под названием 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. Что я здесь не так делаю? Я вызываю функцию вместо отправки только данных в minimal (). Что в принципе правильно.

1 Ответ

0 голосов
/ 26 января 2019

Первый параметр до:

scipy.optimize.minimize()

является вызываемым . Это означает, что вам нужно передать функцию или метод, которые могут быть вызваны кодом оптимизации. Вы однако прошли:

self.rosen(self.x)

, который уже был вызван, вместо этого вам нужно:

self.rosen

Кроме того, ваш метод minimize() ничего не возвращает и должен выглядеть примерно так:

def minimize(self):
    return minimize(self.rosen, self.x, method=self.method,
                    options={'xtol': self.xtol, 'disp': True})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...