0

我有一个自变量 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')

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

4

1 回答 1

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)

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

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])
于 2016-08-23T18:16:44.653 回答