在OpenMDAO 1.x

时间:2016-08-23 17:54:00

标签: openmdao

我有一个自变量x,它被作为numpy数组处理。我希望能够根据向量中的其他值约束该向量中的某些值。即x_(k)< X_(K + 1)。我试过了:

root.add('p1',IndepVarComp('x',x=np.ones(10,dtype=float))
root.add('con',ExecComp('c0=x[1]-x[0]')
root.connect('p1.x','con.x')

这给了我关于变量不存在的错误以及尝试连接到浮点数的数组。将特定值从输出数组连接到缩放器输入的正确语法是什么?

1 个答案:

答案 0 :(得分:0)

您键入的代码中有两个缺少的括号,但这些必须来自将其转录到此处。您遗漏的主要内容是ExecComp的额外参数,以便它知道如何调整传入的x的大小。

import numpy as np

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

prob = Problem()
prob.root = root = Group()

root.add('p1', IndepVarComp('x', np.array([3, 7, 5], dtype=float)))
root.add('con', ExecComp('co = x[1] - x[0]', x=np.zeros(3, )))
root.connect('p1.x','con.x')

prob.setup()
prob.run()
print('con', prob['con.co'])

当我运行它时,我得到预期的输出:

##############################################
Setup: Checking root problem for potential issues...

No recorders have been specified, so no data will be saved.

Setup: Check of root problem complete.
##############################################

('con', 4.0)

另一种方法是使用缩放器表达式,然后从单个索引发出连接&#39; p1.x&#39;:

root.add('con2', ExecComp('co = b - a'))
root.connect('p1.x', 'con2.a', src_indices=[0])
root.connect('p1.x', 'con2.b', src_indices=[1])