Я работаю над программой, чтобы определить точку, в которой определенный параметр изменяется с 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, а иногда и выше.
Это решение работает большую часть времени, но в некоторых ситуациях он возвращает локальный минимум вместо правильногоответ.
Я ищу результат с точностью до ближайшего целого числа, хотя большая точность была бы идеальной.Правильный ответ может быть любым положительным числом.
Что-то, что я должен сделать по-другому, чтобы решить эту проблему?Спасибо!