我正在尝试openmdao docs中给出的ExternalCodeComp示例问题。
优化代码是
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()
中得到了以下错误。
Exception has occurred: RuntimeError
Group (<model>): Output not found for design variable 'p.x'.
这是什么意思?我不知道我是否遗漏了一些基本的东西。这个问题只有在我试图优化它的时候才会出现。当我只是在模型中使用外部代码(如文档中所给出的)时,没有问题。
发布于 2020-08-04 19:36:50
在这一行中,您提升了输入x
和y
model.add_subsystem('p', ParaboloidExternalCodeCompFD(), promotes_inputs=['x', 'y'])
请注意,您没有提升输出f_xy
因此,从模型的顶层来看,正确的路径是:输出为p.f_xy
,而输入为x
和y
。
因此,添加设计变量和设置值的正确方法是使用x
和y
。
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'))
https://stackoverflow.com/questions/63253790
复制相似问题