我正在使用OpenMDAO和普通的omdao记录器解决Unix和Linux中的问题,即在我的基于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设置上检查Linux生成的文件) 。这让我相信OpenMDAO和sqlite之间存在一些脱节。
最初我认为问题与我的Linux机器上的Python安装(包括sqlite,是吗?)和OpenMDAO安装有关,但我重新安装两者都无济于事(使用Anaconda python)。我试图在OpenMDAO之外发现类似问题 - 只是在一个sqlite上下文中 - 但遗憾的是我不太精通sqlite并且没有能够找到任何有用的东西。任何想法都将不胜感激!
答案 0 :(得分:1)
很抱歉听到您遇到问题。
我们一直在改变录制案例的方式,这可能就是你遇到问题的原因,但我不知道为什么你会在Linux和Unix上有不同的结果。
我们不再有openmdao
表了。这些表现在是metadata
,iterations
和derivs
。
要查看案例记录是否存在问题,我在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']
这有帮助吗?
由于
答案 1 :(得分:0)
对于1.7.1版本似乎也是一个问题,但升级到1.7.3解决了这个问题。另外,我在Python IDE(Spyder,Fedora Linux / Gnome)的工作目录中找到了我的项目记录器sqlite数据库,并且能够通过Sqliteman GUI访问这些表。它使用的是SQL GUI,它显示了openmdao表的存在,因而是我使用旧版本的线索。