【问题标题】:Add inputs to GEKKO向 GEKKO 添加输入
【发布时间】:2020-07-12 22:06:55
【问题描述】:

我需要 GEKKO 方面的帮助

我希望通过代码中的输入来设置方程式 它不是一个 int 输入,因为它有一个“x”,而字符串因为它有数字而无法工作。

from gekko import GEKKO

m = GEKKO()
x = m.Var()

m.Obj(x**2)

m.Equation(3*x+5==4*x)

m.solve(disp=False)
print(x.value)

【问题讨论】:

标签: python gekko


【解决方案1】:

您可以将方程作为字符串输入(如seqn)。您可以使用eval() 函数将字符串转换为表达式。这会像在代码中一样评估表达式。

from gekko import GEKKO
seqn = '3*x+5==4*x' # input as string
m = GEKKO(remote=False)
x = m.Var()
m.Obj(x**2)
m.Equation(eval(seqn))
m.solve(disp=False)
print(x.value)

如果方程的形式始终相同,可以添加p=m.Param()等参数输入,然后设置p.value=6。当您需要多次求解相同的方程但输入不同时,这会在方程中插入不同的数字,例如 3*x+p==(p-1)*x

from gekko import GEKKO
m = GEKKO(remote=False)
x = m.Var()
p = m.Param(5)
m.Obj(x**2)
m.Equation(3*x+p==(p-1)*x)
m.solve(disp=False)
print('Solution with p=5: ' + str(x.value))

p.value=6
m.solve(disp=False)
print('Solution with p=6: ' + str(x.value))

您还可以将输入作为浮点数或整数添加为p=6,但这只能设置一次值,因为gekko 使用此常量写入模型文件。你可以通过m.open_folder()打开运行文件夹看到模型文件gk_model0.apm

Model
Variables
    v1 = 0
End Variables
Equations
    (((3)*(v1))+5)=((4)*(v1))
    minimize ((v1)^(2))
End Equations
End Model

每次有solve 命令时,此APMonitor 模型文件都会编译为字节码。高级用户可以使用m.Raw()向这个文件添加行,但除非对APMonitor的内部方法有很好的了解,否则我不建议这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-01
    • 2011-07-11
    • 2021-12-13
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    相关资源
    最近更新 更多