在 Gekko 中减少我的方程式大小或在 APMonitor 中增加最大字符串长度
Posted
技术标签:
【中文标题】在 Gekko 中减少我的方程式大小或在 APMonitor 中增加最大字符串长度【英文标题】:Reducing my equation size in Gekko or increasing max string length in APMonitor 【发布时间】:2022-01-03 21:28:38 【问题描述】:我正在使用 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 内,因此无法拆分等式。是否可以增加最大字符串长度? This seems to be possible somehow,但是我不清楚该怎么做。运行时和计算资源在这里不会成为问题。
另一个想法是使用中间变量,但我不清楚这些是如何在内部处理的。这里的文档给我带来了麻烦。如果有人能用比文档更简单的语言向我解释这一点,甚至可以告诉我,这是否是一种明智的做法,那就太好了。
【问题讨论】:
【参考方案1】:在 Python Gekko 中,中间体是用 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 模型的可读性。
【讨论】:
以上是关于在 Gekko 中减少我的方程式大小或在 APMonitor 中增加最大字符串长度的主要内容,如果未能解决你的问题,请参考以下文章
如何以图形方式验证我的动态优化结果,与 gekko 中的初始条件进行比较