Gekko 求解器错误“未找到'results.json'”,并且无法查明原因

问题描述 投票:0回答:1

我在使用 Gekko 执行约束回归时收到以下错误消息:

>  ----------------------------------------------------------------
 APMonitor, Version 1.0.1
 APMonitor Optimization Suite
 ----------------------------------------------------------------
 
 
 --------- APM Model Size ------------
 Each time step contains
   Objects      :            2
   Constants    :            0
   Variables    :          119
   Intermediates:            0
   Connections  :           58
   Equations    :           59
   Residuals    :           59
 
 Number of state variables:        3535109
 Number of total equations: -      3535080
 Number of slack variables: -            0
 ---------------------------------------
 Degrees of freedom       :             29
 
 ----------------------------------------------
 Model Parameter Estimation with APOPT Solver
 ----------------------------------------------

Error: forrtl: severe (174): SIGSEGV, segmentation fault occurred

Stack trace terminated abnormally.

Error: 'results.json' not found. Check above for additional error details

为了找到原因,我查看了 gekko 路径并发现了以下文件:

     APOPT.out
     dbs_read.rpt
     gk_model0.apm
     gk_model0.csv
     gk_model0.info
     measurements.dbs

所以我无法理解导致问题的原因,因为没有生成不可行文件。 以下是我正在使用的代码:

def gk_enet(y, x, min_l2, indep_vars, sign_dict, l1_penalty=True):

# setting the Gekko solver
m = gk.GEKKO(remote=False)
m.options.MAX_ITER = 100000
m.options.IMODE = 2  # Regression mode
opt_path = m.path
print(m.path)
model_iter = opt_path.rsplit("_", 1)[1]


# assigning gekko solver to minimize SSE instead of default l1-norm minimizer
if l1_penalty != True:
    m.options.EV_TYPE = 2

# setting up the model & parameters

# number of variables
n = x.shape[1]

# assigning array of parameters: c stands for coefficients
# assigning sign-restrictions based on sign_dict
c = m.Array(m.FV, n)
for i, ci in enumerate(c):
    ci.STATUS = 1
    if sign_dict[indep_vars[i]] > 0:
        ci.LOWER = 0
    elif sign_dict[indep_vars[i]] < 0:
        ci.UPPER = 0

# parameter for l2-regularization
R = m.FV() 
R.STATUS = 1
R.LOWER = min_l2

# array of gekko variable to predict the coefficients' effects
x_pred = [None]*n  

# load data
xd = m.Array(m.Param, n)
#xd_intcpt = m.Array(m.Param, 1)
yd = m.Param(value=y)

for i in range(n):
    xd[i].value = x[:, i]
    x_pred[i] = m.Var()  # y = sum(c[i]*x[i])
    m.Equation(x_pred[i] == c[i]*xd[i])

y_pred = m.Var()
m.Equation(y_pred == m.sum([x_pred[i] for i in range(n)]))

l2_penalty = m.Var()
m.Equation(l2_penalty == R*m.sum([c[i]**2 for i in range(n)]))

# Minimize difference between actual and predicted y + l2-regularization factor
m.Minimize((yd-y_pred)**2 + l2_penalty)

# APOPT solver
m.options.SOLVER = 1
# Solve
try:
    m.solve(disp=True)

    a = [np.round(i.value[0], 4) for i in c]
except:
    a = [0 for i in c]
    
return a, min_l2

解决此问题的任何建议都会非常有帮助。另外,如果需要任何进一步的信息才能获得解决方案,请告诉我。

编辑:感谢约翰的建议。我减少了数据并使用第一个 BPOPT 重新运行代码,然后使用 IPOPT 求解器。运行 BPOPT 求解器时出现以下错误:

MATRIX IS SINGULAR. RANK=    0
Problem with linear solver, INFO:            3
Error in initialization of lagrange multipliers
Setting lam(1:m) = 0

运行 IPOPT 时,收到以下消息:

solver            3  not supported
 using default solver: APOPT

但这一次 APPT 求解器相当快地提供了解决方案。我还没有检查结果。 但查看 BPOPT 错误消息,我认为问题在于数据,即使对于之前未修剪数据的情况也是如此。 Gekko 中是否有任何调试选项可供我尝试找出答案?

python optimization gekko
1个回答
0
投票

求解器因分段错误而崩溃,因为它无法访问所需的内存。优化问题的规模:

 Number of state variables:        3535109
 Number of total equations: -      3535080
 Number of slack variables: -            0
 ---------------------------------------
 Degrees of freedom       :             29

表明它可能接近

APOPT
求解器可以成功处理的上限。尝试切换到另一个求解器,例如
IPOPT
BPOPT
:

m.options.SOLVER = 'IPOPT'

没有迹象表明需要混合整数解决方案,因此从使用 APOPT 的混合整数非线性规划 (MINLP) 求解器切换到使用 IPOPT 的非线性规划 (NLP) 求解器可能会有所帮助。如果问题是二次约束二次规划 (QCQP),则有专门的求解器可能比 NLP 求解器工作得更好。

如果您可以提交带有随机生成数据的完整问题,APOPT 求解器的开发人员可以使用它来查找错误。您可以将问题作为新问题提交到 Gekko GitHubAPOPT GitHub 存储库。

© www.soinside.com 2019 - 2024. All rights reserved.