【问题标题】:OpenMDAO1.x: Feedback a variable for several runs (runlist)OpenMDAO1.x:为多次运行反馈一个变量(运行列表)
【发布时间】:2015-11-20 16:05:08
【问题描述】:

我有两个组件 comp1 和 comp2 形成问题,应该运行几次。为此,我发现我可以使用 UniformDriver(我不知道这是否最适合我的目的)。但是,我想将 comp2 的输出反馈到 comp1。所以在第一次运行之后,我从 comp2 获得输出,下一次运行应该是 comp1 的输入。我认为下面的例子让我更清楚我想做什么:

from openmdao.api import Component, Group, Problem, UniformDriver


class Times2Plus(Component):
    def __init__(self):
        super(Times2Plus, self).__init__()
        self.add_param('x', 1.0)
        self.add_param('z', 2.0)
        self.add_output('y', shape=1)

    def solve_nonlinear(self, params, unknowns, resids):
        unknowns['y'] = params['x'] * 2.0 + params['z']

class Power3(Component):
    def __init__(self):
        super(Power3, self).__init__()
        self.add_param('y', shape=1)
        self.add_output('x', shape=1) # feedback to params['x'] as input in next run

    def solve_nonlinear(self, params, unknowns, resids):
        unknowns['x'] = params['y'] ** 3.0

prob = Problem(root=Group())
prob.driver = UniformDriver(num_samples=5)
prob.root.add('comp1', Times2Plus())
prob.root.add('comp2', Power3())
prob.root.connect('comp1.y', 'comp2.y')
prob.setup()
prob.run()

基本上,上一次运行的组件 Power3 的输出 x 应连接到组件 Times2Plus 的输入 x。此外,我有一些参数 z,我事先知道,用于组件 Times2Plus,每次运行都不同。包含此更改参数和反馈选项的最佳方式是什么?

【问题讨论】:

  • 您是否正在执行定点迭代,在该迭代中您一直运行 comp1 和 comp2 直到值停止变化并且系统收敛?
  • 基本上我的 comp1 包装了一些外部程序来计算一定速度的负载,而 comp2 将负载作为输入来计算位移。现在对于下一个速度,对应于下一次运行,我想反馈计算的位移作为 comp1 的输入来计算新的载荷。我知道运行次数,这简单对应于我的速度向量的长度,所以我不必迭代。如何在 OpenMDAO 中实现这样的结构?
  • 按照您描述问题的方式,我建议使用 comp1 和 comp2 的多个实例,而不是使用某种驱动器。您运行 comp1a,将其输出传递给 comp2a,然后将其输出传递给 comp1b,等等。
  • 好的,这当然是一个解决方案,但我认为也许存在一些更好的方法来实现它。我想这可能是一个非常独特的问题。谢谢你帮助我。

标签: openmdao


【解决方案1】:

在这种情况下,您不需要驱动器。您说的是求解器(与 OpenMDAO > 1.0 中的驱动程序不同)。

您可以在我们的 Sellar 示例中看到如何设置此类事物的示例,使用 Non Linear Gauss Seidel。基本上,您只需要以循环方式连接组件,然后添加适当的求解器以确保它们收敛。

【讨论】:

  • 我看到这是一个数学问题的解决方案,我正在寻找一些收敛值。但是,对于我在其他评论中解释的问题,我认为没有可以解决的收敛值,因为我只想运行固定数量的运行。对于这个特殊问题,实现它的正确方法是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-15
  • 1970-01-01
  • 2021-11-26
相关资源
最近更新 更多