我试图使用盖科在本地(使用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使用足够的内存。
然而,我使用的是一台32 GB的RAM机器,有将近25 GB的空闲空间,而该型号甚至不需要10 GB。
我试过使用m.options.MAX_MEMORY = 10
,但这似乎并不重要。
关于如何允许它分配更多内存的想法吗?
下面是一些触发此错误的(简化)代码:
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.*
参数都是我试图让求解器运行的东西,但似乎没有一个参数有助于解决内存分配问题)。
发布于 2022-03-22 09:29:23
Windows二进制文件是32位的,而Linux、MacOS和ARM Linux在使用Gekko remote=False
时是64位可执行文件。使用remote=True
,它运行在一个拥有64 GB内存并使用64位可执行文件的Linux服务器上。由于32位可执行文件,Windows二进制文件的内存限制问题高达4GB。64位可执行文件的容量为160亿GB (无限制).64位的Windows本地可执行文件是一个计划中的开发,并有一个未来的版本。Linux或APM Linux服务器 (例如主机IP 10.0.0.10
)是那些需要使用Windows客户端在本地网络上解决大型问题的人的选择。
m = GEKKO(remote=True, server='https://10.0.0.10')
https://stackoverflow.com/questions/71531080
复制