我无法访问通过多层组隐式链接的变量。根据文档:
在新的 OpenMDAO 中,组不是组件,也没有自己的变量。通过将提升 arg 传递给 add 调用,可以将变量提升到组级别,例如,
group = Group() group.add('comp1', Times2(), promotes=['x'])
这将允许通过 group.params['x'] 访问属于 comp1 的变量 x。
但是,当我尝试访问子子组的变量时,我遇到了错误。请参阅下面的示例,该示例显示了一个工作和非工作示例:
from openmdao.api import Component, Group, Problem
import numpy as np
class Times2(Component):
def __init__(self):
super(Times2, self).__init__()
self.add_param('x', 1.0, desc='my var x')
self.add_output('y', 2.0, desc='my var y')
def solve_nonlinear(self, params, unknowns, resids):
unknowns['y'] = params['x'] * 2.0
def linearize(self, params, unknowns, resids):
J = {}
J[('y', 'x')] = np.array([2.0])
return J
class PassGroup1(Group):
def __init__(self):
super(PassGroup1, self).__init__()
self.add('t1', Times2(), promotes=['*'])
class PassGroup2(Group):
def __init__(self):
super(PassGroup2, self).__init__()
self.add('g1', PassGroup1(), promotes=['*'])
prob = Problem(root=Group())
prob.root.add('comp', PassGroup2(), promotes=['*'])
prob.setup()
prob.run()
# this works
print prob.root.comp.g1.t1.params['x']
# this does not
print prob.root.params['x']
您能否解释一下为什么这不起作用,以及如何在不了解较低级别组的情况下将变量提供给顶层?