我希望最小化一个组件的输出,同时确保它大于第二个组件的输出。
当我向add_constraint提供一个带有输出名称的字符串时,它需要一个“可迭代的数值,或标量数值”。
当给定prob['name']时,错误是"'NoneType‘对象不可订阅“
这必须是简单和有文档记录的东西,但我还没有找到它。
import openmdao.api as om
prob=om.Problem()
independant = prob.model.add_subsystem('independant', om.IndepVarComp())
independant.add_output('x', val = 3.0)
prob.model.add_subsystem('steep_line', om.ExecComp('f = x'))
prob.model.add_subsystem('shallow_line', om.ExecComp('g = 0.5*x + 1.0'))
prob.model.connect('independant.x', ['steep_line.x', 'shallow_line.x'])
prob.driver = om.ScipyOptimizeDriver()
prob.driver.options['optimizer'] = 'SLSQP'
prob.model.add_design_var('independant.x', lower=0.0, upper=3.0)
#Change which of the next two lines is commented out to see both errors I
#have encountered.
prob.model.add_constraint('steep_line.f', lower='shallow_line.g')
#prob.model.add_constraint('steep_line.f', lower=prob['shallow_line.g'])
prob.model.add_objective('steep_line.f')
prob.setup()
prob.run_driver()
print('x:', prob['independant.x'])期望的结果是达到独立的优化。x= 2.0
提前感谢您所能提供的任何帮助。
发布于 2019-10-08 10:34:27
不能指定非常数下界、上界或等于界。为此,您需要添加(另一个) ExecComp,然后从两个值中减去两个值。然后,您可以将这个新comp的结果输出设置为下限0
import openmdao.api as om
prob=om.Problem()
independant = prob.model.add_subsystem('independant', om.IndepVarComp())
independant.add_output('x', val = 3.0)
prob.model.add_subsystem('steep_line', om.ExecComp('f = x'))
prob.model.add_subsystem('shallow_line', om.ExecComp('f = 0.5*x + 1.0'))
prob.model.add_subsystem('constraint',
om.ExecComp('g = f_computed - lower'))
prob.model.connect('independant.x', ['steep_line.x', 'shallow_line.x'])
prob.model.connect('shallow_line.f', 'constraint.lower')
prob.model.connect('steep_line.f', 'constraint.f_computed')
prob.driver = om.ScipyOptimizeDriver()
prob.driver.options['optimizer'] = 'SLSQP'
prob.model.add_design_var('independant.x', lower=0.0, upper=3.0)
prob.model.add_constraint('constraint.g', lower=0)
prob.model.add_objective('steep_line.f')
prob.setup()
prob.run_driver()
print('x:', prob['independant.x'])https://stackoverflow.com/questions/58277624
复制相似问题