当最小化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优化器,过程收敛到正确的结果。那么,如何为优化问题选择一致的优化器呢?
答案 0 :(得分:3)
我将给您一些广泛的建议:您需要了解所要解决问题的性质。
鉴于所有这些,您可以开始缩小选择范围。大多数时候,工程问题都是凸面的(超级技术术语!)。我的意思是,虽然您不能证明有多个最佳选择,但实际上,您发现的最佳选择往往对起点不敏感。在这种情况下,最好使用基于梯度的优化器,而不是没有梯度的优化器。 COBYLA是一种无梯度方法。 SLSQP和CONMIN都是基于梯度的。
仅切换到基于梯度的方法并不一定能解决您的精度问题。这些方法需要精确的导数。如果您没有定义解析导数,而是使用FD,则近似值可能不足以收敛到正确的答案。但是,如果您使用步进大小,它们可能没问题。通常,FD最多会导致收敛变慢,而最坏的情况是使您无法获得答案。
如果您想获得最可靠的优化,则应将基于梯度的优化与解析导数或复杂步长近似导数(比FD准确得多)一起使用。对于大量的设计变量,或者对于具有昂贵的非线性求解器循环的问题,解析导数会快得多。
如果您知道问题有多个局部最小值,则需要使用基于多起点梯度的方法或无梯度的方法。
答案 1 :(得分:0)
对不起,我不允许添加评论,所以这是一个后续问题,但这是一个答案;
询问/提及参数(目标(一个或多个)或设计变量)的规范化是否会根据优化程序改变收敛性也许很重要。换句话说,对于基于梯度的优化器,对变量进行归一化比对无梯度变量更重要吗?缩放和归一化单个目标案例的效果是什么(假设对于多目标案例,显然为什么要归一化)?