首页 > 解决方案 > 如何实现一个 pytorch 求解器,可以非常快速地并行求解大量非线性方程(如 scipy.fsolve)?

问题描述

我正在研究 Python 的求解器,最好使用 pytorch 张量,它可以非常快速有效地求解一系列非线性方程。给定某个“ob”值,该求解器基本上需要求解以下公式中的变量“s”;即函数'f'返回的值应该为零

from scipy.optimize import fsolve
from scipy.stats import norm
import numpy as np

d = 0.01
r = 0.02
v_base = 0.19
v_skew1 = -0.0035
v_skew2 = -0.0021
t = 1

def v(s):
    return v_base + v_skew1 * (s-1) + v_skew2 * (s-1.1)
def f(s, ob):
    v_temp = v(s)
    k1 = np.log(1/s) + (r - d + 0.5 * v_temp**2)*t)/(v_temp * np.sqrt(t))
    k2 = k1 - v_temp * np.sqrt(t)
    result = np.exp(-d*t) * norm.cdf(k1) - strike * np.exp(-r * t) * norm.cdf(k2)
    return (result - ob)
ob = 0.015 # only one value of ob for now, but need to solve for thousands of ob values
answer = fsolve(f, 0.01, args = ob)

ob 将使用 pytorch 张量来计算性能,同时解决大量值,所以我希望解决 ob 的方法也使用张量。即使我将张量参数传递给 fsolve,当我尝试求解数千个“ob”值时,运行时间也会增加很多。有没有办法实现所有这些单独的 fsolves 的求解器功能,以使用张量并行运行。另外,有没有使用torch.optim实现求解器?

标签: pythonoptimizationparallel-processingpytorchscipy-optimize

解决方案


推荐阅读