当前位置: 首页 > 知识库问答 >
问题:

Python gekko找不到“options.json”文件

甘明朗
2023-03-14

我还没有看到与此相关的问题,尽管我做了几次相反的努力,但它还是出现了,所以我希望有人能帮我理解发生了什么。

我是Python的Gekko包的新手,我试图运行一个非线性求解器来解决正在发生的事情。我得到了一个奇怪的错误消息(FileNotFoundError:[Errno 2]没有这样的文件或目录:'/var/folders/03/vyh22j3j45j2rqjmnygfw2l80000gn/T/tmpatrk8y36gk_model0/options.json'),似乎是编程/语法而不是数学。这是一个更大的函数/数据/输入中的一个函数,所以我很难提供足够的信息来帮助您复制它-但是-

y(即self.get_days_energy(日期=日期)的结果)是能量值的向量,self.get_external_input_of_day(日期)也是能量值的向量。Z变量是潜在状态变量,A和B分别是潜在状态和外生变量的转移矩阵。此函数的目标是更新上述三个变量。

这里的功能:

def daily_weight_fit(self, date):

    """ 
    Update function to the weights of the dynamic system, this will be called 
    once a day after the data has arrived. 
    """

    m = GEKKO(remote = False)
    A = m.Array(
            m.Var, 
            (self.state_weights.shape), 
            value = 1, 
            lb = -10, 
            ub = 10, 
        )
    B = m.Array(
            m.Var, 
            (self.input_weights.shape), 
            value = 1, 
            lb = -100, 
            ub = 100, 
        )

    dates = pd.date_range(start=self.starting_date, end=date)
    date_list = dates.tolist()
    hours = list(range(24))

    y = [[self.get_days_energy(date = date)] for date in dates]
    flat_y = np.reshape(y, -1)
    timesteps = len(flat_y)

    u = [self.get_exogenous_inputs_of_day(date) for date in dates for hour in hours]

    z = m.Array(m.Var, (timesteps, 4), lb = -1, ub = 1)      
    C = np.array([0, 0, 1, 0])

    m.Obj(
        m.sqrt(
            m.sum([(flat_y[i] - z[i][3])**2 for i in range(len(flat_y))])
            )
        )

    for i in range(timesteps - 2):
        state_contribution = np.dot(A, z[i])
        ex_contribution = np.dot(B, u[i])
        for j in range(4):
            m.Equation(z[i + 1][j] == state_contribution[j] + ex_contribution[j])

    m.options.solver = 1
    m.solve()

    return A, B, z

以下是错误输出:

 ----------------------------------------------------------------
 APMonitor, Version 0.9.2
 APMonitor Optimization Suite
 ----------------------------------------------------------------


 --------- APM Model Size ------------
 Each time step contains
   Objects      :            1
   Constants    :            0
   Variables    :         1849
   Intermediates:            0
   Connections  :          361
   Equations    :         1793
   Residuals    :         1793

 Number of state variables:           1849
 Number of total equations: -         1793
 Number of slack variables: -            0
 ---------------------------------------
 Degrees of freedom       :             56

 ----------------------------------------------
 Steady State Optimization with APOPT Solver
 ----------------------------------------------

 Iter    Objective  Convergence
    0  4.12076E+08  8.12928E+01
    1  5.38520E+02  1.00000E+00
    2  5.38512E+02  3.75145E-12
    3  5.38450E+02  2.00000E+00
    4  5.38506E+02  1.80710E-01
 NEGATIVE NDF:           -1
    5  1.10270E+07  3.34638E-01
    6  4.89845E+06  1.93472E+00
    7  4.73333E+05  3.99952E+00
    8  3.76178E+05  2.00000E+00
    9  1.69753E+05  1.31302E+00

 Iter    Objective  Convergence
   10  1.90770E+07  5.86504E-01
   11  3.03623E+16  3.34638E-01
   12  9.38385E+11  3.34304E-01
   13  1.14353E+12  1.09011E-02
   14  8.91928E+12  7.65181E-03

Error: 
Program received signal SIGSEGV: Segmentation fault - invalid memory reference.

Backtrace for this error:
#0  0x108c7718d
#1  0x108c7661b
#2  0x7fff661ccf59
#3  0x108a92b6b
apm_mac(33870,0x7fff9e9c1380) malloc: *** error for object 0x7fb371862e00: incorrect checksum for freed object - object was probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug

Program received signal SIGABRT: Process abort signal.

Backtrace for this error:
#0  0x108c7718d
#1  0x108c7661b
#2  0x7fff661ccf59

Error: 'results.json' not found. Check above for additional error details
Traceback (most recent call last):

.... (my own irrelevant function trace)..... 

    m.solve()
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/gekko/gekko.py", line 2145, in solve
    self.load_JSON()
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/gekko/gk_post_solve.py", line 13, in load_JSON
    f = open(os.path.join(self._path,'options.json'))
FileNotFoundError: [Errno 2] No such file or directory: '/var/folders/03/vyh22j3j45j2rqjmnygfw2l80000gn/T/tmp42metzl9gk_model0/options.json'

任何提示或建议将不胜感激!约翰·何登仁,你好,我喜欢你的工作!!

共有1个答案

叶明辉
2023-03-14

您发现了APOPT解算器的一个新错误。迭代总结表明问题正在发散,因此一些变量可能会变得无穷大,超出机器精度。

  1. 第一个选项是尝试不同的解算器,例如带m.options.solver=2的BPOPT或带m.options.solver=3的IPOPT

每当求解器崩溃时,请考虑将运行目录的内容发送到m.path中,以便开发人员可以修复错误。

背景信息:options.jsonresults.json文件由底层C/Fortran可执行文件通过m=GEKKO(remote=False)本地编写,或通过web服务m=GEKKO(remote=True)编写。在所有情况下,可执行文件都会在本地运行目录m.path或远程服务器上以json文件的形式生成结果。当可执行文件由于错误而崩溃时,将不会生成json文件,从而导致您观察到的错误。您还可以看到解算器在迭代14处停止。使用remote=False,可执行文件从Gekko-bin目录(Linux为apm、MacOS为apm\u-mac、Windows为apm.exe)本地运行,但会在运行目录m.path中生成文件。

 类似资料:
  • 我试图解决一个MINLP问题,首先使用IPOPT解算器得到初始解,然后使用APOPT得到混合整数解。但是,调用APOPT解算器时出现以下错误: 错误:异常:访问违规在file./f90/cqp. f90 Traceback的第359行:不可用,使用-ftrace=frame或-ftrace=all编译错误:未找到results.json。检查上面的其他错误详细信息Traceback(最近的最后一次

  • 问题内容: 我最近一直在开发一个程序,该程序可以从Java程序编译并运行C ++程序,我已经使一切基本正常(或至少据我所知),但是后来我注意到有些东西被打印到错误流中: 如您所见,如果我通过SSH而不是Java代码进行操作,它会起作用吗? Java代码: 感谢您的任何帮助,它已得到批准! 问题答案: 告诉你问题所在。 您的一级引号过多,因此您正在寻找而不是。 该的Runtime.exec文档说:

  • 在spring Java框架中,我使用context.xml文件创建bean,然后用加载它。 我的程序抛出异常。 文件存在。我使用Gradle进行依赖关系管理,并且我的src文件夹(文件所在的位置)在intellij中标记为resource。我知道由于某种原因,即使我的src文件夹应该包含在classpath变量中,但gradle run任务只是不能从这里抓取它。 当我使用时,所有的工作都很好,但

  • PhpStorm 2021.1.1 Mac M1 11.3 当我尝试使用或查找文件时,PhpStorm未能找到该文件。似乎正在尝试从目录,而不是在项目目录中搜索。 我试图< code >文件|无效缓存,运气不好。有人能帮忙吗?

  • 问题内容: 我在当前工作目录上有文件,但是javac报告: 我正在研究ubuntu。 问题答案: 从上面的评论看来,您尝试过: 在您的Ubuntu系统上。该分离器是在UNIX系统上的Windows。 Ubuntu考虑了直到的命令,因此给出了消息。 应该编译好。