scipy.optimize.root返回本地最小值

时间:2018-12-24 13:34:51

标签: python scipy

我正在开发一个程序,以检测金融算法中某些参数从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,有时更高。

该解决方案在大多数情况下都有效,但是在某些情况下,它会返回局部最小值而不是正确答案。

我正在寻找一个精确到最接近整数的结果,尽管更高的精确度是理想的。正确答案可以是任何正数。

有什么我应该做些不同的事情来解决这个问题吗?谢谢!

0 个答案:

没有答案