Проблема с попыткой получить градиент и гессиан в Pyomo

У меня есть крупномасштабная проблема, и я хочу знать градиент и гессиан целевой функции и некоторые ограничения. Я видел здесь как получить символьные производные.

Но используя этот простой код:

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

Пиомо дает мне:

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

Как я могу получить символьные уравнения и оценить их?


person Maria Marcos Nuñez    schedule 07.11.2018    source источник


Ответы (1)


firstDerivs и secondDerivs повторяемы, они содержат элементы, которые являются вашими символьными уравнениями

вы можете просмотреть уравнения, используя это:

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

это будет печатать каждую производную первого порядка в отдельной строке, а производную второго порядка - таким же образом.

person vencaslac    schedule 07.11.2018