在Pyom中求目标的梯度和Hessian

2024-09-27 00:13:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Pyomo模型,我想得到目标的梯度和Hessian。一个相关的SO question提出了相同的问题。当我尝试那里提出的解决方案时

from pyomo.core.base.symbolic import differentiate
from pyomo.core.base.expr import identify_variables

varList = list(identify_variables(zipfe.loglikelihood.expr))
firstDerivs = differentiate(zipfe.loglikelihood.expr, wrt_list=varList)

我得到以下错误:

^{2}$

以下是我的目标(前几行):

zipfe.loglikelihood.pprint()
loglikelihood : Size=1, Index=None, Active=True
Key  : Active : Sense    : Expression
None :   True : minimize : log( 1 + exp( alpha1[0] + 2.0*alpha1[1] + alpha1[4] + 2.8986705607108596*( delta[0] + 2.0*delta[1] ) ) ) - ( 2.0*beta1[0] + beta1[3] + 2.8986705607108596*( gamma[0] + 2.0*gamma[1] ) ) + log( exp(  - log( 1 + exp( alpha1[0] + 2.0*alpha1[1] + alpha1[4] + 2.8986705607108596*( delta[0] + 2.0*delta[1] ) ) ) + 2.0*beta1[0] + beta1[3] + 2.8986705607108596*( gamma[0] + 2.0*gamma[1] ) ) + exp(  - log( 1 + exp( alpha1[0] + 5.0*alpha1[1] + 2.8986705607108596*( delta[0] + 2.0*delta[1] ) ) ) + 5.0*beta1[0] + 2.8986705607108596*( gamma[0] + 2.0*gamma[1] ) ) + exp(  - log( 1 + exp( alpha1[0] + 2.0*alpha1[1] + alpha1[7] + 2.8986705607108596*( delta[0] + 2.0*delta[1] ) ) ) + 2.0*beta1[0] + beta1[6] + 2.8986705607108596*( gamma[0] + 2.0*gamma[1] ) ) + exp(  - log( 1 + exp( alpha1[0] + alpha1[1] + alpha1[6] 

问题似乎是Sympy不喜欢索引变量,比如alpha1[0]。有解决这个问题的方法吗?在

编辑:

我使用的是pyomo5.2和python3.6。我很快将尝试添加一个最小的工作示例。在

在过去的几天里,这已经在Pyomo GitHub存储库中实现了,所以希望很快会有一个解决方案。在


Tags: fromcorelog目标base解决方案pyomodelta

热门问题