scipy.optimize.root возвращает локальный минимум - PullRequest
0 голосов
/ 24 декабря 2018

Я работаю над программой, чтобы определить точку, в которой определенный параметр изменяется с False на True в финансовом алгоритме.Я использую scipy.optimize.root (scipy v. 0.19.0).

Мой код выглядит примерно так:

from scipy.optimize import root

def target_func(guess, alg, min_res):
    if guess[0] < min_res:
        return [-float('inf')]
    alg.run(guess[0])
    targ_1 = alg.check_target()
    res = alg.target_func(guess[0])
    alg.run(guess[0] - 1)
    if not alg.check_target() and targ_1:
        return [0]
    return [res * (1 if targ_1 else -1)]

guess = alg.guess()
result = root(target_func, [guess if guess >= min_res else min_res + guess],
                      args=(alg, min_res), method='lm')

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

alg - это сам алгоритм, check_target возвращает искомый параметр, а alg.target_func возвращает число, абсолютное значение которого обычно равно(но не всегда) становится меньше, когда мы приближаемся к цели.min_res - это параметр для определения минимально приемлемого ответа - иногда он равен 1, а иногда и выше.

Это решение работает большую часть времени, но в некоторых ситуациях он возвращает локальный минимум вместо правильногоответ.

Я ищу результат с точностью до ближайшего целого числа, хотя большая точность была бы идеальной.Правильный ответ может быть любым положительным числом.

Что-то, что я должен сделать по-другому, чтобы решить эту проблему?Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...