我有两个组件 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,每次运行都不同。包含此更改参数和反馈选项的最佳方式是什么?