APmonitor中的解决方案最大方程式长度



我正在使用GEKKO来找到一些未知函数u的二维傅立叶系数,这些函数根据二维向量g展开。为此,我有设置字典,我需要计算以下形式的许多项:

u{ u_fourier_i_j: [m.Var(),m.Var()] ....}
g{ g_i_j : [gx_i_j, gy_i_j].....}
m.Minimize(m.cos(sup.function()))

其中sup.function定义为:

dummy = 0
for i in fourier_x:
for j in fourier_y:
dummy += u_fourier_i_j * np.cos(np.dot(g_i_j,[x,y]))
return dummy

现在我想使用许多傅立叶系数,但Gekko给了我一个错误:

APM模型错误:字符串>15000个字符考虑将直线分解为多个方程式

也可能是由于仅使用换行符CR而不是CR LF(用于Windows(或LF(用于MacOS/Linux(要解决此问题,请使用适当的换行符保存APM文件

有没有办法增加APM模型中的最大字符串大小,或者通过不同的程序结构来避免这个错误?计算资源不应该成为问题。

使用m.sum()(gekko求和(来避免最大长度误差。它接受列表输入并创建一个求和,从而提高模型求解的速度。

dummy = []
for i in fourier_x:
for j in fourier_y:
dummy.append(u_fourier_i_j * np.cos(np.dot(g_i_j,[x,y])))
return m.sum(dummy)

如果仍然存在错误,请尝试使用类似的策略,将np.dot()函数np.dot(g_i_j,[x,y])替换为d:

n = len(g_i_j)
z = [x,y]
d = m.sum([g_i_j[i]*z[i] for i in range(n)])

请发布一个完整的脚本,以便验证修复程序。

相关内容

最新更新