繁体   English   中英

给定点的非线性pyomo约束的梯度

[英]Gradient of a nonlinear pyomo constraint at a given point

我(反复地)需要给定点的非线性pyomo约束con数值梯度信息(即,相应pyomo模型的变量都设置为特定值)。 我已经阅读了这篇文章,并决定(稍作修改)

from pyomo.core.base.symbolic import differentiate

var_list = list(model.component_objects(Var, active=True))
grad_num = [value(partial) for partial in differentiate(g_nu.body, wrt_list=vars)] 

应该达到我的目的。

但是,下面的示例已经失败,可能是由于出现了指数函数:

from pyomo.environ import *

model = ConcreteModel()
model.x_1 = Var()
model.x_2 = Var()
model.constr = Constraint(expr = 2*(model.x_1)**4+exp(model.x_2)<=3)
model.x_1.set_value(1)
model.x_2.set_value(1)
varList = list(model.component_objects(Var, active=True))
grad = [value(partial) for partial in differentiate(model.constr.body, wrt_list=varList)]

DeveloperError:内部Pyomo实现错误:“在表达式> exp(x1)的运算符图中找不到对称表达式类型'exp'”请将此问题报告给Pyomo开发人员。

所以,我的问题是:pyomo是否可以一般区分诸如指数函数/平方根之类的表达式,而我的示例只是不幸的巧合,可以很容易地解决吗? 我将处理来自MINLPLIB的各种模型,并且一些区分出现的表情的工具至关重要。

这个错误在Pyomo 5.2中存在,在Pyomo 5.3中已解决。 升级到5.3可解决此问题,并且您的示例可以正常工作( from pyomo.core.base.symbolic import differentiate添加from pyomo.core.base.symbolic import differentiate )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM