Pyomo에서 두 가지 방법으로 파생 정보를 얻을 수 있습니다.
단일 지점에서 숫자 파생물을 사용해야하는 경우 Pyomo에서 생성 한 NL 파일을 사용할 수있는 "gjh_asl_json"도구 (https://github.com/ghackebeil/gjh_asl_json)와 같은 도구를 사용하여 Jacobian 및 Hessian 정보가있는 JSON 파일을 생성 할 수 있습니다.
당신이 상징적 인 파생 상품을 원하는 경우에, Pyomo 당신은 또한 sympy
가 설치되어 제공, 직접 사람들을 제공 할 수 있습니다 : 모두는 당신에게 같은 줄 것이다 당신의 표현이, 차 미분 기호 및 숫자입니다 주어진 물론
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) ]
, 대답.
감사합니다. –
불행히도 '잘못된 구문'오류로 실패합니다. 내 표현은 파서가 너무 복잡하거나 변수 이름에 문제가있다. 너무 우아한 해결책 인 것 같아서 너무 좋지 않다. –
'잘못된 구문'오류에 대해 좀 더 자세히 설명해 주시겠습니까? –