繁体   English   中英

向 GEKKO 添加输入

[英]Add inputs to GEKKO

我需要一些关于 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)

您可以将方程作为字符串输入(如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))

您还可以将输入添加为 float 或 int 作为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 的内部方法有很好的了解,否则我不建议这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM