我正在开发一个程序,以检测金融算法中某些参数从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,有时更高。
该解决方案在大多数情况下都有效,但是在某些情况下,它会返回局部最小值而不是正确答案。
我正在寻找一个精确到最接近整数的结果,尽管更高的精确度是理想的。正确答案可以是任何正数。
有什么我应该做些不同的事情来解决这个问题吗?谢谢!