我正在尝试使用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))发布于 2020-09-23 00:42:53
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]https://stackoverflow.com/questions/63996508
复制相似问题