我需要一些关于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)发布于 2020-04-01 21:37:04
您可以将方程式作为字符串输入(如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()打开run文件夹来查看模型文件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的内部方法有很好的理解,否则我不建议这样做。
https://stackoverflow.com/questions/60966119
复制相似问题