[英]Problem trying to get the Gradient and Hessian in Pyomo
我遇到了一个大问题,我想知道目标函数的梯度和Hessian以及一些约束。 我在这里看到了如何获得符号导数。
但是使用以下简单代码:
> from pyomo.environ import *
> mc = ConcreteModel()
> mc.X1 = Var()
> mc.X2 = Var()
> mc.objectiv = Objective(expr = mc.X1**3 + mc.X2**2)
> from pyomo.core.base.symbolic import differentiate
> from > pyomo.core.base.expr import identify_variables
> varList = list( identify_variables(mc.objectiv.expr) )
> firstDerivs = differentiate(mc.objectiv.expr, wrt_list=varList)
> secondDerivs = [ differentiate(firstDerivs[i], wrt=v) for i,v in enumerate(varList) ]
pyomo给了我:
> firstDerivs
[<pyomo.core.kernel.expr_coopr3._ProductExpression at 0x2bf06eada20>, <pyomo.core.kernel.expr_coopr3._ProductExpression at 0x2bf06eada68>]
> secondDerivs
[<pyomo.core.kernel.expr_coopr3._ProductExpression at 0x2bf070b3af8>, 2.0]
如何获得符号方程并进行评估?
firstDerivs
和secondDerivs
是可迭代的,它们含有的元素,这是你的符号方程
您可以使用以下方式查看方程式:
[print(item) for item in firstDerivs]
print(30*'-')
[print(item) for item in secondDerivs]
这将以相同的方式在其自己的行上打印每个一阶导数和第二阶导数
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.