我有一个自变量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')
这给了我关于变量不存在的错误以及尝试连接到浮点数的数组。将特定值从输出数组连接到缩放器输入的正确语法是什么?
答案 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])