约束不满意

时间:2016-09-06 13:22:07

标签: openmdao

我使用的是openMDAO 1.7.1版,ScipyOptimizer,SLSQP,fd,step_size 1.0e-4。

我将设计变量调整为[0,1],并在设计变量范围内得到收敛结果。但是,仍然不满足一个约束。我将参数的约束设置为[0,1.5],但最终结果为1.73。我尝试了两种不同的收敛误差限制,0.01和0.001,但不满足这种约束。

关于为什么会发生这件事的任何想法?我做错了吗?可能的错误?如果没有,该如何避免?

感谢任何反馈。

2 个答案:

答案 0 :(得分:1)

优化器是否在其输出中报告(在选项中设置'显示为True)违反约束并且优化不成功?如果是这样,那么优化器由于某种原因无法解决问题。对于模型的组件计算可能是一个错误,或者可能只是这个问题对于这个优化器来说并不合适。必须看到问题才能理解更多。

使用像SLSQP这样的梯度优化器,有时问题是导数计算中的错误。您可以使用一些工具来帮助查找组件衍生产品中的错误:

prob.check_partial_derivatives()

这会遍历模型中的所有组件,并将分析导数与有限差分进行比较。

prob.check_total_derivatives()

计算设计变量的所有目标和约束的总和,并将它们与全模型有限差分进行比较。

请注意,在评估分析中是否存在错误时,您必须牢记有限差分准确度的限制。

答案 1 :(得分:0)

我带着我的问题走在同一条路上。在按照建议检查衍生物(并确实修复了一些错误)之后,我仍然遇到了收敛问题并最终更改了优化器(在我的情况下是pyOptSparse(SLSQP)),甚至只是使用了一个不同的初始点。