如何在 Python 中执行伴随灵敏度(最好通过 CVODE)

How to perform adjoint sensitivity in Python (preferably through CVODE)

我想在 python 中实施伴随灵敏度分析,以确定我的 objective 函数相对于某些参数的梯度。具体来说,objective 函数取决于微分方程的解,而微分方程又取决于我正在寻找最优值的所述参数。

要执行此操作,Julia 中有许多好的软件包(see here), as well as CVODES from SUNDIALS, however the latter which does apparently have a wrapper made for python, does not include sensitivity analysis capabilities according to this link. Furthermore, I have looked into SALib 用于敏感性分析,但据我所知,这是指其他类型的 'sensitivity analysis',因此是伴随甚至转发不包括敏感性分析(如果我在这方面有误,请纠正我)。

因此我的问题是,python 中是否存在具有敏感性分析功能的 CVODES 版本,或者是否有任何其他软件包可以用来执行伴随敏感性分析?

您可以使用 pyjulia 轻松地从 Python 调用 Julia 代码/包。 https://github.com/JuliaPy/pyjulia

您可以尝试 Assimulo,它是 SUNDIALS 套件的 Python 包装器。我已经使用它几年了,它的工作非常稳健。到目前为止,我已经使用 CVODE(少于 20 个状态,少于 10 个参数)对具有中等数量 states/parameters 的 ODE 系统进行了前向灵敏度分析。它在鲁棒性(可以处理刚性问题,还支持稀疏问题的各种线性求解器)和速度方面表现相当不错,还通过 IDA 支持 DAE。

我已经使用 conda 安装了 Assimulo,它处理所有依赖关系树(包括最新版本的 SUNDIALS)。最后,我不知道是否可以使用 Assimulo 进行伴随敏感性分析。如果你找到了什么,请告诉我们。