给定点处非线性 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: Internal Pyomo implementation error:
"sympy expression type 'exp' not found in the operator map for expression >exp(x1)"
Please report this to the Pyomo Developers.
所以,我的问题是:pyomo 通常可以区分指数函数/平方根等表达式吗?我的例子只是一个不幸的巧合,可以很容易地修复吗?我将处理 MINLPLIB 中的各种模型,一些用于区分出现的表达式的工具是至关重要的。
此错误在 Pyomo 5.2 中存在,并在 Pyomo 5.3 中得到解决。升级到 5.3 解决了这个问题,你的例子工作正常(添加 from pyomo.core.base.symbolic import differentiate
之后)。
我(反复)需要给定点的非线性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: Internal Pyomo implementation error: "sympy expression type 'exp' not found in the operator map for expression >exp(x1)" Please report this to the Pyomo Developers.
所以,我的问题是:pyomo 通常可以区分指数函数/平方根等表达式吗?我的例子只是一个不幸的巧合,可以很容易地修复吗?我将处理 MINLPLIB 中的各种模型,一些用于区分出现的表达式的工具是至关重要的。
此错误在 Pyomo 5.2 中存在,并在 Pyomo 5.3 中得到解决。升级到 5.3 解决了这个问题,你的例子工作正常(添加 from pyomo.core.base.symbolic import differentiate
之后)。