【问题标题】:MetaModelUnstructured Component OptimizationMetaModel非结构化组件优化
【发布时间】: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


    【解决方案1】:

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

    在此处查看文档:http://openmdao.org/twodocs/versions/latest/features/building_blocks/components/metamodelunstructured.html

    【讨论】:

    • 感谢您的评论。我添加了计算来显示我从优化器访问输出的问题,或者可以说将输出从该类中取出。省略“计算”并不能解决问题。为了澄清,我修改了代码 sn-p。请检查一下以了解我的意思,评论和未评论的四行是我感到困惑的部分。我试图了解元模型在课堂上的训练数据应该发生在哪里。应该在设置或初始化等范围内。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      您错误地使用了MetaModelUnstructured 组件,但首先出现了另一个错误。

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

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

      【讨论】:

      • 感谢您的回答。快速跟进:是否可以使用smt.readthedocs.io/en/latest中新开发的代理模型
      • 感谢您的回答。快速跟进:是否可以将link 中新开发的代理模型也用作组件?或者这是否需要成为 openmdao 中的外部代码组件。如果梯度也可以输入到 openmdao 优化器中,那么梯度增强克里金法似乎很有用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-10
      • 2011-03-10
      • 2011-08-18
      • 2015-10-09
      • 1970-01-01
      • 2010-12-28
      相关资源
      最近更新 更多