我最近“被迫”使用梯度自由优化器(包括pyoptsparse中的优化器)。
以前,迭代次数相当少,所以记录数据不是什么大问题,我选择了内部记录器。
但是对于一个超过30.000次迭代的优化问题,从用例记录器读取in数据变得非常麻烦。
如果我要在每次迭代中使用代码简单地附加到txt文件,那么读取和绘图要快得多。我想问一下,我是否犯了一个错误,还是使用‘文件’真的更好。“
步骤:
1 des,1约束,1目标~ 60000迭代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')花费的时间:几秒钟之内..。
发布于 2018-07-07 00:31:05
通过这提交,我们能够使CaseReader更适合您所描述的情况。现在对系统、驱动程序和求解器迭代表中的iteration_coordinate列进行了索引,这将大大减少通过大型数据库的get_case方法获得用例所需的时间。我们还向load_cases添加了一个CaseReader方法,该方法以最少的查询将所有情况加载到内存中,从而进一步提高了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 ]您可以在将DataBase加载到内存部分中找到这方面的文档:values.html
https://stackoverflow.com/questions/51023038
复制相似问题