【发布时间】:2021-11-19 10:08:48
【问题描述】:
我试图在我的优化问题中包含一些 ref0= 缩放,但我不断收到边界错误:ValueError: SLSQP Error: lb > ub in bounds True, False.。如果没有 ref0= 缩放,优化运行良好。以文档中的抛物面优化示例(稍作修改以获得更大的值):
import openmdao.api as om
# build the model
prob = om.Problem()
prob.model.add_subsystem('paraboloid', om.ExecComp('f = (x-10)**2 + x*y + (y+40)**2 - 3'))
# setup the optimization
prob.driver = om.ScipyOptimizeDriver()
prob.driver.options['optimizer'] = 'SLSQP'
prob.model.add_design_var('paraboloid.x', lower=20, upper=60, ref=10, ref0=40)
prob.model.add_design_var('paraboloid.y', lower=-100, upper=50, ref=10)
prob.model.add_objective('paraboloid.f')
prob.setup()
# Set initial values.
prob.set_val('paraboloid.x', 40)
prob.set_val('paraboloid.y', -4.0)
# run the optimization
prob.run_driver()
# minimum value
print(prob.get_val('paraboloid.f'))
# location of the minimum
print(prob.get_val('paraboloid.x'))
print(prob.get_val('paraboloid.y'))
当然,这个简单的问题可能没有必要添加这样的缩放,但它的目的是重现问题。将 ref0=40 添加到“paraboloid.x”设计变量将导致边界错误。我如何/应该如何正确设置边界和比例因子以使优化器正常工作?
【问题讨论】:
标签: openmdao