如何使用Python和带有Ipopt的Pyomo获得Lagragian的Hessian和梯度来计算KKT矩阵

问题描述 投票:1回答:1
from pyomo.environ import *
from pyomo.opt import SolverFactory, ProblemFormat
m = ConcreteModel()
m.i = Set(initialize=[1, 2, 3])
init_vals = {1:25E+07, 2:0.0, 3:0.0}
#: Variables
m.x = Var(m.i, initialize=init_vals)
#: Objective
m.oF = Objective(expr=m.x[1]**2 +m.x[2]**2 + m.x[3]**2,
        sense=minimize)
ipopt = SolverFactory('ipopt')
ipopt.solve(m, tee=True)

我想使用Lagrangian的粗略和梯度计算NLP灵敏度来计算KKT矩阵。我如何从IPOPT求解器的结果中获得这些结果...我试图ipopt.hessian(),但它没有任何作用。请给我一些帮助。

python pyomo ipopt
1个回答
0
投票

[我认为可以通过sIPOPT和后缀(请参见sIPOPT文档)来做到这一点,但更简单的方法可能是使用Pyomo的一个有名包PyNumero。您可以找到构建KKT矩阵并提取灵敏度here的示例,并且可以找到PyNumero here]的安装说明。

© www.soinside.com 2019 - 2024. All rights reserved.