【发布时间】:2018-03-27 13:54:47
【问题描述】:
我错过了关于如何从用作问题组件的元模型中获取“输出”的观点。 很明显,计算部分应该有一个输出,但是如何。下面是作为元模型非结构化组件的简单 sin 函数。我试图修改样本。但错误是:
文件 "C:\Users\ebarlas\AppData\Local\Continuum\anaconda3\lib\site-packages\openmdao\core\group.py", 第 201 行,在 _setup_procs 中 subsys._setup_procs(subsys.name, sub_comm)
TypeError: _setup_procs() 缺少 1 个必需的位置参数: '通讯'
import numpy as np
from openmdao.api import Problem, Group, IndepVarComp
from openmdao.api import ScipyOptimizeDriver
from openmdao.api import MetaModelUnStructured, FloatKrigingSurrogate
# Below class syntax is not working
class trig(MetaModelUnStructured):
def setup(self):
self.add_input('x', 0., training_data=np.linspace(0,10,20))
self.add_output('sin_x', 0., surrogate=FloatKrigingSurrogate(),
training_data=.5*np.sin(np.linspace(0,10,20)))
self.declare_partials(of='sin_x', wrt='x', method='fd')
# If I uncomment 4 lines below and comment out the class above it works fine.
#trig = MetaModelUnStructured()
#trig.add_input('x', 0., training_data=np.linspace(0,10,20))
#trig.add_output('sin_x', 0., surrogate=FloatKrigingSurrogate(),
# training_data=.5*np.sin(np.linspace(0,10,20)))
#trig.declare_partials(of='sin_x', wrt='x', method='fd')
prob = Problem()
inputs_comp = IndepVarComp()
inputs_comp.add_output('x', 5)
prob.model.add_subsystem('inputs_comp', inputs_comp)
prob.model.add_subsystem('trig', trig)
prob.model.connect('inputs_comp.x', 'trig.x')
prob.driver = ScipyOptimizeDriver()
prob.driver.options['optimizer'] = 'COBYLA'
prob.driver.options['tol'] = 1e-3
prob.driver.options['disp'] = True
prob.model.add_design_var('inputs_comp.x', lower=4, upper=7)
prob.model.add_objective('trig.sin_x')
prob.setup(check=True)
prob.run_driver()
print(prob['trig.sin_x'])
print(prob['trig.x'])
【问题讨论】:
标签: openmdao