在 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 中的初始条件进行比较

如何使用gekko解决ini方程问题?

如何在 GEKKO 中级中使用 np.log 或 np.exp

GEKKO:数组大小作为模型变量

Gekko 不尊重变量的限制

我想在 GEKKO 数据的非线性回归中的给定点施加值和斜率约束,请帮助我