您可以将方程作为字符串输入(如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的内部方法有很好的了解,否则我不建议这样做。