簡體   English   中英

試圖在Pyomo中獲得漸變和粗麻布的問題

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

如何獲得符號方程並進行評估?

firstDerivssecondDerivs是可迭代的,它們含有的元素,這是你的符號方程

您可以使用以下方式查看方程式:

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

這將以相同的方式在其自己的行上打印每個一階導數和第二階導數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM