Python 内部记录器效率低?

Python 内部记录器效率低?,python,openmdao,Python,Openmdao,我最近“被迫”使用无梯度优化器(包括pyoptsparse中的优化器) 以前,迭代次数非常少,所以记录数据从来都不是什么大问题,我选择了内部记录器 但是对于一个优化问题,如果迭代次数超过30000次,那么从案例记录器读取in数据就变得非常麻烦 如果我在每次迭代中使用一个代码简单地附加到一个txt文件中,那么读入和打印就会快得多。我想问一下我是否犯了错误,或者使用“附加二进制txt文件”是否真的更好 步骤如下: 1 des var、1约束、1目标~60000次迭代的优化问题sql文件大小~30 M

我最近“被迫”使用无梯度优化器(包括pyoptsparse中的优化器)

以前,迭代次数非常少,所以记录数据从来都不是什么大问题,我选择了内部记录器

但是对于一个优化问题,如果迭代次数超过30000次,那么从案例记录器读取in数据就变得非常麻烦

如果我在每次迭代中使用一个代码简单地附加到一个txt文件中,那么读入和打印就会快得多。我想问一下我是否犯了错误,或者使用“附加二进制txt文件”是否真的更好

步骤如下:

1 des var、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')
花费的时间:几秒钟内……

通过提交,我们能够使案例阅读器在您描述的案例中更加高效。系统、驱动程序和解算器迭代表中的
iteration\u坐标
列现在已编制索引,这将大大减少通过大型数据库的
get\u case
方法获取案例所需的时间。我们还向CaseReader添加了一个
load_cases
方法,该方法通过最少的查询将所有案例加载到内存中,进一步提高了
get_case
方法的效率

获取OpenMDAO的最新版本并更新您的代码以使用
load\u 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 ]
您可以在这里的将数据库加载到内存中部分找到相关文档: