如何得到GEKKO中约束的对偶值

  • 本文关键字:约束 何得 GEKKO gekko
  • 更新时间 :
  • 英文 :


我搜索了整个互联网,还没有找到任何解决方案。

我的问题是一个凸非线性程序。对于大多数凸解算器,它是命令

约束。双重

以获得对偶值。我可以在Gekko中获得双重价值吗?

对偶值也称为拉格朗日乘子。使用局部求解m=GEKKO(remote=False)设置m.options.DIAGLEVEL=2以访问对偶变量。

lam = np.loadtxt(m.path + '/apm_lam.txt')

这是一个测试脚本。

from gekko import GEKKO    
import numpy as np
m = GEKKO(remote=False)
#initialize variables
xi = [1,5,5,1]
x1,x2,x3,x4 = [m.Var(xi[i],lb=1,ub=5) for i in range(4)]
m.Equation(x1*x2*x3*x4>=25)
m.Equation(x1**2+x2**2+x3**2+x4**2==40)
m.Obj(x1*x4*(x1+x2+x3)+x3)
m.options.DIAGLEVEL=2
m.solve(disp=False)
print('')
print('Results')
print('x1: ' + str(x1.value))
print('x2: ' + str(x2.value))
print('x3: ' + str(x3.value))
print('x4: ' + str(x4.value))
print('Lagrange multipliers')
lam = np.loadtxt(m.path + '/apm_lam.txt')
print(lam)

这产生了以下结果:

Results
x1: [1.000000057]
x2: [4.74299963]
x3: [3.8211500283]
x4: [1.3794081795]
Lagrange multipliers
[-0.55227642  0.16143862]

Gekko中也有一个类似的问题——拉格朗日乘子(marginals(,还有其他评论。一个重要的观察结果是,一些求解器返回拉格朗日乘子,而另一些则不报告它们。例如,解算器m.options.SOLVER=2(BPOPT(和m.options.SOLVER=3(IPOPT(返回对偶变量,而其他m.options.SOLVER=1(APOPT(当前不返回它们。

相关内容

  • 没有找到相关文章

最新更新