我有一个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存储库中实现了,所以希望很快会有一个解决方案。在
要使用索引变量,请使用Indexed。在
相关问题 更多 >
编程相关推荐