MetaModelUnstructured组件优化

时间:2018-03-27 13:54:48

标签: openmdao

我错过了如何从一个被用作问题组件的元模型中获取'输出'的观点。 很明显,计算部分应该有输出,但是如何。下面是简单的sin函数作为元模型结构组件。我试图修改样本。但错误是:

  

文件   “C:\用户\ ebarlas \应用程序数据\本地\连续\ anaconda3 \ LIB \站点包\ openmdao \核心\ group.py”   第201行,在_setup_procs中       subsys._setup_procs(subsys.name,sub_comm)

     

TypeError:_setup_procs()缺少1个必需的位置参数:   'COMM'

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'])

3 个答案:

答案 0 :(得分:3)

您不应该为MetaModel实现compute函数(预测未计算输出)。

请参阅此处的文档:http://openmdao.org/twodocs/versions/latest/features/building_blocks/components/metamodelunstructured.html

答案 1 :(得分:0)

您正在错误地使用MetaModelUnstructured组件,但是还有另一个错误。

您定义的类trig与注释掉的代码中名为trig的实例不同。一个是类,另一个是实例。您无法将类传递给add_subsystem。

然而,即使解决了这个问题,MetaModelUnstructured在分类时仍然存在错误。我们将在OpenMDAO 2.3之前获得修复,但是现在您在注释掉的代码中完成它的方式将起作用。

答案 2 :(得分:0)

感谢对问题的澄清。请注意,更新示例中的错误是用于传递类定义trig而不是实例,但在更正后我可以看到问题。

这是MetaModelUnStructured中的错误......很快就会修复。