壁虎 "Memory allocation failed"

GEKKO "Memory allocation failed"

我正在尝试使用 GEKKO 在本地解决相当大的优化问题(使用 remote=False)。

当运行编译代码时,出现错误:

Error: At line 463 of file custom.f90
Traceback: not available, compile with -ftrace=frame or -ftrace=full
Operating system error: Not enough memory resources are available to process this command.

Memory allocation failed

所以这暗示操作系统不允许 GEKKO 使用足够的内存。

不过,我使用的是 32GB RAM 的机器,有将近 25GB 的可用空间,而模型可能甚至不需要 10GB。

我试过使用 m.options.MAX_MEMORY = 10,但这似乎并不重要。

Any thoughts on how to allow it to allocate more memory?

下面是触发此错误的一些(简化的)代码:

from gekko import GEKKO

quantiles = [(x+1)*.01 for x in range(300)]

#Initialize Model
m = GEKKO(remote=False)
#Set global options
m.options.IMODE = 3 #steady state optimization    
m.options.SOLVER=3
m.options.MAX_ITER=100000
m.options.MAX_MEMORY = 10
m.options.REDUCE=10

#initialize variables
Est_array = m.Array(m.Var,(2, 16),value=1,lb=0,ub=48)
P_ij_t = m.Array(m.Var,(4, 16, 300), lb=0, ub=1)   
Exp_ij_t = m.Array(m.Var,(4, 16, 300),value=1,lb=-36,ub=36)   
C_t = m.Array(m.Var,300,lb=0,ub=5) 

#Equations
for h in range(16): 
    for q in range(300):
        m.Equation(m.sum([P_ij_t[i,h,q] for i in range(3)]) == 1)

for (q,t) in enumerate(quantiles):
    m.Equation(C_t[q] == (  m.sum([P_ij_t[i+2,h,q]*(Est_array[i,h]-t)**2 for i in range(2) for h in range(16)]) + \
                            m.sum([P_ij_t[i,h,q]*(Est_array[1-i,15-h]-t)**2 for i in range(2) for h in range(16)]) 
    )  
    )
   
#Objective
m.Minimize(C_t[0])

#Solve simulation
#m.open_folder() 
m.solve()

#Results
print('C = ' + str(C_t[0].value[0]))

(所有 m.options.* 参数都是我试图让求解器达到 运行 的东西,但 none 似乎有助于解决内存分配问题。

Windows 二进制文件是 32 位,而 Linux、MacOS 和 ARM Linux 是 64 位可执行文件 remote=False with Gekko v1.0.2.使用 remote=True,它在具有 64 GB RAM 并使用 64 位可执行文件的 Linux 服务器上运行。由于 32 位可执行文件,运行 成为内存限制问题,Windows 二进制文件高达 4 GB RAM。 64 位可执行文件的容量为 160 亿 GB(无限制)。 64 位 Windows 本地可执行文件是未来版本的计划开发。 Linux VM 或 APM Linux server(例如主机 IP 10.0.0.10)是那些需要使用 Windows 本地 gekko 客户端在本地网络上解决大型问题的人的选择。

m = GEKKO(remote=True, server='https://10.0.0.10')