【问题标题】:Lagrange multipliers (marginals) in GekkoGekko 中的拉格朗日乘数(边际)
【发布时间】:2020-05-27 10:22:19
【问题描述】:

Gekko 中是否有单行来检索拉格朗日乘数(类似于 GAMS 中的边际),或者如果没有单行,则另一种方式?

感谢您的帮助。

【问题讨论】:

    标签: gekko


    【解决方案1】:

    这是检索拉格朗日乘数的一行代码。

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

    您需要将诊断级别设置为m.options.DIAGLEVEL=2 并使用m=GEKKO(remote=False) 在本地解决。当您使用m.open_folder() 打开文件夹时,您可以看到使用DIAGLEVEL=2 生成的其他一些文件。这是一个测试脚本。

    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]
    

    【讨论】:

    • 拉格朗日乘数依赖于 python 版本?我得到的 x 值基本相同(差异可以忽略不计),但拉格朗日乘数都为零。我在 Ubuntu 14.04 中运行 python 2.7.16。我得到: 结果 x1:[1.0] x2:[4.742999637] x3:[3.8211499845] x4:[1.3794082931] 拉格朗日乘数 [0. 0.]
    • 尝试使用带有m.options.SOLVER=3 的IPOPT 或带有m.options.SOLVER=2 的BPOPT。一些求解器未配置为返回拉格朗日乘数。
    • 谢谢。我在您的测试脚本中添加了m.options.SOLVER=2,它返回了乘数,但没有IPOPT。在 GEKKO 的文档中,我可以在哪里阅读有关此主题(拉格朗日乘数)的信息。到目前为止,我正在研究线性优化问题,优化结果符合预期,但是对于两个求解器,乘数仍然为零。所以它一定是我的实现中的东西。
    • 这里是关于 KKT 条件讨论中的拉格朗日乘数的更多信息:apmonitor.com/me575/index.php/Main/KuhnTucker 零拉格朗日乘数表示方程不等式不受约束,尽管您可能已经知道这一点。 Gekko 中没有关于求解器如何生成拉格朗日乘数的文档。也许在求解器文档中有更多关于拉格朗日乘数的信息。如果应该报告 IPOPT 拉格朗日乘数,我建议您在 Gekko 的 GitHub 存储库上创建一个新的错误或功能请求。
    猜你喜欢
    • 2020-07-31
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 2016-06-11
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    相关资源
    最近更新 更多