首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Gekko释放变量

如何使用Gekko释放变量
EN

Stack Overflow用户
提问于 2020-09-22 00:37:00
回答 1查看 101关注 0票数 3

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

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

代码语言:javascript
复制
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))
EN

回答 1

Stack Overflow用户

发布于 2020-09-23 00:42:53

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

代码语言:javascript
复制
import os
os.remove(m.path+'\\rto.t0')

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

代码语言:javascript
复制
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()

这会产生正确的响应:

代码语言:javascript
复制
X1: [2.0] and X2: [3.0]
X1: [3.0] and X2: [2.0]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63996508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档