from pyomo.core.base.symbolic import differentiate
from pyomo.core.base.expr import identify_variables
# assuming model.objective is your Objective component
varList = list( identify_variables(model.objective.expr) )
firstDerivs = differentiate(model.objective.expr, wrt_list=varList)
# Note this calculates d^2/dx_i^2; if you want the full Hessian matrix
# ( \delta^2/{\delta x_i \delta x_j} ) replace "wrt=v" with "wrt_list=varList"
secondDerivs = [ differentiate(firstDerivs[i], wrt=v) for i,v in enumerate(varList) ]
1 回答
有两种方法可以在Pyomo中获取衍生信息 .
如果您需要单个点的数字导数,您可以使用"gjh_asl_json"工具(https://github.com/ghackebeil/gjh_asl_json)等工具,该工具可以获取Pyomo生成的NL文件,并生成带有雅可比和Hessian信息的JSON文件 .
如果你想要符号衍生物,Pyomo可以直接提供,只要你还安装了
sympy
:当然,鉴于你的表达式是二次的,符号和数字区分都会给你相同的答案 .