约束不满意

约束不满意

问题描述:

我正在使用openMDAO版本1.7.1,ScipyOptimizer,SLSQP,fd,step_size 1.0e-4。约束不满意

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

关于为什么发生这种事情的任何想法?我的设置是否错误?可能的错误?如果没有,如何避免?

任何反馈意见。

优化器是否在其输出中报告(在选项中将'disp'设置为True)违反约束并且优化失败?如果是这样,那么优化器出于某种原因不能解决问题。这可能是模型中某个组件的计算错误,也可能是此优化器不适合的问题。将不得不看到问题了解更多。

使用像SLSQP这样的渐变优化器,有时候这个问题是导数计算中的一个错误。有一对夫妇,你可以用它来帮助找到错误的组件衍生工具:

prob.check_partial_derivatives() 

这将遍历模型中的所有组件和分析衍生品采用有限差分进行比较。

prob.check_total_derivatives() 

这计算所有目标和约束的总衍生物与设计变量并将其与全模型有限差分进行比较。

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

+0

您好Kenneth,感谢您的意见和建议。我没有将'disp'设置为True,并且我现在重新运行True的代码,并希望在几天后获得结果。然而,我看到优化停止与这些信息:“积极的方向派生词(退出模式8),迭代:8,功能评估:13,梯度评估:4,优化完成”。退出模式8是否表示失败?谢谢。 –

+0

这绝对是一个优化失败。基本上它找不到任何地方去。如果您在组件中提供了解析导数,那么derivs中可能存在错误,您可以使用上面提到的函数来找到它。除此之外,如果您的设计变量的幅度大小差异很大,那么也可能会出现缩放问题,您希望将它们缩小到相同的数量级。同样的事情也适用于你的约束。 –

我走在同一条路上,遇到了我的问题。在检查衍生产品后(我确实修复了一些错误)后,我仍然遇到了收敛问题,最后改变了优化器(pyOptSparse(SLSQP)),甚至只是使用了不同的初始点。

+0

是的,一般来说SLSQP是一个弱优化器。 SNOPT是10000倍更好,但它不是开源的。尽管我们通常在内部使用SNOPT几乎可以处理任何sqp应用程序。 –