gpt4 book ai didi

python - 在 OpenMDAO 1.x 中链接来自两个组的 IndepVarComp

转载 作者:行者123 更新时间:2023-12-01 02:14:02 26 4
gpt4 key购买 nike

我不明白这个错误:

NameError:源“x”无法连接到目标“AB.x”:目标必须是参数,但“AB.x”未知。

我已阅读此内容 response ,但我仍然缺少一些东西。

我写了一个简单的问题来更容易地捕获问题:

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

class A(Component):
def __init__(self):
super(A, self).__init__()
self.add_param('x', val=0.0)
self.add_param('y', val=0.0)
self.add_output('z', val=0.0)
def solve_nonlinear(self, params, unknowns, resids):
unknowns['z'] = params['x'] + params['y']

class B(Component):
def __init__(self):
super(B, self).__init__()
self.add_param('x', val=0.0)
self.add_param('y', val=0.0)
self.add_output('z', val=0.0)
def solve_nonlinear(self, params, unknowns, resids):
unknowns['z'] = 2*params['x'] - params['y']

class AB(Group):
def __init__(self):
super(AB, self).__init__()
self.add('A', A())
self.add('B', B())
self.add('x', IndepVarComp('x', val=0.0), promotes=['*'])
self.add('y', IndepVarComp('y', val=0.0), promotes=['*'])
self.connect('x', ['A.x', 'B.x'])
self.connect('y', ['A.y', 'B.y'])

class C(Component):
def __init__(self):
super(C, self).__init__()
self.add_param('x', val=0.0)
self.add_param('y', val=0.0)
self.add_output('z', val=0.0)
def solve_nonlinear(self, params, unknowns, resids):
unknowns['z'] = 3*params['x'] - 2*params['y']

class ABC(Group):
def __init__(self):
super(ABC, self).__init__()
self.add('AB', AB())
self.add('C', C())
self.add('x', IndepVarComp('x', val=0.0), promotes=['*'])
self.add('y', IndepVarComp('y', val=0.0), promotes=['*'])
self.connect('x', ['AB.x', 'C.x'])
self.connect('y', ['AB.y', 'C.y'])

prob = Problem()
prob.root = ABC()
prob.setup()
prob.run()

我更喜欢使用 IndepVarComp 方法将组件变量与显式 connect 语句链接在一起,而不是通过 promotes 使用隐式连接,因为我可以更轻松地看到大问题中的联系,并列出所有输入变量。当我构建越来越大的问题时,将多个组中的两个 IndepVarComp 变量链接在一起会很有帮助。

非常感谢您的想法和时间。

最佳答案

在组“AB”中,提升的变量“x”已连接到源:

    self.add('x', IndepVarComp('x', val=0.0), promotes=['*'])
self.connect('x', ['A.x', 'B.x'])

在顶部组“ABC”中,相同的“x”变量是“AB.x”,但您尝试再次将其连接到另一个 indepvarcomp:

    self.add('x', IndepVarComp('x', val=0.0), promotes=['*'])
self.connect('x', ['AB.x', 'C.x'])

我建议删除“AB”内部的 IndepVarComp 和连接来解决此问题。

更清楚地说,您不能同时连接最多 2 个不同源的组件输入。如果这两个来源有 2 个不同的值,那么哪一个是正确的?这是不明确的,所以我们不允许。

关于python - 在 OpenMDAO 1.x 中链接来自两个组的 IndepVarComp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48525825/

26 4 0
文章推荐: javascript - 根据部分匹配查找 div id 的值
文章推荐: jQuery 条件
文章推荐: scala - Spark RDD any() 和 all() 方法?
文章推荐: jquery - $( "
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com