首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Openmdao中使用ExternalCodeComp时出现问题

在Openmdao中使用ExternalCodeComp时出现问题
EN

Stack Overflow用户
提问于 2020-08-05 03:23:52
回答 1查看 51关注 0票数 1

我正在尝试openmdao docs中给出的ExternalCodeComp示例问题。

优化代码是

代码语言:javascript
代码运行次数:0
运行
复制
import openmdao.api as om
from openmdao.components.tests.test_external_code_comp import ParaboloidExternalCodeCompFD

prob = om.Problem()
model = prob.model

model.add_subsystem('p', ParaboloidExternalCodeCompFD(), promotes_inputs=['x', 'y'])

# find optimal solution with SciPy optimize
# solution (minimum): x = 6.6667; y = -7.3333
prob.driver = om.ScipyOptimizeDriver()
prob.driver.options['optimizer'] = 'SLSQP'

prob.model.add_design_var('p.x', lower=-50, upper=50)
prob.model.add_design_var('p.y', lower=-50, upper=50)

prob.model.add_objective('p.f_xy')

prob.driver.options['tol'] = 1e-9
prob.driver.options['disp'] = True

prob.setup()

# Set input values
prob.set_val('p.x', 3.0)
prob.set_val('p.y', -4.0)

prob.run_driver()
print(prob.get_val('p.x'))
print(prob.get_val('p.y'))

但是,我在prob.setup()中得到了以下错误。

代码语言:javascript
代码运行次数:0
运行
复制
Exception has occurred: RuntimeError
Group (<model>): Output not found for design variable 'p.x'.

这是什么意思?我不知道我是否遗漏了一些基本的东西。这个问题只有在我试图优化它的时候才会出现。当我只是在模型中使用外部代码(如文档中所给出的)时,没有问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-05 03:36:50

在这一行中,您提升了输入xy

代码语言:javascript
代码运行次数:0
运行
复制
model.add_subsystem('p', ParaboloidExternalCodeCompFD(), promotes_inputs=['x', 'y'])

请注意,您没有提升输出f_xy

因此,从模型的顶层来看,正确的路径是:输出为p.f_xy,而输入为xy

因此,添加设计变量和设置值的正确方法是使用xy

代码语言:javascript
代码运行次数:0
运行
复制
import openmdao.api as om
from openmdao.components.tests.test_external_code_comp import ParaboloidExternalCodeCompFD

prob = om.Problem()
model = prob.model

model.add_subsystem('p', ParaboloidExternalCodeCompFD(), promotes_inputs=['x', 'y'])

# find optimal solution with SciPy optimize
# solution (minimum): x = 6.6667; y = -7.3333
prob.driver = om.ScipyOptimizeDriver()
prob.driver.options['optimizer'] = 'SLSQP'

prob.model.add_design_var('x', lower=-50, upper=50)
prob.model.add_design_var('y', lower=-50, upper=50)

prob.model.add_objective('p.f_xy')

prob.driver.options['tol'] = 1e-9
prob.driver.options['disp'] = True

prob.setup()

# Set input values
prob.set_val('x', 3.0)
prob.set_val('y', -4.0)

prob.run_driver()
print(prob.get_val('x'))
print(prob.get_val('y'))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63253790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档