如何选择合适的优化器?

时间:2018-07-16 09:28:13

标签: openmdao

当最小化Rosenbrock函数时,我遇到了错误的最优值:100(y-x ** 2)** 2 +(1-x)** 2。正确的结果是x = y = 1.0,f = 0。但是,当将OpenMDAO与COBYLA优化器一起使用时,结果是x = 0.5660643,y = 0.3179899,f = 0.18889496。我切换到Powell优化器,过程收敛到正确的结果。那么,如何为优化问题选择一致的优化器呢?

2 个答案:

答案 0 :(得分:3)

不幸的是,这个问题没有很好的答案。实际上,Wolpert and Macready证明了他们无法通过免费午餐定理(它说没有优化程序在所有问题上都能发挥出最佳性能)来确定性地回答这个问题。

我将给您一些广泛的建议:您需要了解所要解决问题的性质。

  1. 它是颠簸的还是凸的?
  2. 是连续的还是离散的
  3. 您有约束力
  4. 您有多少个设计变量?有多少约束?
  5. 您可以得到解析导数还是需要近似它们?
  6. 如果您需要近似它们,可以使用有限差分或复数步(复数步更好!)

鉴于所有这些,您可以开始缩小选择范围。大多数时候,工程问题都是凸面的(超级技术术语!)。我的意思是,虽然您不能证明有多个最佳选择,但实际上,您发现的最佳选择往往对起点不敏感。在这种情况下,最好使用基于梯度的优化器,而不是没有梯度的优化器。 COBYLA是一种无梯度方法。 SLSQP和CONMIN都是基于梯度的。

仅切换到基于梯度的方法并不一定能解决您的精度问题。这些方法需要精确的导数。如果您没有定义解析导数,而是使用FD,则近似值可能不足以收敛到正确的答案。但是,如果您使用步进大小,它们可能没问题。通常,FD最多会导致收敛变慢,而最坏的情况是使您无法获得答案。

如果您想获得最可靠的优化,则应将基于梯度的优化与解析导数或复杂步长近似导数(比FD准确得多)一起使用。对于大量的设计变量,或者对于具有昂贵的非线性求解器循环的问题,解析导数会快得多。

如果您知道问题有多个局部最小值,则需要使用基于多起点梯度的方法或无梯度的方法。

答案 1 :(得分:0)

对不起,我不允许添加评论,所以这是一个后续问题,但这是一个答案;

询问/提及参数(目标(一个或多个)或设计变量)的规范化是否会根据优化程序改变收敛性也许很重要。换句话说,对于基于梯度的优化器,对变量进行归一化比对无梯度变量更重要吗?缩放和归一化单个目标案例的效果是什么(假设对于多目标案例,显然为什么要归一化)?