【问题标题】:Set negative value to zero in equation in Gekko?在 Gekko 的方程中将负值设置为零?
【发布时间】:2020-10-26 21:39:13
【问题描述】:

如何在方程中将变量的所有负值设置为零。我试过使用m.max2(0,W),所以当 W 为负时,我得到零,但当它为正时,我得到值,但由于 W 被定义为 W.dt()==s*p,所以值似乎是尾随我不能'将下限设置为零,因为我在其他地方需要负值。

【问题讨论】:

    标签: python optimization gekko


    【解决方案1】:

    max2 函数是一个具有互补约束 (MPCC) 的数学程序,有时在 W=0 时很难收敛,因为它是优化的鞍点。另一种选择是max3 函数,但这需要一个混合整数求解器,可能需要更多时间来计算一个解。第三种选择是使用诸如 w * (0.5*tanh(b*w)+0.5) 之类的函数来获得对 max 函数的连续可微近似。您可以将b 设置为更高的值,但这会使问题更难解决。

    另一种选择是依次解决b 值较高的问题,如内点法中的障碍函数。

    这是一个包含所有三个功能的示例脚本:

    import numpy as np
    from gekko import GEKKO
    m = GEKKO()
    w = m.Param(np.linspace(-10,10,101))
    x = m.Intermediate(w * 0.5*(m.tanh(10*w)+1))
    y = m.max2(w,0)
    z = m.max3(w,0)
    
    m.options.IMODE=2
    m.solve()
    
    import matplotlib.pyplot as plt
    plt.plot(w,x,'ko',label='x=0.5 w (tanh(10w)+1)')
    plt.plot(w,y,'b-',label='y=min2(w,0)')
    plt.plot(w,z,'r--',label='z=min3(w,0)')
    plt.legend()
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 2017-10-12
      • 2019-08-04
      • 2017-05-27
      • 2014-06-26
      • 2018-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多