如果只有一个目标,openmdao优化驱动程序是否支持数组类型?

问题描述 投票:-1回答:1

我已经设置了一个目标函数 - obj =(x0-u0)^ 2 +(u0)^ 2我正在使用Scipyoptimizer和SLSQP计算最小值。我给x0作为输入,因此它在运行中计算u0,同时最小化obj。现在,我试图使用值数组而不是x0,但它给出了错误和抛出 - 只返回标量值。

我试过函数run_model()。模型很完美。但是在运行函数 - run_driver()时,它会抛出一个错误。

p.model.add_subsystem('obj_f',ExecComp('obj =(x0-u0)** 2 +(u0)** 2',u0 = {'shape':( 2,)},x0 = {'形状':( 2,)},obj = {'shape':( 2,)}),promote = ['x0','u0'])

对于x0 = [1.5,1.2]它应该给出结果= 0.72,这是u0 = 0.6时x0 = 1.2的最佳值

optimization scipy openmdao
1个回答
0
投票

您得到的错误是由于您的目标值是向量。基于梯度的优化器需要单个标量值作为目标。您可以尝试将数组求和以生成标量。

p.model.add_subsystem('obj_f', ExecComp('obj = sum((x0-u0)**2 + (u0)**2)', u0={'shape': (2, )}, 
                                                                           x0={'shape': (2, )}, 
                                                                           obj={'shape': (1, )}), 
                                        promotes=['x0', 'u0'])
© www.soinside.com 2019 - 2024. All rights reserved.