替换OpenMDAO组中的组件

时间:2017-08-18 00:37:11

标签: openmdao

在OpenMDAO 0.x中有一个'替换'方法可以交换组件,不清楚你可以在1.x中轻松完成。我有问题,我的外部循环算法必须运行多次,并且在某些情况下,想要为具有相同i / o的MetaModel组件交换计算上昂贵的自定义MDA组件。在运行时是否有快速而肮脏的方法来执行此操作?

2 个答案:

答案 0 :(得分:0)

I would just define a custom group class that takes an argument telling it which one to use. Rather than use a replace I suggest just re-instantiating the whole problem and calling setup again.

If, for some reason you don't want to call setup more than once (maybe its a big model and setup is slow), then I suggest you just create two problem instances. One will have the MMDA and the other will have the meta-model. In your outer loop you can just call whichever one is appropriate.

答案 1 :(得分:-1)

将MetaModel和MDA问题结合起来会让人感到困惑。拥有MDA模型表明问题参数和模型是明确的,而MetaModel表明问题参数和模型是隐含的,这是两个非常不同的问题。有条件地运行两个不同的问题似乎与单个非线性方程组的MDAO范式相反,并且可能变得非常混乱,恕我直言。

如果MetaModel的目的是改进MDA的初始化猜测,那么v1.7中的组件隐式状态概念可能是在MDA问题中使用的内置方法并放弃MetaModel从而减少了问题一组方程?请注意,我没有测试组件隐式状态方法。

否则,所有OpenMDAO类都只是python类,可以修改其solve_nonlinear方法以包含条件逻辑。也许你的项目可以创建一个父问题和一个父组,它可以根据需要在MetaModel和自定义MDA之间有条件地控制求解器和数据流的执行?

你的想法?