【发布时间】:2019-02-21 21:00:35
【问题描述】:
我已经设置了一个目标函数 - obj = (x0-u0)^2 + (u0)^2 我正在使用带有 SLSQP 的 Scipyoptimizer 计算最小值。我将 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= {'shape': (2, )}, obj={'shape': (2, )}), Promotions=['x0', 'u0'])
对于 x0 = [1.5, 1.2] 它应该给出结果 = 0.72,这是 x0=1.2 在 u0=0.6 时的最佳值
【问题讨论】:
-
我正在尝试了解您到底想要做什么。当它是一个 2 向量时,你如何定义最小化目标?如果您的意思是找到 obj 的最小量值,则需要显式计算该标量值并将其用作目标。
-
一个完整的代码 sn-p 示例会很有帮助。
-
@JustinGray 有什么解决方案吗? gist.github.com/shreyanshmohnot/…
-
@RobFalck 我想在 'x' 的不同值处找到 'obj' 和 'u' 的最小幅度。
-
大多数优化器需要一个标量目标函数。由于混合目标函数通常是相互竞争的(将一个值驱动到较小的值必然会驱动其他值到较大的值),我们通常处理此问题的方式是将其中一个值固定为约束,并将另一个值最小化为目标。这可以让您扫除帕累托边界。
标签: optimization scipy openmdao