首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenMDAO内部记录器效率低?

OpenMDAO内部记录器效率低?
EN

Stack Overflow用户
提问于 2018-06-25 12:01:01
回答 1查看 88关注 0票数 1

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

以前,迭代次数相当少,所以记录数据不是什么大问题,我选择了内部记录器。

但是对于一个超过30.000次迭代的优化问题,从用例记录器读取in数据变得非常麻烦。

如果我要在每次迭代中使用代码简单地附加到txt文件,那么读取和绘图要快得多。我想问一下,我是否犯了一个错误,还是使用‘文件’真的更好。“

步骤:

1 des,1约束,1目标~ 60000迭代sql文件大小~ 30 MB的优化问题

代码语言:javascript
复制
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分钟后我停了下来,还在看书.

代码语言:javascript
复制
f=open('out.dat','ab')
np.savetxt(f,[desvar,constraint,objec])
f.close() np.loadtxt( 'out.dat')

花费的时间:几秒钟之内..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-07 00:31:05

通过提交,我们能够使CaseReader更适合您所描述的情况。现在对系统、驱动程序和求解器迭代表中的iteration_coordinate列进行了索引,这将大大减少通过大型数据库的get_case方法获得用例所需的时间。我们还向load_cases添加了一个CaseReader方法,该方法以最少的查询将所有情况加载到内存中,从而进一步提高了get_case方法的效率。

掌握OpenMDAO的最新版本并更新代码以使用load_cases会有很大帮助。

代码语言:javascript
复制
    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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51023038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档