OpenMDAO 内部记录器效率低?
OpenMDAO Internal recorder efficiency low?
我最近“'forced'”使用无梯度优化器(包括 pyoptsparse 中的优化器)
以前,迭代次数相当少,所以记录数据从来都不是大问题,我选择了内部记录器。
但是对于迭代次数超过 30.000 次的优化问题,从案例记录器读取输入数据变得非常麻烦。
如果我使用代码在每次迭代中简单地附加到 txt 文件,那么读入和绘图会快得多。我想问一下我是否犯了错误,或者使用''append binary txt file''真的更好吗?
步骤:
1 des var, 1 constraint, 1 objective ~ 60000 iterations sql 文件大小~ 30 MB
的优化问题
cr = CaseReader(fname)
case_keys = cr.driver_cases.list_cases()
ab=[cr.driver_cases.get_case(case_key).get_objectives()['a.obj'][0] for case_key in case_keys ]
花费的时间:我还在阅读 10 分钟后停止了....
f=open('out.dat','ab')
np.savetxt(f,[desvar,constraint,objec])
f.close() np.loadtxt( 'out.dat')
花费时间:秒内....
通过 this 提交,我们能够使 CaseReader 对于您描述的案例更加高效。系统、驱动程序和求解器迭代表中的 iteration_coordinate
列现在已编制索引,这应该会显着减少通过大型数据库的 get_case
方法获取案例所需的时间。我们还在 CaseReader 中添加了一个 load_cases
方法,它使用最少的查询将所有案例加载到内存中,进一步提高了 get_case
方法的效率。
获取最新版本的 OpenMDAO 并更新您的代码以使用 load_cases
应该会有很大帮助。
cr = CaseReader(fname)
cr.load_cases()
case_keys = cr.driver_cases.list_cases()
ab=[cr.driver_cases.get_case(case_key).get_objectives()['a.obj'][0] for case_key in case_keys ]
您可以在 将数据库加载到内存中 部分找到相关文档:http://openmdao.org/twodocs/versions/latest/features/recording/getting_values.html
我最近“'forced'”使用无梯度优化器(包括 pyoptsparse 中的优化器)
以前,迭代次数相当少,所以记录数据从来都不是大问题,我选择了内部记录器。
但是对于迭代次数超过 30.000 次的优化问题,从案例记录器读取输入数据变得非常麻烦。
如果我使用代码在每次迭代中简单地附加到 txt 文件,那么读入和绘图会快得多。我想问一下我是否犯了错误,或者使用''append binary txt file''真的更好吗?
步骤:
1 des var, 1 constraint, 1 objective ~ 60000 iterations sql 文件大小~ 30 MB
的优化问题cr = CaseReader(fname)
case_keys = cr.driver_cases.list_cases()
ab=[cr.driver_cases.get_case(case_key).get_objectives()['a.obj'][0] for case_key in case_keys ]
花费的时间:我还在阅读 10 分钟后停止了....
f=open('out.dat','ab')
np.savetxt(f,[desvar,constraint,objec])
f.close() np.loadtxt( 'out.dat')
花费时间:秒内....
通过 this 提交,我们能够使 CaseReader 对于您描述的案例更加高效。系统、驱动程序和求解器迭代表中的 iteration_coordinate
列现在已编制索引,这应该会显着减少通过大型数据库的 get_case
方法获取案例所需的时间。我们还在 CaseReader 中添加了一个 load_cases
方法,它使用最少的查询将所有案例加载到内存中,进一步提高了 get_case
方法的效率。
获取最新版本的 OpenMDAO 并更新您的代码以使用 load_cases
应该会有很大帮助。
cr = CaseReader(fname)
cr.load_cases()
case_keys = cr.driver_cases.list_cases()
ab=[cr.driver_cases.get_case(case_key).get_objectives()['a.obj'][0] for case_key in case_keys ]
您可以在 将数据库加载到内存中 部分找到相关文档:http://openmdao.org/twodocs/versions/latest/features/recording/getting_values.html