我正在使用gekko来优化一个包含数百个变量u_I和数百个方程的模型。有许多类型的方程
m.Minimze(m.cos(m.sum(a_i*u_i)))
其中a_i只是一些不依赖于gekko模型的浮点数。然而,这些类型的方程会产生错误:
APM模型错误:字符串>15000个字符考虑将直线分解为多个方程式
也可能是由于仅使用换行符CR而不是CR LF(用于Windows(或LF(用于MacOS/Linux(要解决此问题,请使用适当的换行符保存APM文件
由于整个和需要在cos内部,因此不可能拆分方程。有可能增加字符串的最大长度吗?这似乎是可能的,但我不清楚如何做到。运行时和计算资源在这里不是问题。
另一个想法是使用中间变量,但我不清楚这些变量是如何在内部处理的。这里的文档给我带来了麻烦。如果有人能用比文档更简单的语言向我解释这一点,甚至告诉我,如果这是一种明智的方法,那就太好了。
在PythonGekko中,中间体是用Intermediate函数定义的。
y = m.Intermediate(x)
中间体的一个例子是方程z=sqrt(x+y)
和w=(x+y)**2
,它们都共享一个共同的x+y
项。
i = m.Intermediate(x+y)
m.Equations([z==m.sqrt(i),
w==i**2])
要识别长方程式,请使用文本编辑器在运行文件夹m.path
中打开gk0_model.apm
文件,或使用m.open_folder()
打开文件夹。用name='x'
(如x = m.Var(value=1,name='x')
(命名变量有助于提高APMonitor模型的可读性。