尝试在Pyom中获取梯度和Hessian时出现问题

2024-10-04 01:27:48 发布

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

我得到了一个大规模的问题,我想知道目标函数的梯度和黑森函数以及一些约束条件。我看到了here如何获得符号导数。你知道吗

但是使用这个简单的代码:

> 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]

如何得到符号方程并计算它们?你知道吗


Tags: 函数fromcoreimportmckernelatpyomo
1条回答
网友
1楼 · 发布于 2024-10-04 01:27:48

firstDerivssecondDerivs是iterable,它们包含元素,这些元素是您的符号方程

您可以使用以下方法查看公式:

[print(item) for item in firstDerivs]
print(30*'-')
[print(item) for item in secondDerivs]

这将打印出每一个一阶导数在自己的行和二阶导数在相同的方式

相关问题 更多 >