我在Unix和Linux中都使用OpenMDAO和普通的omdao记录器来解决问题,即在基于OpenMDAO的python脚本中,我这样做:

    from openmdao.api import SqliteRecorder
    recname = 'DLCS_5MW.sqlite'
    recorder = SqliteRecorder(recname)
    top.driver.add_recorder(recorder)


在Unix设置中运行问题后,我可以按预期访问数据库:

    >>> import sqlitedict
    >>> db = sqlitedict.SqliteDict('DLCS_5MW.sqlite','openmdao')
    >>> db.keys()
    ['metadata', 'rank0:Driver/1']


但是,当我在Linux安装程序中运行问题并以相同方式加载数据库时,却得到了以下信息:

    >>> db.keys()
    []


即无钥匙字典。我可以看到sqlite文件本身确实具有信息(例如价值1 GB);我似乎可以访问它。我可以验证问题是否出在文件本身上,而不是我在哪个操作系统上检查它(即,我可以在Linux设置上成功检查Unix生成的文件,但在我的Unix设置上成功检查Unix生成的文件) 。这使我相信OpenMDAO和sqlite之间存在一些脱节。

最初,我以为该问题与Linux计算机上的Python安装(包括sqlite,是吗?)和OpenMDAO安装有关,但是我都没有重新安装(使用Anaconda python)。我试图在OpenMDAO之外发现类似问题的发生(仅在sqlite环境中),但不幸的是,我不太精通sqlite,也无法找到任何有用的信息。任何想法将不胜感激!

最佳答案

得知您遇到问题很抱歉。

我们一直在改变案例记录的方式,因此这可能就是您遇到问题的原因,但我不知道为什么在Linux和Unix上会有不同的结果。

我们没有openmdao表了。现在,这些表是metadataiterationsderivs

为了查看案例记录是否存在问题,我在Ubuntu系统上安装了OpenMDAO 1.7.3,并在http://openmdao.readthedocs.io/en/1.7.3/usr-guide/tutorials/recording.html上运行了该示例。

要查看迭代数据是否在sqlite文件中,我做了以下操作:

import sqlitedict
db = sqlitedict.SqliteDict('paraboloid','iterations')
print db.keys()


结果是

['rank0:SLSQP|1', 'rank0:SLSQP|2', 'rank0:SLSQP|3', 'rank0:SLSQP|4', 'rank0:SLSQP|5', 'rank0:SLSQP|6']


有帮助吗?

谢谢

关于sqlite - 无法访问openmdao生成的sqlite数据库 key ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41070315/

10-09 00:41