【问题标题】:How to Free Variables Using Gekko如何使用 Gekko 释放变量
【发布时间】:2021-01-07 19:09:59
【问题描述】:

我正在尝试使用 GEKKO 做简单的代数。

给定公式 6 = X1 * X2,我首先使用 Gekko fix() 函数将 X1 设置为 2。求解并打印该方程后,我尝试使用 Gekko free() 函数释放 X1,并再次使用 fix() 函数将 X2 修复为 2。 free 函数似乎没有正确释放 X2 变量。

from gekko import GEKKO

m = GEKKO()

# Variables
x1 = m.Var()
x2 = m.Var()

# Equation
FindX1 = 6 == x1*x2
m.Equation(FindX1)

# Fix x1 to 2
m.fix(x1, val=2)

# Solve X2
m.solve(disp=False)
print("X1: %s and X2: %s" % (x1.VALUE, x2.VALUE))

# Fix x2 to 2
m.fix(x2, val=2)

# Free x1
m.free(x1)

# Solve X1
m.solve(disp=False)
print("X1: %s and X2: %s" % (x1.VALUE, x2.VALUE))

【问题讨论】:

    标签: python-3.x algebra gekko


    【解决方案1】:

    restart file 遵守规范。对于IMODE=3,它是运行目录m.path 中的rto.t0。您可以使用以下命令删除该重启文件:

    import os
    os.remove(m.path+'\\rto.t0')
    

    有一个选项m.options.SPECS=0 也应该可以忽略重启文件中的固定/免费规范,但这不会与求解引擎通信。我创建了一个new GitHub issue to address this bug

    import os
    from gekko import GEKKO
    
    m = GEKKO(remote=False)
    
    # Variables
    x1 = m.Var()
    x2 = m.Var()
    
    # Equation
    FindX1 = 6 == x1*x2
    m.Equation(FindX1)
    
    # Fix x1 to 2
    m.fix(x1, val=2)
    
    # Solve X2
    m.solve(disp=False)
    print("X1: %s and X2: %s" % (x1.VALUE, x2.VALUE))
    
    # Fix x2 to 2
    m.fix(x2, val=2)
    
    # Free x1
    m.free(x1)
    
    os.remove(m.path+'\\rto.t0')
    #m.options.SPECS = 0
    
    # Solve X1
    m.solve(disp=False)
    print("X1: %s and X2: %s" % (x1.VALUE, x2.VALUE))
    
    m.open_folder()
    

    这会产生正确的响应:

    X1: [2.0] and X2: [3.0]
    X1: [3.0] and X2: [2.0]
    

    【讨论】:

      猜你喜欢
      • 2015-07-07
      • 2022-01-19
      • 1970-01-01
      • 1970-01-01
      • 2010-10-13
      • 2011-12-18
      • 1970-01-01
      • 2022-01-06
      • 2011-07-30
      相关资源
      最近更新 更多